2007-10-14  Eric Seidel  <eric@webkit.org>

        Reviewed by aroben.

        Remove senseless malloc from paintOutline
        No tests needed, no functional change.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintOutline): remove unneeded malloc

2007-10-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix SVGSVGElement::currentView() to not leak by using an OwnPtr.
        This fix is incompatible with changes eventually needed for supporting
        SVGSVGElement.currentView in the bindings (that needs a ref'd object)
        There are also several parser crashers in SVGViewSpec, but those will be fixed
        in my next patch.
        
        Leak fix only, no additional tests needed.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentView): call .get() and .set()
        * ksvg2/svg/SVGSVGElement.h: use OwnPtr

2007-10-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fixing a few testcases by enabling SVG_EXPERIMENTAL on windows, and making the
        required fixes and corrections.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):
        * page/DOMWindow.idl:
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        * platform/win/WebCoreTextRenderer.cpp:

2007-10-12  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - more float/int conversion (to try to get the old builbot up)

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout): Cast to int.
        (WebCore::RenderSVGRoot::applyContentTransforms): Ditto.
        (WebCore::RenderSVGRoot::nodeAtPoint): Ditto.

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

        Reviewed by Harrison.
        
        <rdar://problem/5483370> GoogleDocs: Deleting cell text in a table row also removes any empty rows beneath the row being edited
        <rdar://problem/5482524> GoogleDocs: A hang occurs when applying list to selected table
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::modifyRange):
        (WebCore::InsertListCommand::doApply):

2007-10-12  Darin Adler  <darin@apple.com>

        - fix another float/int conversion

        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask): Explicitly cast to int.

2007-10-12  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix float/int conversions that cause warnings on older versions
          of gcc (like the version currently being used on the PowerPC
          buildbot slave)

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint): Explicitly cast to int.
        (WebCore::RenderPath::addFocusRingRects): Use enclosingIntRect
        to convert a FloatRect to an IntRect.
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        Use 0 for the initial value of an int, rather than 0.0f.
        (WebCore::svgTextStyleForInlineTextBox): Explicitly cast to int.
        (WebCore::applyTextAnchorToTextChunk): Ditto.

2007-10-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark.

        Cast zoom factor to int as the original patch did.  This is necessary to appease some versions of gcc.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):

2007-10-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        Fix leaks in SVG code from feature-branch.

        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::resolveStyle): always refs style
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create): fastFree buffer if CG Context creation fails

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

        Windows, Gtk and Qt build fixes.  Add new files to projects.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

=== Start merge of feature-branch 2007-10-12 ===

2007-10-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Bug 15469: feature branch has 100's of implicit double -> float conversions

        Re-enable -Wshorten-64-to-32, and make required code changes to make us build sanely again.
        
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::cssPrimitiveToLength):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        (WebCore::SVGAnimateMotionElement::updateAnimatedValue):
        (WebCore::parsePoint):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseKeySplines):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::parseMappedAttribute):
        * ksvg2/svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        (WebCore::SVGFELightElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::parseMappedAttribute):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        (WebCore::SVGLength::PercentageOfViewport):
        * ksvg2/svg/SVGNumber.idl:
        * ksvg2/svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::_parseNumber):
        (WebCore::parseNumber):
        (WebCore::pointsListFromSVGData):
        (WebCore::PathBuilder::svgMoveTo):
        (WebCore::PathBuilder::svgLineTo):
        (WebCore::PathBuilder::svgCurveToCubic):
        (WebCore::SVGPathSegListBuilder::svgMoveTo):
        (WebCore::SVGPathSegListBuilder::svgLineTo):
        (WebCore::SVGPathSegListBuilder::svgLineToHorizontal):
        (WebCore::SVGPathSegListBuilder::svgLineToVertical):
        (WebCore::SVGPathSegListBuilder::svgCurveToCubic):
        (WebCore::SVGPathSegListBuilder::svgCurveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::svgCurveToQuadratic):
        (WebCore::SVGPathSegListBuilder::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::svgArcTo):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::pixelUnitToMillimeterX):
        (WebCore::SVGSVGElement::pixelUnitToMillimeterY):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformDistance.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformValue):
        * ksvg2/svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * platform/graphics/svg/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::filterBBoxForItemBBox):
        * platform/graphics/svg/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        (WebCore::SVGComponentTransferFunction::SVGComponentTransferFunction):
        * platform/graphics/svg/filters/SVGFEComposite.cpp:
        (WebCore::SVGFEComposite::SVGFEComposite):
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::SVGFEConvolveMatrix::SVGFEConvolveMatrix):
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::SVGFEDiffuseLighting::SVGFEDiffuseLighting):
        * platform/graphics/svg/filters/SVGFEFlood.cpp:
        (WebCore::SVGFEFlood::SVGFEFlood):
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp:
        (WebCore::SVGFEGaussianBlur::SVGFEGaussianBlur):
        * platform/graphics/svg/filters/SVGFEMorphology.cpp:
        (WebCore::SVGFEMorphology::SVGFEMorphology):
        * platform/graphics/svg/filters/SVGFEOffset.cpp:
        (WebCore::SVGFEOffset::SVGFEOffset):
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp:
        (WebCore::SVGFESpecularLighting::SVGFESpecularLighting):
        * platform/graphics/svg/filters/SVGFETurbulence.cpp:
        (WebCore::SVGFETurbulence::SVGFETurbulence):
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        (WebCore::SVGFEColorMatrix::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm:
        (WebCore::getVectorForChannel):
        (WebCore::getLightVectors):
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        (WebCore::SVGFEImage::getCIFilter):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::calcViewport):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/RenderSVGTextPath.cpp:
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::calculateBaselineShift):
        (WebCore::SVGCharacterLayoutInfo::SVGCharacterLayoutInfo):
        (WebCore::SVGCharacterLayoutInfo::processedChunk):
        (WebCore::SVGCharacterLayoutInfo::nextPathLayoutPointAndAngle):
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::pathForDecoration):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2007-10-11  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Eric Seidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15076
        "deg2rad has multiple definitions"
        
        Use deg2rad, rad2deg, deg2grad, grad2deg, rad2grad, grad2rad
        from wtf where appropriate.
        
        No test cases as this doesn't change behaviour.
        
        Change based on original patch by Rob Buis.

        * ksvg2/svg/SVGAngle.cpp:
        (WebCore::SVGAngle::calculate):
        (WebCore::SVGAngle::convertToSpecifiedUnits):
        (WebCore::SVGAngle::todeg):
        (WebCore::SVGAngle::torad):
        * platform/graphics/AffineTransform.cpp:
        (WebCore::AffineTransform::rotateFromVector):
        (WebCore::AffineTransform::skewX):
        (WebCore::AffineTransform::skewY):
        * platform/graphics/cg/AffineTransformCG.cpp:
        (WebCore::AffineTransform::rotate):
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm:
        * rendering/RenderPath.cpp:
        (WebCore::drawMarkerWithData):

2007-10-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6421 (<text> textLength attribute is not respected)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6422 (<text> lengthAdjust attribute is not respected)

        Implement textLength and full lengthAdjust (both 'spacing' & 'spacingAndGlyphs' mode)
        for <text> & <tspan> & friends. <textPath> is still todo, as it's special.

        Also fix usage of cummulatedGlyphWidth/Height in SVGInlineTextBox, calculateGlyphBoundaries was
        supposed to be used in the distance calculations, to take per character transformations into account (ie. rotation).

        Fixes: svg/W3C-SVG-1.1/text-text-01-b.svg (complelty fixed the single W3C textLength testcase)
        Partly fixed: svg/batik/text/textOnPathSpaces.svg (kerning support missing)
        Partly fixed: svg/batik/text/textLayout.svg (word-letter spacing & textLength is todo)

        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::nextPathLayoutPointAndAngle):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunk::SVGTextChunk):
        (WebCore::SVGTextChunkWalker::operator()):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::cummulatedWidthOfTextChunk):
        (WebCore::cummulatedHeightOfTextChunk):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::applyTextLengthCorrectionToTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        (WebCore::SVGRootInlineBox::layoutTextChunks):
        (WebCore::SVGRootInlineBox::walkTextChunks):

2007-10-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Niko.

        Fix for Bug 15468: Parsing of numbers and lists is too lenient in SVG

        Correct parsing of numbers, number lists, and length lists in SVG.

        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber):

2007-10-11  Allan Sandfeld Jensen  <sandfeld@kde.org>
 
         Reviewed by Maciej and Eric.
 
         Implement CSS selector combinators nondeterministic matching. 
         Fixes http://bugs.webkit.org/show_bug.cgi?id=3428
 
         * css/CSSStyleSelector.cpp:
         (WebCore::CSSStyleSelector::matchRulesForList):
         (WebCore::CSSStyleSelector::checkSelector): Split the function and make the second part recursive
         (WebCore::CSSStyleSelector::checkOneSelector): Handle pseodo-elements rules and hoveractive quirks 
         here instead of in checkSelector.
         * css/CSSStyleSelector.h:
 
2007-10-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.
        
        Fix the SVG dom so that rect.x.baseVal = rect.x.baseVal like it should.
        http://bugs.webkit.org/show_bug.cgi?id=14150

        Test: svg/dom/animated-tearoff-equlity.xhtml

        * ksvg2/svg/SVGAnimatedTemplate.h:
        (WebCore::SVGAnimatedTypeWrapperKey::SVGAnimatedTypeWrapperKey):
        (WebCore::SVGAnimatedTypeWrapperKey::operator==):
        (WebCore::SVGAnimatedTypeWrapperKeyHash::hash):
        (WebCore::SVGAnimatedTypeWrapperKeyHash::equal):
        (WebCore::SVGAnimatedTypeWrapperKeyHashTraits::deletedValue):
        (WebCore::SVGAnimatedTypeWrapperKeyHashTraits::emptyValue):
        (WebCore::SVGAnimatedTemplate::~SVGAnimatedTemplate):
        (WebCore::SVGAnimatedTemplate::wrapperCache):
        (WebCore::SVGAnimatedTemplate::forgetWrapper):
        (WebCore::lookupOrCreateWrapper):
        * ksvg2/svg/SVGElement.h:

2007-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Leopard build fix -- SVGDocument should not trty to make read/write properties read-only

        Remove those API definitions SVGDocument now inherits from Document

        * ksvg2/svg/SVGDocument.idl:

2007-10-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Make renderers pull localTransform instead of depending on DOM elements to push
        This allows for cleaner invalidation code, and makes writing animation easier.
        Also fixed a tiny bug in SVGRenderImage focus ring calculations while there
        
        Updated test results for svg/custom/focus-ring.svg

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer):
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyAnimatedValueToElement):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyAnimatedValueToElement):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGGElement.cpp:
        (WebCore::SVGGElement::createRenderer):
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getCTM):
        (WebCore::SVGLocatable::getScreenCTM):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        (WebCore::SVGMarkerElement::notifyAttributeChange):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::rendererIsNeeded):
        (WebCore::SVGStyledElement::notifyResourceParentIfExistant):
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::style):
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        (WebCore::SVGStyledTransformableElement::notifyAttributeChange):
        (WebCore::SVGStyledTransformableElement::createRenderer):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::toPathData):
        * ksvg2/svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::createRenderer):
        * ksvg2/svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseMappedAttribute):
        (WebCore::SVGTextElement::animatedLocalTransform):
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTextPathElement.cpp:
        * ksvg2/svg/SVGTextPathElement.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::getCTM):
        (WebCore::SVGTransformable::getScreenCTM):
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::createRenderer):
        (WebCore::SVGUseElement::attachShadowTree):
        * platform/graphics/AffineTransform.h:
        (WebCore::AffineTransform::operator!=):
        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::setMarker):
        * platform/graphics/svg/SVGResourceMarker.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::calculateLocalTransform):
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::localTransform):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::RenderPath):
        (WebCore::RenderPath::localTransform):
        (WebCore::RenderPath::calculateLocalTransform):
        (WebCore::RenderPath::layout):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::localTransform):
        (WebCore::RenderSVGContainer::calculateLocalTransform):
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::calculateLocalTransform):
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::isSVGText):
        (WebCore::RenderSVGText::localTransform):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath):
        (WebCore::RenderSVGTextPath::startOffset):
        (WebCore::RenderSVGTextPath::exactAlignment):
        (WebCore::RenderSVGTextPath::stretchMethod):
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderSVGTransformableContainer.cpp: Added.
        (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer):
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h: Added.
        * rendering/RenderSVGViewportContainer.h:

2007-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric.

        Bug 15451: SVGStyledElement must unregister itself from Resources on detach
        
        Use a global hashtable to maintain the relationship between the
        various SVG resources and their clients, across dom updates, etc.

        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::detach):
        * ksvg2/svg/SVGStyledElement.h:
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::ResourceSet::ResourceSet):
        (WebCore::clientMap):
        (WebCore::SVGResource::~SVGResource):
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::removeClient):
        (WebCore::SVGResource::addClient):
        * platform/graphics/svg/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isPaintServer):
        (WebCore::SVGResource::isFilter):
        (WebCore::SVGResource::isClipper):
        (WebCore::SVGResource::isMarker):
        (WebCore::SVGResource::isMasker):
        * platform/graphics/svg/SVGResourceClipper.h:
        (WebCore::SVGResourceClipper::resourceType):
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/SVGResourceMarker.h:
        * platform/graphics/svg/SVGResourceMasker.h:

2007-10-10  Mark Rowe  <mrowe@apple.com>

        Windows build fix after r26109.

        * WebCore.vcproj/WebCore.vcproj:

2007-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric.

        Fix Bug 15433: Filters do not repaint when base resources change/update

        SVGFEImage now actually responds to image updates, and triggers a repaint.

        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/filters/SVGFEImage.cpp:
        (WebCore::SVGFEImage::setCachedImage):
          Don't re-set the image lest we want to trigger infinite recursion.
        (WebCore::SVGFEImage::imageChanged):
          Image change means we need to tell our clients to repaint
        * platform/graphics/svg/filters/SVGFEImage.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
          make sure that users of filters are registered.

2007-10-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Alp.

        Track changes in r26109 to fix the Gtk+ build.

        * WebCore.pro:

2007-10-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=15436
        Wrong node order for XPath reverse axes

        Test: fast/xpath/reverse-axes.html

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Do not prematurely sort reverse
        axes. Generate preceding axis nodes in reversed document order.

2007-10-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=15437
        XPath substring-after function is broken

        Test: fast/xpath/substring-after.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstringAfter::evaluate): Fix it for real this time, hopefully.

2007-10-09  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=15080
        <use> element not refresh after adding objects by script in referrer

        Update shadow tree when elements are added/removed from a tree
        that is referenced by a <use>.

        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::childrenChanged):
        * ksvg2/svg/SVGStyledElement.h:

2007-10-09  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15088
        HTMLOptionElement.selected returns false when parent HTMLSelectElement is "display: none" until parent's .selectedIndex is accessed

        Make sure the list items are up to date when there is no renderer.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):

2007-10-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Build fix.  Fix circular build rule for CSS*.in files evident on clean build.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/css/CSSPropertyNames.in: Removed.
        * ksvg2/css/CSSValueKeywords.in: Removed.
        * ksvg2/css/SVGCSSPropertyNames.in: Copied from ksvg2/css/CSSPropertyNames.in.
        * ksvg2/css/SVGCSSValueKeywords.in: Copied from ksvg2/css/CSSValueKeywords.in.

2007-10-08  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Implement getComputedStyle support for SVG CSS values
        http://bugs.webkit.org/show_bug.cgi?id=15422
        
        This also unifies SVG and non-SVG CSS hash lookups. A unified hash
        solves correctness problems as well as offers improved speed.
        
        Test: svg/css/getComputedStyle-basic.xhtml

        * DerivedSources.make: unify SVG and non-SVG CSS hash files
        * WebCore.xcodeproj/project.pbxproj: remove old SVG CSS hash files
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): call getPropertyCSSValue
        * css/CSSComputedStyleDeclaration.h: add getPropertyCSSValue
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * ksvg2/css/CSSPropertyNames.in: remove font-size-adjust
        * ksvg2/css/SVGCSSComputedStyleDeclaration.cpp: Added.
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue): added.
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/scripts/cssmakeprops: Removed.
        * ksvg2/scripts/cssmakevalues: Removed.
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::mapAttributeToCSSProperty):
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName): remove font-size-adjust

2007-10-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg;

        Fix for <rdar://problem/5519698> CrashTracer: [USER] 47 crashes in Safari at com.apple.WebCore: WebCore::XMLTokenizer::lineNumber const + 9

        Test: fast/innerHTML/innerHTML-script-tag-crash.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::lineNumber): Return 1 when there is no context.
        (WebCore::XMLTokenizer::columnNumber): ditto.

2007-10-08  Alexey Proskuryakov  <ap@webkit.org>

        * platform/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::setFont): Restored one of the -1 checks removed in
        the previous change - we do need to check m_font!

2007-10-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15397
        Layout tests freeze in HashTable::lookup

        Fixes a DRT freeze on PowerPC.

        * platform/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData): Don't ask for a size of a nil font,
        the result is undefined.
        (WebCore::FontPlatformData::setFont): Ditto. Also removed some checks for -1 that
        were not sufficient, and thus likely unnecessary,

2007-10-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix some issues with rotation & baseline-shift, when spanning
        across <tspan> elements. Highlighted by the existing batik tests.

        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::SVGCharacterLayoutInfo):
        (WebCore::SVGCharacterLayoutInfo::processedChunk):
        (WebCore::SVGChar::characterTransform):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):

2007-10-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Bug 5122: Need an equivalent of Mozilla's DOMContentLoaded event
        http://bugs.webkit.org/show_bug.cgi?id=5122

        This is based on a patch by Daniel Peebles (pumpkingod@gmail.com).

        Test: http/tests/loading/DOMContentLoaded-event.html

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing): Dispatch the DOMContentLoaded event when parsing completes.
        * dom/EventNames.h:  Add DOMContentLoaded to the list of events.

2007-10-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=15368
        xsl:import fails when preceded by comment

        Test: fast/xsl/import-after-comment.xml

        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::loadChildSheets): It's OK for xsl:import to be preceded by
        non-element nodes.

2007-10-07  Vincent Ricard  <magic@magicninja.org>

        Reviewed by Maciej.  Landed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=15062
        Implement document.compatMode

        Tests: fast/dom/compatMode-AlmostStrict.html
               fast/dom/compatMode-Compat.html
               fast/dom/compatMode-Strict.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::compatMode):
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:

2007-10-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin & Nikolas.  Landed by eseidel.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14455
        Autogenerate the JS bindings for the StyleSheetList

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSStyleSheetListCustom.cpp: Added.
        (WebCore::JSStyleSheetList::canGetItemsForName):
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::StyleSheetList):
        (WebCore::StyleSheetList::documentDestroyed):
        (WebCore::StyleSheetList::getNamedItem):
        * css/StyleSheetList.h: Add Document member variable and
        getNamedItem function to accommodate the odd javascript 
        name getter functionality.
        * css/StyleSheetList.idl:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * page/DOMWindow.idl: Add StyleSheetListConstructor

2007-10-07  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Eric Seidel.

        make CSS cell cursor more mac-like
        http://bugs.webkit.org/show_bug.cgi?id=15325

        * Resources/cellCursor.png:

2007-10-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.
        
        SVG does not correctly handle onfocusin, onfocusout or onactivate
        http://bugs.webkit.org/show_bug.cgi?id=12573

        Test: svg/W3C-SVG-1.1/script-handle-02-b.svg

        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):
        * ksvg2/svg/svgattrs.in: add onfocusin, onfocusout and onactivate

2007-10-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Never pass null input images to CICrop filter.

        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
        (WebCore::SVGFEComponentTransfer::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:

2007-10-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Gtk+ build fix and minor code cleanup.

        * WebCore.pro:
        * platform/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::fontExists):

2007-10-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=15380
        XPath: id('foo') doesn't resolve correctly

        Test: fast/xpath/id-simple.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate): Fixed a logic error in id() parameter parsing.

2007-10-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13707
        REGRESSION: JavaScript exceptions on quotes.burntelectrons.org

        http://bugs.webkit.org/show_bug.cgi?id=12628
        document.body is not supported in XHTML documents

        http://bugs.webkit.org/show_bug.cgi?id=14213
        On page with MIME type application/xhtml+xml, cookie don't work

        Moved a bunch of methods and properties from HTMLDocument down into Document to make
        them available for all documents (xml, svg).
        What was kept in HTMLDocument:
        - some methods and properties that are not in HTML5 (yet?);
        - open/write/writeln/close, as they will need to be modified to work on XML documents, and aren't
        of much use for those anyway;
        - designMode, because its definition in HTML5 is incompatible with our implementation.

        Covered by existing tests.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/objc/PublicDOMInterfaces.h:
        * dom/Document.cpp:
        (WebCore::Document::setBody):
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        (WebCore::Document::lastModified):
        * dom/Document.h:
        (WebCore::Document::title):
        * dom/Document.idl:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:

2007-10-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        RenderSVGContainer (<g>) should not repaint when its bounds change (unless it has a filter)
        http://bugs.webkit.org/show_bug.cgi?id=15388
        This makes the Sun Lively Kernel invalidate only what it should!
        
        No tests possible in DRT.

        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange): replace call to rebuildRenderer
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange): replace call to rebuildRenderer
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange): replace call to rebuildRenderer
        (WebCore::SVGImageElement::hasRelativeValues): implemented
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange): replace call to rebuildRenderer
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange): replace call to rebuildRenderer
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange): replace call to rebuildRenderer
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange): replace call to rebuildRenderer
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasRelativeValues): default to true instead
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::updateLocalTransform): don't layout if no change
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGTransform.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::selfWillPaint): return true if have a filter
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::layout):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout):
        (WebCore::RenderSVGViewportContainer::calcViewport): use floats

2007-10-06  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        Use document() instead of ownerDocument() and a few other cleanups.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::mapInstanceToElement):
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::containsUseChildNode):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::notifyAttributeChange):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::notifyAttributeChange):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::notifyAttributeChange):

2007-10-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        SVG invalidates way too much during layout()
        http://bugs.webkit.org/show_bug.cgi?id=14003

        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement): simplify if
        (WebCore::SVGElement::viewportElement): simplify if
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): only layout children if parent changed
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout): only layout children when size changes
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): hack to avoid bad RenderBlock::layout code
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::layout): don't use RenderSVGContainer::layout()

2007-10-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric.

        30%+ performance improvement for svg embedded in xhtml

        Relayout internal to SVG was incorrectly being propagated to
        the containing xhtml element, which subsequently resulted in
        a full paint of the SVG, rather than just the dirty regions.

        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):
        (WebCore::RenderObject::markContainingBlocksForLayout):

2007-10-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.
        
        http://bugs.webkit.org/show_bug.cgi?id=12310
        Remove static variables from removeAllChildren causing crash.
        removeAllChildren now iterates over the entire tree instead of recursing.
        Also (according to Maciej) a possible 1-2% speedboost on HTML iBench.

        Test: fast/images/svg-background-crash-on-refresh.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::addChildNodesToDeletionQueue):
        (WebCore::ContainerNode::removeAllChildren): use new addChildNodesToDeletionQueue

2007-10-03  David Hyatt  <hyatt@apple.com>

        Land support for the CSS @font-face rule.  This patch allows custom fonts
        to be downloaded from the Web and rendered in Web pages.  Right now only
        TrueType fonts are supported.  Proprietary formats like .eot are not
        supported.

        Reviewed by Eric Seidel

        Many tests will be coming in a future landing.

        * WebCore.base.exp:
        Expose some more stuff for WebKit, caused by font restructuring.

        * WebCore.xcodeproj/project.pbxproj:
        Add all the new font face files.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Make sure to ignore the 'src' property of @font-face rules.

        * css/CSSFontFace.cpp: Added.
        (WebCore::CSSFontFace::CSSFontFace):
        (WebCore::CSSFontFace::~CSSFontFace):
        (WebCore::CSSFontFace::isLoaded):
        (WebCore::CSSFontFace::isValid):
        (WebCore::CSSFontFace::addSource):
        (WebCore::CSSFontFace::fontLoaded):
        (WebCore::CSSFontFace::getFontData):
        * css/CSSFontFace.h: Added.
        A CSSFontFace is a composite object.  It consists of multiple font-face sources, where each source represents either a remote or local
        file in a @font-face rule's src list.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::setDeclaration):
        (WebCore::CSSFontFaceRule::cssText):
        * css/CSSFontFaceRule.h:
        The implementation of the @font-face rule itself in the CSS sheet back end.
        
        * css/CSSFontFaceSource.cpp: Added.
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::~CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::pruneTable):
        (WebCore::CSSFontFaceSource::isLoaded):
        (WebCore::CSSFontFaceSource::isValid):
        (WebCore::CSSFontFaceSource::fontLoaded):
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h: Added.
        (WebCore::CSSFontFaceSource::string):
        (WebCore::CSSFontFaceSource::setFontFace):
        A font face source represents a single remote or local font.  If it represents a remote font than it wraps a CachedFont.
        
        * css/CSSFontFaceSrcValue.cpp: Added.
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat):
        (WebCore::CSSFontFaceSrcValue::cssText):
        * css/CSSFontFaceSrcValue.h: Added.
        (WebCore::CSSFontFaceSrcValue::m_isLocal):
        (WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
        (WebCore::CSSFontFaceSrcValue::resource):
        (WebCore::CSSFontFaceSrcValue::format):
        (WebCore::CSSFontFaceSrcValue::isLocal):
        (WebCore::CSSFontFaceSrcValue::setFormat):
        Used in parsing.  Represents the parsed form of the src value that can then be used to build up a CSSFontFace.

        * css/CSSFontSelector.cpp: Added.
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        (WebCore::CSSFontSelector::isEmpty):
        (WebCore::CSSFontSelector::docLoader):
        (WebCore::hashForFont):
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::fontLoaded):
        (WebCore::CSSFontSelector::getFontData):
        * css/CSSFontSelector.h: Added.
        The CSS font selector is the object that selects the correct font given a specified font family.  It builds up a database of CSSFontFaces that can then be handed
        back.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontFaceSrc):
        (WebCore::CSSParser::createFontFaceRule):
        * css/CSSParser.h:
        Modify the CSS grammar to now understand @font-face rules.

        * css/CSSPropertyNames.in:
        Add the src property.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::updateFont):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::ensureFontSelector):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::fontSelector):
        The style selector now creates a font selector object and feeds it the appropriate information when @font-face rules are encountered.
    
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        Patch the update method now that it takes a font selector argument.
    
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        Teach the Cache about CachedFonts.

        * loader/CachedFont.cpp: Added.
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ref):
        (WebCore::CachedFont::data):
        (WebCore::CachedFont::beginLoadIfNeeded):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allReferencesRemoved):
        (WebCore::CachedFont::checkNotify):
        (WebCore::CachedFont::error):
        * loader/CachedFont.h: Added.
        (WebCore::CachedFont::schedule):
        The implementation of CachedFont.  This represents the downloaded resource and has all the raw font data.

        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        * loader/CachedResourceClient.h:
        (WebCore::CachedResourceClient::fontLoaded):
        Add a new fontLoaded method for clients of cached resources to track when fonts finish downloading.
    
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestFont):
        * loader/DocLoader.h:
         Add the ability to request a font.

        * platform/Font.cpp:
        (WebCore::Font::operator==):
        (WebCore::Font::update):
        (WebCore::Font::drawText):
        * platform/Font.h:
        * platform/FontCache.cpp:
        (WebCore::FontCache::getFontData):
        * platform/FontCache.h:
        * platform/FontData.cpp:
        (WebCore::FontData::FontData):
        * platform/FontData.h:
        (WebCore::FontData::isCustomFont):
        (WebCore::FontData::isLoading):
        * platform/FontFallbackList.cpp:
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::fontDataAt):
        * platform/FontFallbackList.h:
        (WebCore::FontFallbackList::loadingCustomFonts):
        (WebCore::FontFallbackList::fontSelector):
        * platform/FontSelector.h: Added.
        (WebCore::FontSelector::~FontSelector):
        * platform/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::getRoot):
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData):
        (WebCore::GlyphPageTreeNode::~GlyphPageTreeNode):
        (WebCore::GlyphPageTreeNode::initializePage):
        (WebCore::GlyphPageTreeNode::getChild):
        (WebCore::GlyphPageTreeNode::pruneCustomFontData):
        * platform/GlyphPageTreeNode.h:
        (WebCore::GlyphPageTreeNode::GlyphPageTreeNode):
        (WebCore::GlyphPageTreeNode::page):
        * platform/PopupMenuClient.h:
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::fontExists):
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/mac/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/mac/FontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::FontData::platformInit):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::platformWidthForGlyph):
        (WebCore::FontData::checkShapesArabic):
        * platform/mac/FontMac.mm:
        (WebCore::initializeATSUStyle):
        (WebCore::Font::drawGlyphs):
        * platform/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/mac/FontPlatformDataMac.mm: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::~FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::fontExists):
        * platform/win/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::getData):
        (WebCore::releaseData):
        (WebCore::getBytesWithOffset):
        (WebCore::createFontCustomPlatformData):
        * platform/win/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):
        * platform/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        Changes to platform to support rendering of custom fonts.  Too large to go into, but for ports, the relevant object to implement is
        FontCustomPlatformData (to get the data loaded into your native font format), and then you have to patch your other font objects to know
        how to use the font.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::fontSelector):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::fontSelector):
        * rendering/RenderTextControl.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::setFontFromControlSize):
        Patches for update now taking a font selector argument.
    
2007-10-03  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        Remove unneeded code and other cleanups.

        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.h:

2007-10-03  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15260
        Any styles defined after <element> {<property>:%} style are ignored by Safari
    
        Add dummy rule to skip constructions like width: %.

        * css/CSSGrammar.y:

2007-10-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Lars.

        Get Gtk+ port building on the feature branch.

        * WebCore.pro:
        * ksvg2/svg/SVGSVGElement.cpp:
        * platform/graphics/svg/cairo/RenderPathCairo.cpp:
        (WebCore::RenderPath::strokeContains):
        * platform/graphics/svg/cairo/SVGPaintServerCairo.cpp:
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/cairo/SVGPaintServerSolidCairo.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/cairo/SVGResourceMaskerCairo.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * rendering/SVGCharacterLayoutInfo.cpp:
        * rendering/SVGInlineTextBox.cpp:
        * rendering/SVGRootInlineBox.cpp:

2007-10-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15102
        XMLHttpRequests should dispatch a readystatechange event.

        Test: http/tests/xmlhttprequest/readystatechange.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): Added readystatechange
        event support. Fixed the function to dispatch the same event to all listeners
        instead of creating a new copy for each one. Changed bubbling/cancelability of
        load and readystatechange events to match Firefox.

2007-10-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        http://bugs.webkit.org/show_bug.cgi?id=13828
        Fixes svg/custom/rootmost-svg-xy-attrs.xhtml

        * WebCore.xcodeproj/project.pbxproj: fix warning about SVGDOM.h
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport): use new isOutermostSVG()
        (WebCore::SVGSVGElement::getCTM): use isOutermostSVG()
        (WebCore::SVGSVGElement::getScreenCTM): use isOutermostSVG()
        (WebCore::SVGSVGElement::createRenderer): use isOutermostSVG()
        (WebCore::SVGSVGElement::isOutermostSVG):
        * ksvg2/svg/SVGSVGElement.h: add isOutermostSVG
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcViewport): ignore x/y

2007-10-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.
        
        - Avoid uselessly serializing CSS property values on replacement for 10% CK DOM speedup
        http://bugs.webkit.org/show_bug.cgi?id=15340

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::removeProperty): Don't generate return value unless needed.
        (WebCore::CSSMutableStyleDeclaration::setProperty): Use the no-return version appropriately.
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::removeProperty): New version with no return value.

2007-10-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - Use Vector<UChar> instead of DeprecatedString for innerHTML, for 35% speedup on CK DOM test
        http://bugs.webkit.org/show_bug.cgi?id=15339

        Rewrote both versions of createMarkup to build based on
        Vector<UChar> instead of String. Also other miscellaneous
        speedups (mainly content strings are now encoded in a way that
        doesn't take a function call per character, and switch is avoided).
        
        This also causes a functional change - we no longer escape '>' since this was unnecessary and it's faster
        to avoid testing for it. See updated test results.
        
        * editing/markup.cpp:
        (WebCore::appendString):
        (WebCore::appendAttributeValue):
        (WebCore::escapeContentText):
        (WebCore::appendEscapedContent):
        (WebCore::appendDeprecatedString):
        (WebCore::appendQuotedURLAttributeValue):
        (WebCore::stringValueForRange):
        (WebCore::ucharRange):
        (WebCore::appendUCharRange):
        (WebCore::appendNamespace):
        (WebCore::appendStartMarkup):
        (WebCore::getStartMarkup):
        (WebCore::appendEndMarkup):
        (WebCore::getEndMarkup):
        (WebCore::appendMarkup):
        (WebCore::joinMarkups):
        (WebCore::createMarkup):
        * editing/markup.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge markupStringFromNode:nodes:]):
        (-[WebCoreFrameBridge markupStringFromRange:nodes:]):

2007-10-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - fixed "innerHTML updates layout every time (very bad if adding to it in a loop)"
        http://bugs.webkit.org/show_bug.cgi?id=15326
        (65% speedup on Celtic Kane JS 2007 DOM test)

        * editing/markup.cpp:
        (WebCore::createMarkup): The Node version of this function currently never uses
        the render tree, so don't bother to update layout. This is the version used for
        innerHTML.

2007-10-02  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by eseidel & hyatt.

        Add support for CSS3 values 'start' and 'end' to text-align property.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): allow start and end values
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): handle start and end values

2007-10-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark.

        Enable Experimental SVG features by default when building from Xcode

        * Configurations/WebCore.xcconfig:

2007-10-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        This only affects Debug builds, and the ability to save SVGs as WebArchives
        neither are testable via DumpRenderTree.

        * Configurations/WebCore.xcconfig: change where Xcode looks for WebCore.exp
        * DerivedSources.make: adds SVG symbols to WebCore.exp when necessary
        * WebCore.SVG.exp: Added.
        * WebCore.exp: moved to WebCore.base.exp
        * WebCore.xcodeproj/project.pbxproj: updated to reflect moved files
        * bindings/objc/DOMSVGExecption.h: moved to DOMSVGException.h

2007-10-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Make feature-branch build again with ENABLE_SVG_EXPERIMENTAL_FEATURES
        Needed a double -> float change to make the new filter types build.

        Build fix, no test cases.

        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.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/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.h:

2007-09-30  Julien  <julien.chaffraix@gmail.com>

        Reviewed by aroben & eseidel.

        fix http://bugs.webkit.org/show_bug.cgi?id=14898

        getAllResponseHeaders() separates each header with a CR LF according to the specification

        Test: http/tests/xmlhttprequest/xmlhttprequest-crlf-getAllResponseHeader.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):

2007-09-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Wenig.

        ASSERT when dragging <svg:image> with non-null prefix
        http://bugs.webkit.org/show_bug.cgi?id=15308

        * bindings/objc/DOM.mm:
        (WebCore::lookupElementClass): added
        (WebCore::elementClass): use new lookupElementClass function

2007-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.

        I managed to break the SVG build when fixing the --no-svg build for
        http://bugs.webkit.org/show_bug.cgi?id=15281
        This adds the appropriate DOMSVG headers to the copy headers phase
        (in fixing the no-svg build I mistakenly re-marked them project-only)

        * WebCore.xcodeproj/project.pbxproj:

2007-09-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Rob Buis.

        Already tested by SVG/W3C-SVG-1.1/linking-a-07-t.svg

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): properly pass along target values

2007-09-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):

2007-09-09  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Rework <pattern> support to take overflow & viewBox into account.
        Also fix all possible combinations of patternUnits/patternContentUnits, tested by several batik testcases.
        (Status: <mask>, <pattern>, <linearGradient>, <radialGradient>, <filter> regions work perfectly. <clipPath> is sill todo)

        While I'm at it, add a very helpful debugging tool "dumpCGOutputImage" and rename "dumpOutputImage" to "dumpCIOutputImage".
        Also fix possible null image buffer problems. (ie. large alloc)

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12221 (Webkit ToT fails to render this pattern example)

        * ksvg2/svg/PatternAttributes.h:
        (WebCore::PatternAttributes::PatternAttributes):
        (WebCore::PatternAttributes::x):
        (WebCore::PatternAttributes::y):
        (WebCore::PatternAttributes::width):
        (WebCore::PatternAttributes::height):
        (WebCore::PatternAttributes::setX):
        (WebCore::PatternAttributes::setY):
        (WebCore::PatternAttributes::setWidth):
        (WebCore::PatternAttributes::setHeight):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::patternCallback):
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        (WebCore::dumpCIOutputImage):
        (WebCore::dumpCGOutputImage):

2007-09-05  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix <mask> in userSpaceOnUse coordinates. Verified by new testcase taken from Batik.

        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

2007-09-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Rewrite text painting code path, to be based on "text chunks" instead of using the InlineBox* hierarchy.
        This allows us to reuse paint servers as long as possible - and to actually paint in the way didacted by the spec.

        This also implements advanced SVG text decorations (ie. stroked/filled decos with gradient/pattern).
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=7200 (Gradient appears and disappears in SVG when text is off screen)

        Fixes paint server usage on text paths. (ie. styled text paths, with gradients/filters).

        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::renderPath):
        (WebCore::SVGPaintServer::strokePath):
        (WebCore::SVGPaintServer::clipToStrokePath):
        (WebCore::SVGPaintServer::fillPath):
        (WebCore::SVGPaintServer::clipToFillPath):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::findTextRootObject):
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::renderPath):
        * rendering/RenderSVGInlineText.cpp:
        * rendering/RenderSVGTSpan.cpp:
        * rendering/RenderSVGText.cpp:
        * rendering/RenderSVGTextPath.cpp:
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalkerBase::~SVGTextChunkWalkerBase):
        (WebCore::SVGTextChunkWalker::SVGTextChunkWalker):
        (WebCore::SVGTextChunkWalker::operator()):
        (WebCore::SVGTextChunkWalker::start):
        (WebCore::SVGTextChunkWalker::end):
        (WebCore::SVGTextChunkWalker::setupFill):
        (WebCore::SVGTextChunkWalker::setupStroke):
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::SVGInlineTextBoxClosestCharacterToPositionWalker):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::character):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::offset):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::SVGInlineTextBoxSelectionRectWalker):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::selectionRect):
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::selectionRect):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintSelection):
        (WebCore::pathForDecoration):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBoxPaintWalker::~SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBoxPaintWalker::teardownFillPaintServer):
        (WebCore::SVGRootInlineBoxPaintWalker::teardownStrokePaintServer):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkStartCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkEndCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupFillCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupStrokeCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::addPaintServerToTextDecorationInfo):
        (WebCore::SVGRootInlineBox::retrievePaintServersForTextDecoration):
        (WebCore::SVGRootInlineBox::walkTextChunks):
        * rendering/SVGRootInlineBox.h:

2007-08-27  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Expose unitsPerEm() in Font classes.
        This is needed to implement SVG's advanced text decorations. We won't draw lines for text-decorations
        but fillable & strokable rectangles with a certain height, computed through unitsPerEm & font size.

        * platform/Font.cpp:
        (WebCore::Font::unitsPerEm):
        * platform/Font.h:
        * platform/FontData.h:
        (WebCore::FontData::unitsPerEm):
        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::platformInit):
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):
        * platform/qt/FontDataQt.cpp:
        (WebCore::FontData::platformInit):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        * platform/wx/FontDataWx.cpp:
        (WebCore::FontData::platformInit):

2007-08-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Initialise iterators to appease gcc

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):

2007-08-22  Rob Buis  <buis@kde.org>

        Reviewed by Sam.

        http://bugs.webkit.org/show_bug.cgi?id=12059
        SVG colors have two separate parsing paths (one CSS and one SVGColor::setRGBColor)

        Reuse the css parser as much as possible in setRGBColor.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/cssparser.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::checkForLegacyHTMLStyleChange):
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

2007-08-21  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Large SVG filter rework. Bring it back in a useable state.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5527 (Filters need subregion support)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5579 (WebKit+SVG renders full-filters-example incorrectly)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5976 (filterUnits="userSpaceOnUse" is broken (breaking feTile test case))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12064 (Need function for manual style-resolution for things like gradient stops)

        filters-blend-01-b.svg & filters-example-01-b.svg & filters-displace-01-b.svg & filters-diffuse-01-f.svg are fixed now.

        In detail:
        - flood-color & flood-opacity have been incorrectly resolved on the <feBlend> parent element!
        - sizing of filter region was truncated in some cases, as the bbox was used to resolve the needed filter region instead of the filter rect
        - add subregion support to all filter primitives (primitiveUnits & filterUnits handled in all cases)
        - WKDisplacmentMap.cikernel incorrectly flipped the y-axis.
        - Correctly specify default values for all filter primitives in ksvg2/svg!
        - Initialize all variables of the SVGFE* classes in platform/graphics/svg/filters.
        - Fix 'flood-color' initial value (was set to the _stop_ color initial value)
          -> both initial values were pointing to 'black' though, so it was no visible problem.
        - Parse 'lighting-color' css property, no more hacking in SVGFEDiffuseLighting.
          -> Correct it's initial from black to white value fixes SVG lighting filters!
        - Add diffuseConstant support to feDiffuseLighting filter.
        - Centralize manual style resolution (needed for stop-color, flood-color & flood-opacity, lighting-color)

        * ksvg2/css/SVGCSSParser.cpp:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleMiscData::StyleMiscData):
        (StyleMiscData::operator==):
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        (WebCore::SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::SVGFEDistantLightElement):
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFuncAElement.cpp:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncBElement.cpp:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncRElement.cpp:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        (WebCore::SVGFEImageElement::filterEffect):
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::parseMappedAttribute):
        (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::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::resolveStyle):
        * ksvg2/svg/SVGStyledElement.h:
        * platform/graphics/svg/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::addFilterEffect):
        (WebCore::SVGResourceFilter::filterBBoxForItemBBox):
        * platform/graphics/svg/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::xBoundingBoxMode):
        (WebCore::SVGResourceFilter::setXBoundingBoxMode):
        (WebCore::SVGResourceFilter::yBoundingBoxMode):
        (WebCore::SVGResourceFilter::setYBoundingBoxMode):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::createFilterEffect):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::dumpOutputImage):
        (WebCore::SVGResourceFilter::applyFilter):
        (WebCore::SVGResourceFilter::getCIFilterStack):
        (WebCore::SVGResourceFilter::imageForName):
        (WebCore::SVGResourceFilter::setImageForName):
        (WebCore::SVGResourceFilter::setOutputImage):
        (WebCore::alphaImageForImage):
        (WebCore::SVGResourceFilter::inputImage):
        * platform/graphics/svg/filters/SVGDistantLightSource.h:
        * platform/graphics/svg/filters/SVGFEBlend.cpp:
        (WebCore::SVGFEBlend::SVGFEBlend):
        * platform/graphics/svg/filters/SVGFEBlend.h:
        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp:
        (WebCore::SVGFEColorMatrix::SVGFEColorMatrix):
        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp:
        (WebCore::SVGFEComponentTransfer::SVGFEComponentTransfer):
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        (WebCore::SVGComponentTransferFunction::SVGComponentTransferFunction):
        * platform/graphics/svg/filters/SVGFEComposite.cpp:
        (WebCore::SVGFEComposite::SVGFEComposite):
        * platform/graphics/svg/filters/SVGFEComposite.h:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::SVGFEConvolveMatrix::SVGFEConvolveMatrix):
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::SVGFEDiffuseLighting::SVGFEDiffuseLighting):
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp:
        (WebCore::SVGFEDisplacementMap::SVGFEDisplacementMap):
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
        * platform/graphics/svg/filters/SVGFEFlood.cpp:
        (WebCore::SVGFEFlood::SVGFEFlood):
        * platform/graphics/svg/filters/SVGFEFlood.h:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp:
        (WebCore::SVGFEGaussianBlur::SVGFEGaussianBlur):
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
        * platform/graphics/svg/filters/SVGFEImage.cpp:
        (WebCore::SVGFEImage::SVGFEImage):
        * platform/graphics/svg/filters/SVGFEImage.h:
        * platform/graphics/svg/filters/SVGFEMerge.cpp:
        * platform/graphics/svg/filters/SVGFEMerge.h:
        (WebCore::SVGFEMerge::SVGFEMerge):
        * platform/graphics/svg/filters/SVGFEMorphology.cpp:
        (WebCore::SVGFEMorphology::SVGFEMorphology):
        * platform/graphics/svg/filters/SVGFEMorphology.h:
        * platform/graphics/svg/filters/SVGFEOffset.cpp:
        (WebCore::SVGFEOffset::SVGFEOffset):
        * platform/graphics/svg/filters/SVGFEOffset.h:
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp:
        (WebCore::SVGFESpecularLighting::SVGFESpecularLighting):
        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
        * platform/graphics/svg/filters/SVGFETile.h:
        (WebCore::SVGFETile::SVGFETile):
        * platform/graphics/svg/filters/SVGFETurbulence.cpp:
        (WebCore::SVGFETurbulence::SVGFETurbulence):
        * platform/graphics/svg/filters/SVGFETurbulence.h:
        * platform/graphics/svg/filters/SVGFilterEffect.cpp:
        (WebCore::SVGFilterEffect::SVGFilterEffect):
        (WebCore::SVGFilterEffect::primitiveBBoxForFilterBBox):
        (WebCore::SVGFilterEffect::filter):
        (WebCore::SVGFilterEffect::setFilter):
        * platform/graphics/svg/filters/SVGFilterEffect.h:
        (WebCore::SVGFilterEffect::xBoundingBoxMode):
        (WebCore::SVGFilterEffect::setXBoundingBoxMode):
        (WebCore::SVGFilterEffect::yBoundingBoxMode):
        (WebCore::SVGFilterEffect::setYBoundingBoxMode):
        (WebCore::SVGFilterEffect::widthBoundingBoxMode):
        (WebCore::SVGFilterEffect::setWidthBoundingBoxMode):
        (WebCore::SVGFilterEffect::heightBoundingBoxMode):
        (WebCore::SVGFilterEffect::setHeightBoundingBoxMode):
        * platform/graphics/svg/filters/SVGLightSource.cpp:
        * platform/graphics/svg/filters/SVGLightSource.h:
        * platform/graphics/svg/filters/SVGPointLightSource.h:
        (WebCore::SVGPointLightSource::SVGPointLightSource):
        * platform/graphics/svg/filters/SVGSpotLightSource.h:
        (WebCore::SVGSpotLightSource::SVGSpotLightSource):
        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm:
        (WebCore::SVGFEBlend::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        (WebCore::SVGFEColorMatrix::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
        (WebCore::filterForComponentFunc):
        (WebCore::SVGFEComponentTransfer::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm:
        (WebCore::SVGFEComposite::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm:
        (WebCore::SVGFEDiffuseLighting::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm:
        (WebCore::SVGFEDisplacementMap::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm:
        (WebCore::SVGFEFlood::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm:
        (WebCore::SVGFEGaussianBlur::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        (WebCore::SVGFEImage::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm:
        (WebCore::SVGFEMerge::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm:
        (WebCore::SVGFEOffset::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm:
        (WebCore::SVGFESpecularLighting::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFETileCg.mm:
        (WebCore::SVGFETile::getCIFilter):
        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm:
        (WebCore::SVGFilterEffect::getCIFilter):
        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.cikernel:
        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.cikernel:
        * platform/graphics/svg/filters/cg/WKSpotLightFilter.m:
        (-[WKSpotLightFilter outputImage]):
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:
        (WebCore::SVGResourceFilter::createFilterEffect):

2007-08-20  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas.

        http://bugs.webkit.org/show_bug.cgi?id=14924
        rotated rect with pattern draws incorrectly

        Use the bounding box before transformation.

        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2007-08-19  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas.

        http://bugs.webkit.org/show_bug.cgi?id=14926
        WebKit has 'em' length handling problems related to CSS properties

        Parse the properties in inline style attributes non-strict for SVG.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):

2007-08-17  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=14927
        use element in SVG does not render after parent is displayed off and on

        Also detach the shadow tree when detaching the <use>.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::detach):
        * ksvg2/svg/SVGUseElement.h:

2007-08-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

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

        Final, long-awaited RenderSVGContainer split. Make RenderSVGContainer really a simple
        container without special cases for inner <svg> elements or <marker>. Create a new
        RenderSVGViewportContainer class handling these cases now.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::applyContentTransforms):
        (WebCore::RenderSVGContainer::applyAdditionalTransforms):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::relativeBBox):
        (WebCore::RenderSVGContainer::nodeAtPoint):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGRoot.cpp:
        * rendering/RenderSVGViewportContainer.cpp: Added.
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::~RenderSVGViewportContainer):
        (WebCore::RenderSVGViewportContainer::layout):
        (WebCore::RenderSVGViewportContainer::paint):
        (WebCore::RenderSVGViewportContainer::applyContentTransforms):
        (WebCore::RenderSVGViewportContainer::applyAdditionalTransforms):
        (WebCore::RenderSVGViewportContainer::viewport):
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        (WebCore::RenderSVGViewportContainer::absoluteTransform):
        (WebCore::RenderSVGViewportContainer::nodeAtPoint):
        * rendering/RenderSVGViewportContainer.h: Added.
        (WebCore::RenderSVGViewportContainer::isSVGContainer):
        (WebCore::RenderSVGViewportContainer::renderName):

2007-08-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver & Rob.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12501 (SVG Text fails to respect opacity, fill-opacity and stroke-opacity)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=14045 (Incorrect support for opacity, fill-opacity and stroke-opacity)

        Based on an older patch from Rob, this fixes SVG text opacity as well as group opacity for solid fills & gradients.
        The pattern changes are still missing a testcase (need to wait for Antoine Quint for that).

        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        (WebCore::colorFromFloatComponents):
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::absoluteClippedOverflowRect):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
        (WebCore::finishRenderSVGContent):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::prepareTextRendering):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::paintChildInlineFlowBox):

2007-08-08  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas.

        http://bugs.webkit.org/show_bug.cgi?id=11909
        Regression: large SVG from Illustrator comes out blank

        Fix last issue with the Illustrator file by making relativeBBox
        calculation take into account viewBox.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::relativeBBox):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::relativeBBox):

2007-08-08  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=14896 (SVG InlineText/Flow box sizes don't take rotated glyphs into account)

        Introduce new helper function calculateGlyphBoundaries, which takes into account any per-character transformation.
        This fixes box size calculations in svg/W3C-SVG-1.1/text-text-07-t.svg, svg/batik/text/textEffect3.svg (rotated glyphs)
        -> These strings can be properly selected now, just as well as text path elements.

        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        (WebCore::SVGInlineTextBox::selectionRect):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):

2007-08-08  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13909 (SVG text selection doesn't work with RTL text)

        Use drawHighlightForText() to draw the selection, instead of my home-brewn solution.
        Affected code in SVGRootInlineBox::paintSelectionForTextBox. Removed not anymore needed
        helper function cummulatedWidthOfSelectionRange.

        Dump all contained InlineTextBox(es) in SVGRenderTreeAsText, take into account multiple
        child text boxes in ie. a RenderSVGInlineText objects (which happens for RTL text and
        LTR text cases where newlines were involved - see changed testcase results.)
        This affects a lot of LTR tests which actually had more than one child text box, that
        wasn't taken properly into account before (in terms of selection, not rendering.)

        Fix selection for RTL text by taking box start offsets into account in closestCharacterToPosition()
        and by offering RTL text selection special cases in svgCharacterHitsPosition().

        Centralized the creation of a TextStyle object for text selection/painting in a new helper function
        svgTextStyleForInlineTextBox. Add new helper functions calculateGlyphWidth/calculateGlyphHeight to
        centralize these calculations -> use these new helpers everywhere to avoid code duplication.

        A single fix in bidi.cpp was needed to fix SVG's unicode-bidi/direction handling, to fix text-intro-02-b.svg.
        SVG didacts that the 'direction' attribute is ignored if unicode-bidi is set to 'normal' (default).
        Discussed with Mitz.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForCoordinates):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphWidth):
        (WebCore::SVGInlineTextBox::calculateGlyphHeight):
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        (WebCore::SVGInlineTextBox::selectionRect):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):
        (WebCore::writeSVGInlineText):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange): Take box start offset into account.
        (WebCore::svgTextStyleForInlineTextBox): New helper function.
        (WebCore::totalAdvanceOfInlineTextBox): Take box start offset into account.
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox): Ditto. (correctly calculate advance values in RTL mode!)
        (WebCore::SVGRootInlineBox::paintSelectionForTextBox): Use GraphicsContext drawHighlightForText() instead of self-made hacks.
        (WebCore::SVGRootInlineBox::paintCharacterRangeForTextBox): Use new helper function svgTextStyleForInlineTextBox.
        * rendering/SVGRootInlineBox.h:
        * rendering/bidi.cpp: Add special case for SVG.
        (WebCore::RenderBlock::layoutInlineChildren):

2007-07-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver & Rob.

        Enable SVG textPath selection. Actually build chunks for them instead of
        ignoring them - was easier than I thought. Respect per-character transformation
        when calculating the chunk boundaries for the selection rectangles. Also fixes
        selection rect drawing of rotated characters.

        Next thing todo is to unify the glyph size calculations, as per-glyph transformations
        are not respected when calculating flow box sizes in SVGRootInlineBox.
 
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGHiddenContainer):
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::isChildOfHiddenContainer):
        (WebCore::RenderSVGInlineText::selectionRect):
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunk::SVGTextChunk):
        (WebCore::SVGTextChunkLayoutInfo::SVGTextChunkLayoutInfo):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRect):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::SVGRootInlineBox::buildTextChunks):

2007-07-25  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas.

        http://bugs.webkit.org/show_bug.cgi?id=14312
        Removing an attribute has no effect on SVG

        Update the transform matrix also when transform attribute is empty.

        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::updateLocalTransform):

2007-07-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Unify absoluteRects() of RenderSVGTSpan & RenderSVGTextPath.
        The RenderSVGTextPath one was still using the old, wrong concept.

        * rendering/RenderSVGTSpan.cpp: Remove unused params tx, ty, while I'm at it.
        (WebCore::RenderSVGTSpan::absoluteRects):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteRects):

2007-07-25  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Let <textPath> be recognized within the ObjC bindings.
        Forgot to add that months ago.

        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:

2007-07-25  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Fix all known bugs regarding to SVG text selection, when embedded in XHTML.
        Also fix inspecting <text> elements when embedded in XHTML. (WebInspector)

        Short story: selectionRect() & friends are special in terms of the "HTML parent translation".
        Caused by ie. CSS translation like "left: 50px; top: 50px" when <svg> is a child of a <div>.
        For non-textual objects like RenderPath, we can easily add a translation to a new coordinate
        space in RenderSVGRoot::applyContentTransformations() and we're done with it.

        Same for painting text, but text selection makes problems in this concept.
        We have to remove the 'html parent translation' from our selection rects that we return
        from RenderSVGText & RenderSVGInlineText. Hopefully all issues are fixed now.

        Long story:
        - RenderSVGRoot::nodeAtPoint didn't take the parent 'scroll offset' into account. We exited
          too early, because the overflow rect wasn't correctly sized. Fixed.
        - RenderSVGRoot::absoluteRects() can't return the absoluteClippedOverflowRect() as it includes
          the 'html parent translation', which needs to be removed, otherwhise the painted rects are off
          when inspecting with WebInspector. -> Pass down absoluteRects() call to it's children..
        - RenderSVGText::absoluteRects() can't use absoluteClippedOverflowRect() for the same reason.
        - Add RenderSVGInlineText::computeAbsoluteRectForRange() function - shared by absoluteRects() and
          selectionRect() - and remove the 'html parent translation' there by asking the RenderSVGRoot
          object for the correct offsets.

        This lead to nasty bugs showing that SVGInlineTextBox::selectionRect() wasn't actually returning
        correct rectangles. It couldn't work for text chunks the way it was implemented. Fixed by implementing
        it exactly the same way that closestCharacterToPosition() was done - could share more code later on.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteRects):
        (WebCore::RenderSVGInlineText::selectionRect):
        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::absoluteRects):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/SVGCharacterLayoutInfo.h: Removed unused variable 'bool selected'
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        (WebCore::SVGInlineTextBox::selectionRect):
        * rendering/SVGRootInlineBox.cpp: Add 'findSVGRootObject' helper function.
        (WebCore::findSVGRootObject):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::paintSelectionForTextBox): Remove unused tx/ty parameters.
        (WebCore::SVGRootInlineBox::paintChildInlineTextBox):
        (WebCore::SVGRootInlineBox::paintCharacterRangeForTextBox):
        * rendering/SVGRootInlineBox.h:

2007-07-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix. Not reviewed.

        Rob forgot to land the changes to SVGResourceMarker in his last commit.

        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):

2007-07-17  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas.

        http://bugs.webkit.org/show_bug.cgi?id=5996
        SVG <view> is unimplemented

        Implement <view> and refactor the code in the svg renderer container classes.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::zoomAndPanEnabled): Take into account currentView for zoom/pan
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createRenderer):
        (WebCore::SVGMarkerElement::notifyAttributeChange):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::currentView):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::createRenderer):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        (WebCore::SVGSVGElement::inheritViewAttributes):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseMappedAttribute):
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGViewSpec.cpp: Added.
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::~SVGViewSpec):
        (WebCore::SVGViewSpec::setTransform):
        (WebCore::SVGViewSpec::setViewBoxString):
        (WebCore::SVGViewSpec::setPreserveAspectRatioString):
        (WebCore::SVGViewSpec::setViewTargetString):
        (WebCore::SVGViewSpec::viewTarget):
        (WebCore::SVGViewSpec::contextElement):
        (WebCore::):
        (WebCore::SVGViewSpec::parseViewSpec):
        * ksvg2/svg/SVGViewSpec.h: Added.
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::viewTargetString):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseMappedAttribute):
        (WebCore::):
        (WebCore::SVGZoomAndPan::parseZoomAndPan):
        * ksvg2/svg/SVGZoomAndPan.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor):
        * page/Frame.cpp:
        (WebCore::Frame::setZoomFactor): do not zoom when it is disabled
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::viewportTransform):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::localTransform):
        * rendering/RenderSVGRoot.h:

2007-07-16  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13611 (Crash in setAttributeNS setting href of SVG <use> to nonexistent symbol)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=14631 (<use> doesn't deep-expand <symbol> elements.)

        Rework <use> on <foreignObject> cases, to not just ignore these cases, but actually proceed and skip <fO> objects
        from the resulting cloned tree. This fixes parts of "treasure_map.svg" (no bug report availabe on that one, private "testcase").

        Fix assertion happening with <use> on <g> containing <symbol>. Introduce expandSymbolElementsInShadowTree()
        concept, just like it's done for <use> on <use>, to deep-replace all <symbol> elements by <svg>, as demanded
        by the spec. This only worked on <use> on <symbol> direct cases so far.

        Added testcase: svg/custom/use-on-g-containing-foreignObject-and-image.svg (testcase for treasure_map.svg)
                        svg/custom/use-on-disallowed-foreign-object-5.svg (<use> on <symbol> containg <foreignObject>)
                        svg/custom/use-on-disallowed-foreign-object-6.svg (<use> on <g> containing <svg> containing <foreignObject>)
                        svg/custom/use-on-disallowed-foreign-object-7.svg (<use> on <g> containing <symbol> containing <foreignObject>)
                        svg/custom/use-scripting-changes-to-nonexistant-href.svg

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::isDisallowedElement):
        (WebCore::subtreeContainsDisallowedElement):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::removeDisallowedElementsFromSubtree):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * ksvg2/svg/SVGUseElement.h:

2007-07-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob.

        Fix invisible-text-after-scrolling.xhtml regression. Scroll offset not
        taken into account properly. Also fix RenderSVGInlineText::selectionRect(),
        so that SVG text can be selected, when being embedded in XHTML.

        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::selectionRect):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::applyContentTransforms):

2007-07-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5940 (<svg> inside <body> incorrectly extends over top/bottom borders)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=14145 (RenderSVGContainer should not inherit from RenderContainer)

        Make RenderSVGContainer inherit from RenderObject directly, instead of RenderContainer.
        Itdoes a lot of things that we don't need for SVG, and by removing this inheritance
        we can finally fix the differences about SVG object positioning, as we don't need
        parent translation (tx/ty). Fixes SVG text rendering within XHTML.

        Fix requireLayer() function on RenderSVGRoot, as it can actually be a layer now.
        This change is based on Rob's patch at 5940 - fixing z-order indexing.

        Change RenderSVGRoot renderName() and update all layout tests, because of this change.
        
        Fix absoluteRects() function for RenderSVGInlineText & RenderSVGTSpan.
        Checked extensively using WebInspector, to assure all rects are correctly displayed.

        Testcases fixed: junk-data.svg, missing-xlink.svg hixie/013.xml (all regressions!)
        (junk-data.svg & missing-xlink.svg previously relied on SVG text painting out of <svg> overflow rect.
         Fix these testcases, as within this new RenderSVGContainer concept, that bug is now fixed, and breaks them)

        Testcases added: custom/absolute-sized-svg-in-xhtml.xhtml, custom/inline-svg-in-xhtml.xml (Mozilla XTech demo)

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGRoot):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::addFocusRingRects):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::canHaveChildren):
        (WebCore::RenderSVGContainer::addChild):
        (WebCore::RenderSVGContainer::removeChild):
        (WebCore::RenderSVGContainer::destroy):
        (WebCore::RenderSVGContainer::destroyLeftoverChildren):
        (WebCore::RenderSVGContainer::removeChildNode):
        (WebCore::RenderSVGContainer::appendChildNode):
        (WebCore::RenderSVGContainer::insertChildNode):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::calcReplacedWidth):
        (WebCore::RenderSVGContainer::calcReplacedHeight):
        (WebCore::RenderSVGContainer::applyContentTransforms):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::absoluteTransform):
        (WebCore::RenderSVGContainer::nodeAtPoint):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::firstChild):
        (WebCore::RenderSVGContainer::lastChild):
        (WebCore::RenderSVGContainer::width):
        (WebCore::RenderSVGContainer::height):
        (WebCore::RenderSVGContainer::moveChildNode):
        (WebCore::RenderSVGContainer::calcPrefWidths):
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::RenderSVGHiddenContainer):
        (WebCore::RenderSVGHiddenContainer::paint):
        (WebCore::RenderSVGHiddenContainer::absoluteRects):
        (WebCore::RenderSVGHiddenContainer::relativeBBox):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteRects):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::addFocusRingRects):
        * rendering/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::isSVGRoot):
        (WebCore::RenderSVGRoot::renderName):
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        (WebCore::RenderSVGTSpan::absoluteRects):
        * rendering/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::absoluteRects):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.h:

2007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Remove all "SVGElement* m_context" parameters spread over SVG primitives
        (like SVGAngle, SVGPreserveAspectRatio, SVGTransformList, ...)

        This is all handled by the JS generation in the bindings now, leading
        to a faster static rendering codepaths, and easier handling of the dynamic
        parts like JS scripting. Remove the mystified genericContext() concept alltogether.

        * bindings/js/JSSVGMatrixCustom.cpp: Adapt to the context() change.
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::rotateFromVector):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * bindings/js/JSSVGPODTypeWrapper.h: Remove all nAC() calls here!
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::~JSSVGPODTypeWrapperCreatorForList):
        * bindings/js/JSSVGPathSegCustom.cpp: Adapt to the context() change.
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp: Ditto.
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp: Ditto.
        (WebCore::JSSVGPointList::clear):
        (WebCore::JSSVGPointList::initialize):
        (WebCore::JSSVGPointList::getItem):
        (WebCore::JSSVGPointList::insertItemBefore):
        (WebCore::JSSVGPointList::replaceItem):
        (WebCore::JSSVGPointList::removeItem):
        (WebCore::JSSVGPointList::appendItem): 
        * bindings/js/JSSVGTransformListCustom.cpp: Ditto.
        (WebCore::JSSVGTransformList::clear):
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * bindings/js/kjs_binding.h: Add new cacheSVGDOMObject, taking third parameter: context.
        (KJS::cacheSVGDOMObject):
        * bindings/scripts/CodeGeneratorJS.pm: Change generation to step aways from genericContext().
        * ksvg2/misc/SVGDocumentExtensions.h: Kill all genericContext() stuff.
        (WebCore::SVGDocumentExtensions::hasBaseValue):
        * ksvg2/svg/SVGAngle.cpp: Kill context parameter.
        (WebCore::SVGAngle::SVGAngle):
        * ksvg2/svg/SVGAngle.h: ditto.
        * ksvg2/svg/SVGFEImageElement.cpp: SVG classes don't get context params passed anymore.
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * ksvg2/svg/SVGFitToViewBox.cpp: Ditto.
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        * ksvg2/svg/SVGGradientElement.cpp: Ditto.
        (WebCore::SVGGradientElement::SVGGradientElement):
        * ksvg2/svg/SVGImageElement.cpp: Ditto.
        (WebCore::SVGImageElement::SVGImageElement):
        * ksvg2/svg/SVGMarkerElement.cpp: Ditto.
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        * ksvg2/svg/SVGPathElement.cpp: Ditto.
        (WebCore::SVGPathElement::pathSegList):
        * ksvg2/svg/SVGPathSegList.cpp: Kill context parameter.
        (WebCore::SVGPathSegList::SVGPathSegList):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPatternElement.cpp: SVG classes don't get context params passed anymore.
        (WebCore::SVGPatternElement::SVGPatternElement):
        * ksvg2/svg/SVGPointList.cpp: Kill context parameter.
        (SVGPointList::SVGPointList):
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.cpp: SVG classes don't get context params passed anymore.
        (WebCore::SVGPolyElement::points):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Kill context parameter.
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::setAlign):
        (WebCore::SVGPreserveAspectRatio::setMeetOrSlice):
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGSVGElement.cpp: SVG classes don't get cntext params passed anymore.
        (WebCore::SVGSVGElement::createSVGAngle):
        * ksvg2/svg/SVGStyledTransformableElement.cpp: Ditto.
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        * ksvg2/svg/SVGTextElement.cpp: Ditto.
        (WebCore::SVGTextElement::SVGTextElement):
        * ksvg2/svg/SVGTransformList.cpp: Kill context parameter.
        (SVGTransformList::SVGTransformList):
        * ksvg2/svg/SVGTransformList.h:

2007-07-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

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

        Recognize <textPath> in SVG JS bindings.
        Add JSSVGTextPathElement to JSSVGElementWrapperFactory.

        Add SVGException.idl just for the JS generation.
        Turn on all SVG JS constructors and add them to DOMWindow.idl.

        Testcase added: LayoutTests/svg/custom/js-svg-constructors.svg
    
        * DerivedSources.make: Add JSSVGException.h
        * WebCore.xcodeproj/project.pbxproj: Correct paths for DOM/JS*SVGTextPathElement
        * bindings/scripts/CodeGeneratorJS.pm: Forward port hash fix from trunk.
        * bindings/js/JSSVGElementWrapperFactory.cpp: Add JSSVGTextPathElement support
        * ksvg2/svg/SVGComponentTransferFunctionElement.idl:
        * ksvg2/svg/SVGTextPathElement.h:
        * ksvg2/svg/SVGException.h:
        * ksvg2/svg/SVGException.idl: Added.
        * ksvg2/svg/SVGFEBlendElement.idl:
        * ksvg2/svg/SVGFEColorMatrixElement.idl:
        * ksvg2/svg/SVGFECompositeElement.idl:
        * ksvg2/svg/SVGFEDisplacementMapElement.idl:
        * ksvg2/svg/SVGFETurbulenceElement.idl:
        * ksvg2/svg/SVGGradientElement.idl:
        * ksvg2/svg/SVGMarkerElement.idl:
        * ksvg2/svg/SVGTextContentElement.idl:
        * ksvg2/svg/SVGTextPathElement.idl:
        * page/DOMWindow.idl: Recognize new js svg constructors.

2007-06-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14241
        SVG <image> with height or width less than 1 fails to render image

        Keep extra member vars to get width/height as floats for accurate
        calculations.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::calcWidth):
        (WebCore::RenderSVGImage::calcHeight):
        * rendering/RenderSVGImage.h:

2007-06-26  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=9976
        Fix negative width issue in Hixie's test

        Refuse to render zero or negative width/height.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):

2007-06-26  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12062
        WebCore does not handle CSS-specified fill fallback correctly

        Implement fallback for fill and stroke.

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::SVGPaint):
        * ksvg2/svg/SVGPaint.h:
        * platform/graphics/svg/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::fillPaintServer):
        (WebCore::SVGPaintServer::strokePaintServer):

2007-06-20  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=14157
        Rotated shape has wrong gradient rendering

        Use the untransformed bbox in objectBoundingBoxMode. Also
        don't do objectBoundingBoxMode should the bbox width ort height
        be zero.

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):

2007-06-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric & Oliver.

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

        Reeanble <foreignObject>. Explicitely disallow <use> on <foreignObject>
        as it may lead to bad problems. 

        While I'm at it disallow <use> on any non-svg element.

        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGForeignObjectElement.idl:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        * ksvg2/svg/svgtags.in:
        * rendering/RenderForeignObject.cpp:

2007-06-19  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=14144
        All tx/ty (parentX/parentY) usage should be removed from SVG renders
        http://bugs.webkit.org/show_bug.cgi?id=13981
        <br> prevents click handler from firing

        Fix the hit testing issues by making RenderSVGRoot take its m_x, m_y
        into account in the absolute transform.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::absoluteRects):
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::nodeAtPoint):

2007-06-16  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=14015 (SVGTransformList::initialize() has no effect)

        Fix SVGTransformList usage in SVG DOM exposed to JS.
        This also fixes SVG space invaders including most repainting issues. (still some unrelated ones left)

        This is basically the _same_ fix applied to SVGPointList some months ago. We just forgot
        to add JSSVGTransformListCustom when switching from SVGTransform* -> SVGTransform (POD type).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGTransformListCustom.cpp: Added.
        (WebCore::JSSVGTransformList::clear):
        (WebCore::JSSVGTransformList::initialize):
        (WebCore::JSSVGTransformList::getItem):
        (WebCore::JSSVGTransformList::insertItemBefore):
        (WebCore::JSSVGTransformList::replaceItem):
        (WebCore::JSSVGTransformList::removeItem):
        (WebCore::JSSVGTransformList::appendItem):
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        (WebCore::SVGStyledTransformableElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::SVGTransformList):
        (SVGTransformList::context):
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformList.idl:

2007-06-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

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

        JSSVGMatrix was not working properly.
        "matrix.translate(10, 10)" actually altered 'matrix' instead of returning a
        new SVGMatrix object, as described in SVG 1.1 specification.

        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::translate):
        (WebCore::JSSVGMatrix::scale):
        (WebCore::JSSVGMatrix::scaleNonUniform):
        (WebCore::JSSVGMatrix::rotate):
        (WebCore::JSSVGMatrix::flipX):
        (WebCore::JSSVGMatrix::flipY):
        (WebCore::JSSVGMatrix::skewX):
        (WebCore::JSSVGMatrix::skewY):
        * ksvg2/svg/SVGMatrix.idl:

2007-06-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Fix the release build.

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::applyTextAnchorToTextChunk):

2007-06-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=14051
        <svg:image> fails to position correctly when <svg> is inside an inline <div>

        Leave parent translation to the containers.

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

2007-06-15  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

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

        Fix SVG space invaders. It actually highlighted a bad problem with our JSSVGPODTypeWrapper's.
        Introduce a new "2nd-level cache" for all readwrite POD properties. Subsequent calls to ie.
        myRect.x.baseVal.value don't create a new wrapper everytime, but are properly cached now.
        This leads to a massive reduction in created wrappers.

        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::JSSVGPODTypeWrapperCreatorReadWrite):
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::~JSSVGPODTypeWrapperCreatorReadWrite):
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::operator PODType):
        (WebCore::JSSVGPODTypeWrapperCreatorReadWrite::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::JSSVGPODTypeWrapperCreatorReadOnly):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::~JSSVGPODTypeWrapperCreatorReadOnly):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::operator PODType):
        (WebCore::JSSVGPODTypeWrapperCreatorReadOnly::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::JSSVGPODTypeWrapperCreatorForList):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::commitChange):
        (WebCore::PODTypeReadWriteHashInfo::PODTypeReadWriteHashInfo):
        (WebCore::PODTypeReadWriteHashInfo::operator==):
        (WebCore::PODTypeReadWriteHashInfoHash::hash):
        (WebCore::PODTypeReadWriteHashInfoHash::equal):
        (WebCore::PODTypeReadWriteHashInfoTraits::deletedValue):
        (WebCore::PODTypeReadWriteHashInfoTraits::emptyValue):
        (WebCore::JSSVGPODTypeWrapperCache::readWriteHashMap):
        (WebCore::JSSVGPODTypeWrapperCache::lookupOrCreateWrapper):
        (WebCore::JSSVGPODTypeWrapperCache::forgetWrapper):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::JSSVGPointList::removeItem):
        * bindings/scripts/CodeGeneratorJS.pm:

2007-06-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Text gradients are broken on feature branch
        http://bugs.webkit.org/show_bug.cgi?id=14142

        * rendering/SVGRenderSupport.cpp:
        (WebCore::prepareToRenderSVGContent):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::prepareTextRendering):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::paintInlineBoxes):
        (WebCore::SVGRootInlineBox::paintChildInlineTextBox):
        (WebCore::SVGRootInlineBox::paintChildInlineFlowBox):
        * rendering/SVGRootInlineBox.h:

2007-06-14  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

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

        Implement pixelUnitToMillimeterX(), pixelUnitToMillimeterY() in SVGSVGElement.
        Use cssPixelsPerInch, just like done in CSSPrimitiveValue & SVGLength.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::pixelUnitToMillimeterX):
        (WebCore::SVGSVGElement::pixelUnitToMillimeterY):

2007-06-14  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=9752
        %-sizing of elements with a html parent is broken

        Calculate width/height for length percentages when embedded in xhtml.

        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):

2007-06-14  Rob Buis  <buis@kde.org>

        Build fix.

        * rendering/SVGCharacterLayoutInfo.cpp:

2007-06-14  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12207
        RenderSVGContainer should be split into multiple classes
        http://bugs.webkit.org/show_bug.cgi?id=14125
        KCanvasRenderingStyle should be removed

        Introduce the RenderSVGRoot class and kill the KCanvas enums.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::cssPrimitiveToLength):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp: Removed.
        * ksvg2/misc/KCanvasRenderingStyle.h: Removed.
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createRenderer):
        (WebCore::SVGMarkerElement::notifyAttributeChange):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.h:
        * platform/graphics/svg/SVGPaintServer.cpp:
        (WebCore::sharedSolidPaintServer):
        (WebCore::SVGPaintServer::fillPaintServer):
        (WebCore::SVGPaintServer::strokePaintServer):
        (WebCore::dashArrayFromRenderingStyle):
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        * platform/graphics/svg/cg/RenderPathCg.cpp:
        (WebCore::RenderPath::strokeContains):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        (WebCore::fillAndStrokePath):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::requiresLayer):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::applyContentTransforms):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::setAlign):
        (WebCore::RenderSVGContainer::align):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::absoluteTransform):
        (WebCore::RenderSVGContainer::getAspectRatio):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGInlineText.cpp:
        * rendering/RenderSVGRoot.cpp: Added.
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::~RenderSVGRoot):
        (WebCore::RenderSVGRoot::localTransform):
        (WebCore::RenderSVGRoot::setLocalTransform):
        (WebCore::RenderSVGRoot::requiresLayer):
        (WebCore::RenderSVGRoot::lineHeight):
        (WebCore::RenderSVGRoot::baselinePosition):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::applyContentTransforms):
        (WebCore::RenderSVGRoot::paint):
        (WebCore::RenderSVGRoot::viewport):
        (WebCore::RenderSVGRoot::calcViewport):
        (WebCore::RenderSVGRoot::setViewBox):
        (WebCore::RenderSVGRoot::viewBox):
        (WebCore::RenderSVGRoot::setAlign):
        (WebCore::RenderSVGRoot::align):
        (WebCore::RenderSVGRoot::viewportTransform):
        (WebCore::RenderSVGRoot::absoluteClippedOverflowRect):
        (WebCore::RenderSVGRoot::addFocusRingRects):
        (WebCore::RenderSVGRoot::absoluteRects):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::fillContains):
        (WebCore::RenderSVGRoot::strokeContains):
        (WebCore::RenderSVGRoot::relativeBBox):
        (WebCore::RenderSVGRoot::setSlice):
        (WebCore::RenderSVGRoot::slice):
        (WebCore::RenderSVGRoot::getAspectRatio):
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGRoot.h: Added.
        (WebCore::RenderSVGRoot::isSVGContainer):
        (WebCore::RenderSVGRoot::renderName):
        * rendering/RenderSVGTSpan.cpp:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeStyle):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::paintInlineBoxes):

2007-06-12  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fix regression: SVG images drawn in the wrong paint phase.

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

2007-06-11  Rob Buis  <buis@kde.org>

        Reviewed by weinig.

        http://bugs.webkit.org/show_bug.cgi?id=14064
        fill property is reported as type SVGColor

        Do the checks in the right order.

        * bindings/js/kjs_css.cpp:
        (KJS::toJS):

2007-06-07  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12122
        SVGPathElement should not inherit from SVGPathParser

        Use path builders for building Path and PathSegLists.

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::pointsListFromSVGData):
        (WebCore::SVGPathParser::~SVGPathParser):
        (WebCore::SVGPathParser::svgLineToHorizontal):
        (WebCore::SVGPathParser::svgLineToVertical):
        (WebCore::SVGPathParser::svgCurveToCubicSmooth):
        (WebCore::SVGPathParser::svgCurveToQuadratic):
        (WebCore::SVGPathParser::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathParser::svgArcTo):
        (WebCore::PathBuilder::build):
        (WebCore::PathBuilder::svgMoveTo):
        (WebCore::PathBuilder::svgLineTo):
        (WebCore::PathBuilder::svgCurveToCubic):
        (WebCore::PathBuilder::svgClosePath):
        (WebCore::pathFromSVGData):
        (WebCore::SVGPathSegListBuilder::build):
        (WebCore::SVGPathSegListBuilder::svgMoveTo):
        (WebCore::SVGPathSegListBuilder::svgLineTo):
        (WebCore::SVGPathSegListBuilder::svgLineToHorizontal):
        (WebCore::SVGPathSegListBuilder::svgLineToVertical):
        (WebCore::SVGPathSegListBuilder::svgCurveToCubic):
        (WebCore::SVGPathSegListBuilder::svgCurveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::svgCurveToQuadratic):
        (WebCore::SVGPathSegListBuilder::svgCurveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::svgArcTo):
        (WebCore::SVGPathSegListBuilder::svgClosePath):
        (WebCore::pathSegListFromSVGData):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::parseMappedAttribute):
        * ksvg2/svg/SVGPolyElement.h:

2007-06-06  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Add support for tabbing between links in an SVG file
        Also add support for drawing a focus ring around focused svg content.
        http://bugs.webkit.org/show_bug.cgi?id=8823
        
        Layout test is blocked by http://bugs.webkit.org/show_bug.cgi?id=14027

        * css/svg.css:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        (WebCore::SVGAElement::supportsFocus):
        (WebCore::SVGAElement::isFocusable):
        (WebCore::SVGAElement::isMouseFocusable):
        (WebCore::SVGAElement::isKeyboardFocusable):
        * ksvg2/svg/SVGAElement.h:

2007-06-06  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Make SVG (mostly) support CSS outline property (and thus focus rings)
        http://bugs.webkit.org/show_bug.cgi?id=10849

        Test: svg/custom/focus-ring.svg

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::addFocusRingRects):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::addFocusRingRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::addFocusRingRects):
        * rendering/RenderSVGImage.h:

2007-06-06  Eric Seidel  <eric@webkit.org>

        Reviewed by weinig.
        
        Break out common SVG rendering logic into prepareToRenderSVGContent in SVGRenderSupport

        No test cases should be changed by this.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::fillAndStrokePath):
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::requiresLayer):
        (WebCore::RenderSVGContainer::isOutermostSVG):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::applyContentTransforms):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::absoluteTransform):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::translationForAttributes):
        * rendering/SVGRenderSupport.cpp: Added.
        (WebCore::prepareToRenderSVGContent):
        * rendering/SVGRenderSupport.h: Added.
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::prepareTextRendering):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::paintInlineBoxes):

2007-06-06  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=13976
        getPresentationAttribute not implemented

        Implement getPresentationAttribute.

        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStylable.idl:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):
        * ksvg2/svg/SVGStyledElement.h:

2007-06-06  Rob Buis  <buis@kde.org>

        Reviewed by olliej and eric.

        http://bugs.webkit.org/show_bug.cgi?id=12430
        SVG has two transform parsers when it should have one.

        Refactor SVGTransformable parser so SVGAnimateTransformElement can reuse it better.

        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::):
        (WebCore::SVGTransformable::parseTransformValue):
        (WebCore::SVGTransformable::parseTransformAttribute):
        * ksvg2/svg/SVGTransformable.h:

2007-06-05  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Commit files missing from previous commit, oops!
        
        * platform/graphics/svg/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::SVGResourceMasker):
        (WebCore::SVGResourceMasker::invalidate):
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

2007-06-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Add support for maskUnits and maskContentUnits
        http://bugs.webkit.org/show_bug.cgi?id=12568
        
        This is covered by the W3C tests (including mask-intro01)

        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        (WebCore::SVGMaskElement::canvasResource):
        (WebCore::SVGMaskElement::notifyAttributeChange):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMaskElement.idl:
        * platform/graphics/svg/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::SVGResourceMasker):
        (WebCore::SVGResourceMasker::invalidate):
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask):

2007-06-01  Eric Seidel  <eric@webkit.org>

        Reviewed by lars.
        
        Cursor does not change to hand over links containing <use>
        http://bugs.webkit.org/show_bug.cgi?id=12630

        Test: manual-tests/svg-link-hover-use.svg

        * manual-tests/svg-link-hover-use.svg: Added.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest): use eventParentNode instead of parentNode

2007-06-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        SVG is not correctly respecting scroll during hit testing
        http://bugs.webkit.org/show_bug.cgi?id=13083

        Test: svg/custom/scroll-hit-test.svg

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtPoint):

2007-06-01  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=12187

        Tests: fast/dom/attribute-case-sensitivity.html, fast/dom/attribute-case-sensitivity2.xhtml

        * dom/Element.cpp:
        (WebCore::shouldIgnoreAttributeCase): check to make sure element is an HTMLElement
        (WebCore::Element::getAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::hasAttribute):
        * dom/NamedAttrMap.cpp:
        (WebCore::shouldIgnoreAttributeCase):
        (WebCore::NamedAttrMap::getNamedItem):
        (WebCore::NamedAttrMap::removeNamedItem):

2007-05-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Links are activated based on mouse down events instead of click events
        http://bugs.webkit.org/show_bug.cgi?id=12570
        
        Test: svg/custom/prevent-default.svg

        * html/HTMLAnchorElement.cpp: use MiddleButton and RightButton instead of 1 and 2
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): make it function more like the HTML side

2007-05-30  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11272
        Implement currentScale(), setCurrentScale() and currentTranslate() in SVGSVGElement

        Allow zooming and panning, thereby implementing the above methods.

        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::zoomAndPanEnabled):
        (WebCore::SVGDocument::startPan):
        (WebCore::SVGDocument::updatePan):
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::setCurrentTranslate):
        * ksvg2/svg/SVGSVGElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::setZoomFactor):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::absoluteTransform):

2007-05-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix regression: gradient on fill of text works again!

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::teardown):

2007-05-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix "jumpy" selection by correcting the way svgCharacterHitsPosition works.
        I basically mixed up the "closest character to position" logic.

        * rendering/RenderSVGInlineText.cpp: Only call svgCharacterHitsPosition for the firstTextBox -> it handles all children anyway.
        (WebCore::RenderSVGInlineText::positionForCoordinates):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::closestCharacterToPosition): Fix logic - was really broken!
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):
        (WebCore::SVGInlineTextBox::nodeAtPoint): Do not use svgCharacterHitsPosition here - too accurate!
                                                  We don't want to loose the 'text' cursor if one is just between two characters.

2007-05-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Add new code path dumping SVG text engine specific layout test results.
        Finally the dumped results are actually accurate and respond to the
        rendered glyphs. This has never been correct so far.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables):
        (WebCore::write):
        * rendering/RenderTreeAsText.h:
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::containsInlineTextBox):
        (WebCore::writeSVGInlineText):
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::topLeftPositionOfCharacterRange):
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::cummulatedHeightOfInlineBoxCharacterRange):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        * rendering/SVGRootInlineBox.h:

2007-05-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12698 (SVG text needs a special per-character layout mode.)

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6420 (<text> does not respect x,y offset lists)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6425 (<textPath> element not implemented)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6481 (text-anchor (vertical) does not work in SVG text elements)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11941 (REGRESSION: Missing text stroke in svg/W3C-SVG-1.1/text-deco-01-b.svg)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12376 (glyph rotation in text/tspan not implemented)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12377 (multiple dx and dy attributes not respected in text and tspan elements)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12574 (<text> does not handle baseline-shift correctly)

        Introduce new experimental SVG text engine - after 5+ months of hacking.

        Add textPath support, absolute positioned SVG characters, vertical text,
        text rotation, baseline-shift, text chunks spanning <tspan>'s etc.

        Check my Flickr page for screenshots: http://www.flickr.com/photos/43532360@N00 (a bit outdated)

        Fixes/Improvments:
        - animate-elem-40-t.svg (x/y lists respected on <text> now)
        - interact-cursor-01-f.svg (text-anchor correctly handled in <text><a> situations)
        - struct-frag-05-t.svg (ditto)
        - text-align-02-b.svg (baseline-shift recognized)
        - text-align-04-b.svg (textPath displayed)
        - text-align-05-b.svg (text-anchor & vertical text handled correctly)
        - text-align-06-b.svg (baseline-shift & vertical text handled correctly)
        - text-deco-01-b.svg (longstanding regression fixed for text-decoration)
        - text-path-01-b.svg (all textPaths are displayed correctly)
        - text-text-04-t.svg (all x/y/dx/dy list situations work fine now)
        - text-text-05-t.svg (ditto)
        - text-text-06-t.svg (ditto)
        - text-text-07-t.svg (rotation works fine now)
        - text-tspan-01-b.svg (per character placment works great in all situations)

        Most files using text-anchor show 0.5-1% differences because the shift offset calculation is more correct now.

        Regressions:    
        - Gradient on fill is broken (on stroke works) -> this is a regression (easy to fix soon)
          js-late-gradient-and-object-creation.svg & js-late-gradient-creation.svg & pservers-grad-08-b.svg & pservers-grad-11-b.svg are broken

        Complete list of missing things:
        - 'textLength' / 'lengthAdjust' properties on <text>/<tspan> not yet handled.
        - 'dominant-baseline / alignment-baseline missing (neither FF/Opera/Batik support this)
        - 'kerning' property ignored
        - 'glyph-orientation-vertical' / 'glyph-orientation-horizontal' not yet handled.
        - Hebrew text selection broken (discontinous selection doesn't work)
        - <textPath> doesn't yet participate in text selection
        - <textPath> 'text-anchor' handling is flawed
        - <textPath> doesn't yet handle 'method' / 'spacing' properties
        - 'letter-spacing' / 'word-spacing' is still handled in the "legacy" mode. That means it only works
          for simple cases -> won't work for textPath's for instance
        - SVG fonts (<altGlyph>, <font> ..... tons more)

        * DerivedSources.make: Add DOM/JSSVGTextPathElement.h to build
        * WebCore.xcodeproj/project.pbxproj: Add textPath related files to build
        * css/svg.css: Correct white-space default setting for textPath element
        * ksvg2/svg/SVGFEFloodElement.cpp: Missing include (experimental build was broken)
        * ksvg2/svg/SVGTSpanElement.cpp: Recognize textPath children.
        (WebCore::SVGTSpanElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGTextElement.cpp: Ditto.
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGTextPathElement.cpp: Added.
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        (WebCore::SVGTextPathElement::~SVGTextPathElement):
        (WebCore::SVGTextPathElement::parseMappedAttribute):
        (WebCore::SVGTextPathElement::createRenderer):
        (WebCore::SVGTextPathElement::childShouldCreateRenderer):
        (WebCore::SVGTextPathElement::insertedIntoDocument):
        (WebCore::SVGTextPathElement::buildPendingResource):
        (WebCore::SVGTextPathElement::attach):
        * ksvg2/svg/SVGTextPathElement.h: Added.
        (WebCore::):
        (WebCore::SVGTextPathElement::rendererIsNeeded):
        (WebCore::SVGTextPathElement::contextElement):
        * ksvg2/svg/SVGTextPathElement.idl: Added.
        * ksvg2/svg/svgtags.in: Add textPath tag.
        * rendering/InlineTextBox.cpp: Make two methods non static to share with SVG.
        (WebCore::correctedTextColor):
        (WebCore::updateGraphicsContext):
        * rendering/InlineTextBox.h:
        * rendering/RenderSVGInlineText.cpp: Special positionForCoordinates() implementation. Stub caretRect() for SVG.
        (WebCore::RenderSVGInlineText::selectionRect):
        (WebCore::RenderSVGInlineText::caretRect):
        (WebCore::RenderSVGInlineText::positionForCoordinates):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTextPath.cpp: Added.
        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
        (WebCore::RenderSVGTextPath::layoutPath):
        (WebCore::RenderSVGTextPath::setLayoutPath):
        (WebCore::RenderSVGTextPath::startOffset):
        (WebCore::RenderSVGTextPath::setStartOffset):
        (WebCore::RenderSVGTextPath::exactAlignment):
        (WebCore::RenderSVGTextPath::setExactAlignment):
        (WebCore::RenderSVGTextPath::stretchMethod):
        (WebCore::RenderSVGTextPath::setStretchMethod):
        (WebCore::RenderSVGTextPath::absoluteRects):
        * rendering/RenderSVGTextPath.h: Added.
        (WebCore::RenderSVGTextPath::renderName):
        * rendering/RenderText.cpp: Fix indention and use StringImpl::empty() instead of creating an empty string manually.
        (WebCore::RenderText::setTextInternal):
        * rendering/RootInlineBox.h: Add virtual no-op computePerCharacterLayoutInformation().
        (WebCore::RootInlineBox::computePerCharacterLayoutInformation):
        * rendering/SVGCharacterLayoutInfo.cpp: Added.
        (WebCore::calculateBaselineShift):
        (WebCore::SVGCharacterLayoutInfo::SVGCharacterLayoutInfo):
        (WebCore::SVGCharacterLayoutInfo::xValueAvailable):
        (WebCore::SVGCharacterLayoutInfo::yValueAvailable):
        (WebCore::SVGCharacterLayoutInfo::dxValueAvailable):
        (WebCore::SVGCharacterLayoutInfo::dyValueAvailable):
        (WebCore::SVGCharacterLayoutInfo::angleValueAvailable):
        (WebCore::SVGCharacterLayoutInfo::baselineShiftValueAvailable):
        (WebCore::SVGCharacterLayoutInfo::xValueNext):
        (WebCore::SVGCharacterLayoutInfo::yValueNext):
        (WebCore::SVGCharacterLayoutInfo::dxValueNext):
        (WebCore::SVGCharacterLayoutInfo::dyValueNext):
        (WebCore::SVGCharacterLayoutInfo::angleValueNext):
        (WebCore::SVGCharacterLayoutInfo::baselineShiftValueNext):
        (WebCore::SVGCharacterLayoutInfo::processedSingleCharacter):
        (WebCore::SVGCharacterLayoutInfo::processedChunk):
        (WebCore::SVGCharacterLayoutInfo::nextPathLayoutPointAndAngle):
        (WebCore::SVGCharacterLayoutInfo::inPathLayout):
        (WebCore::SVGCharacterLayoutInfo::setInPathLayout):
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        (WebCore::SVGCharacterLayoutInfo::addStackContent):
        (WebCore::SVGCharacterLayoutInfo::xStackWalk):
        (WebCore::SVGCharacterLayoutInfo::yStackWalk):
        (WebCore::SVGCharacterLayoutInfo::dxStackWalk):
        (WebCore::SVGCharacterLayoutInfo::dyStackWalk):
        (WebCore::SVGCharacterLayoutInfo::angleStackWalk):
        (WebCore::SVGCharacterLayoutInfo::baselineShiftStackWalk):
        * rendering/SVGCharacterLayoutInfo.h: Added.
        (WebCore::PositionedVector::Type):
        (WebCore::PositionedVector::position):
        (WebCore::PositionedVector::advance):
        (WebCore::PositionedVector::valueAtCurrentPosition):
        (WebCore::SVGCharacterLayoutInfo::):
        (WebCore::SVGInlineBoxCharacterRange::SVGInlineBoxCharacterRange):
        (WebCore::SVGInlineBoxCharacterRange::isOpen):
        (WebCore::SVGInlineBoxCharacterRange::isClosed):
        (WebCore::SVGTextChunk::SVGTextChunk):
        (WebCore::SVGTextChunkLayoutInfo::SVGTextChunkLayoutInfo):
        * rendering/SVGInlineFlowBox.cpp: Make all methods no-ops when using the new text engine.
        (WebCore::SVGInlineFlowBox::paint):
        (WebCore::SVGInlineFlowBox::placeBoxesHorizontally):
        (WebCore::SVGInlineFlowBox::verticallyAlignBoxes):
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGInlineTextBox.cpp: Add new text selection / character hit detection related code.
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        (WebCore::SVGInlineTextBox::selectionTop):
        (WebCore::SVGInlineTextBox::svgRootInlineBox):
        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):
        (WebCore::SVGInlineTextBox::offsetForPosition):
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        (WebCore::SVGInlineTextBox::selectionRect):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRootInlineBox.cpp: The heart of the new text engine lives here.
        (WebCore::prepareTextRendering):
        (WebCore::isVerticalWritingMode):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::placeBoxesHorizontally):
        (WebCore::SVGRootInlineBox::verticallyAlignBoxes):
        (WebCore::SVGRootInlineBox::cummulatedWidthOfSelectionRange):
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::cummulatedWidthOfTextChunk):
        (WebCore::cummulatedHeightOfTextChunk):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::totalAdvanceOfInlineTextBox):
        (WebCore::totalAdvanceOfInlineBox):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
        (WebCore::SVGRootInlineBox::buildTextChunks):
        (WebCore::SVGRootInlineBox::svgTextChunks):
        (WebCore::SVGRootInlineBox::layoutTextChunks):
        (WebCore::SVGRootInlineBox::paintSelectionForTextBox):
        (WebCore::SVGRootInlineBox::paintInlineBoxes):
        (WebCore::SVGRootInlineBox::paintCharacterRangeForTextBox):
        * rendering/SVGRootInlineBox.h:
        * rendering/bidi.cpp: Call the new computePerCharacterLayoutInformation() method.
        (WebCore::RenderBlock::layoutInlineChildren):

2007-05-10  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        http://bugs.webkit.org/show_bug.cgi?id=11931
        PathCG fails to hit on unclosed sub-paths

        Test: svg/custom/hit-test-unclosed-subpaths.svg

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::copyClosingSubpathsApplierFunction):
        (WebCore::copyCGPathClosingSubpaths):
        (WebCore::Path::contains): use new copy & close function

=== End merge of feature-branch 2007-10-12 ===

2007-10-11  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        Handle a race condition that could arise if a plugin was loaded while it
        was scheduled to be freed: check whether the timer that schedules
        library frees is active in PluginPackageWin::load().

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::freeLibrarySoon): Added assertions
        (WebCore::PluginPackageWin::freeLibraryTimerFired): Added assertion
        (WebCore::PluginPackageWin::load): If we are scheduled to free this
        library, cancel the timer, and don't call LoadLibrary

2007-10-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5483567> REGRESSION (Tiger only): Pasting words copied from TextEdit in Mail adds extra newline
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds): Added.
        We would like to insert the fragment as-is if possible, but AppKit on Tiger
        creates fragments from RTF data that have carriage returns and spaces at the
        beginning and end, and those need to be removed since they'll interfere with 
        paragraph merging.
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

2007-10-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/5521237> Pasting a word copied from TextEdit after a regular, breaking space, adds a leading newline
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        Fixed a typo.

2007-10-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://5530519> REGRESSION (303-310A18): Crash when closing tab with
        pdf file (Reader 7 only)

        Reader 7 subclasses its parent window, so posting a WM_DESTROY to this
        window puts us in plugin code. When the plugin forwards the message
        back to the original window proc, and we free the plugin library from
        there, we will jump back to code we just freed when we return, so delay 
        calling FreeLibrary at least until the next message loop

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::freeLibrarySoon): Start a timer to free the
        plugin library
        (WebCore::PluginPackageWin::freeLibraryTimerFired): Free the library
        (WebCore::PluginPackageWin::PluginPackageWin): Initialize the timer that
        will free this library
        (WebCore::PluginPackageWin::unloadWithoutShutdown): Call
        freeLibrarySoon()
        * plugins/win/PluginPackageWin.h: Added m_freeLibraryTimer

2007-10-11  Ada Chan  <adachan@apple.com>

        <rdar://problem/5534421> 
        Switched to using wkGetDefaultHTTPCookieStorage() and removed some cookie-related
        methods we no longer need in ResourceHandle.
        
        <rdar://problem/5244261> "Never" cookie policy was ignored on windows
        Need to set the cookie accept policy on each CFURLRequest.
        
        Reviewed by Oliver.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):

2007-10-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Fix for <rdar://problem/5488678>.  Disable debugging symbols in production builds for 10.4
        PowerPC to prevent a huge STABS section from being generated.

        * Configurations/Base.xcconfig:

2007-10-11  Lars Knoll  <lars@trolltech.com>

        Reviewed by Erik Seidel and Simon.

        Ensure that setting innerHTML on an element doesn't do
        weird things with the document.
        Fixes most issues with http://bugs.webkit.org/show_bug.cgi?id=15456

        Test: fast/innerHTML/innerHTML-changing-document-properties.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::startDocument):
        (WebCore::XMLTokenizer::end):
        (WebCore::):

2007-10-10  George Staikos  <staikos@kde.org>

        Reviewed by Adam Roben.

        Fix Qt build on Win32 with VS2005.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine):

2007-10-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        Fixed <rdar://5464402> Crash when running fast/frames/onload-remove-iframe-crash.html in DRT
        createFrame() now returns a RefPtr instead of a raw Frame pointer. 
        Making this change improves the way we handle frames on Windows webkit. 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        * loader/FrameLoaderClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::createFrame):

2007-10-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix compilation using gcc 4.3. Header files have been reorganized and as a result some extra
        includes are needed for INT_MAX, std::auto_ptr and the like.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * bridge/AXObjectCache.h:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * platform/Base64.cpp:
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGResourceMasker.h:

2007-10-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Fix for <rdar://problem/5519698> CrashTracer: [USER] 47 crashes in Safari at com.apple.WebCore: WebCore::XMLTokenizer::lineNumber const + 9

        Test: fast/innerHTML/innerHTML-script-tag-crash.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::lineNumber): Return 1 when there is no context.
        (WebCore::XMLTokenizer::columnNumber): ditto.

2007-10-08  Adam Roben  <aroben@apple.com>

        Fix Bug 15305: Crash when dragging an image when "load images automatically" preference is off

        http://bugs.webkit.org/show_bug.cgi?id=15305
        <rdar://problem/5524774>

        Reviewed by Eric Seidel.

        No test possible: to reproduce this you have to change a WebKit
        preference and reload the page. See
        http://bugs.webkit.org/show_bug.cgi?id=15414

        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor): ASSERT that we have an
        image and that it has a SharedBuffer.
        (WebCore::writeImageToDataObject): The fix: null-check imageBuffer.

2007-10-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        New fix for <rdar://problem/5522487> REGRESSION: With JavaScript 
        disabled, any page load causes a crash in PropertyMap::put
        
        Explicitly remove the "document" property from the window. The old 
        solution would leave a stale "document" property around after JavaScript
        was re-enabled.

        The architecture for disabling JavaScript could use some consolidation. 
        It seems wrong that a script proxy even exists when JavaScript is 
        disabled. It also seems wrong that so many individual call sites are 
        responsible for checking whether JavaScript is enabled. I've filed a 
        bug about this: http://bugs.webkit.org/show_bug.cgi?id=15385.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::clearDocumentWrapper):
        * bindings/js/kjs_proxy.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):

2007-10-05  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        <rdar://5520913> Ticketmaster.com doesn't display correctly (Flash
        related?)

        The plugin is requesting files that don't exist on the server, and
        we are passing the 404 error page to the plugin. This change cancels the
        stream if the response code indicates a failure.

        This is a port of the safari / mac code.

        * loader/win/NetscapePlugInStreamLoaderWin.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse): If the
        response code indicates a failure, cancel the stream

2007-10-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed <rdar://problem/5522487> REGRESSION: With JavaScript disabled, 
        any page load causes a crash in PropertyMap::put
        
        The problem was that we were using JavaScript when JavaScript was
        disabled. The architecture for disabling JavaScript could use some
        consolidation, but this is the simplest, safest change for now.
        
        Currently passing layout tests still pass.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::updateDocumentWrapper):

2007-10-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by John Sullivan.

        Fix for <rdar://problem/5441823> REGRESSION (r25142, Tiger only): 
        Vertical scroll bar not redrawn properly when going back in history 
        (15033)

        This fix if-defs r25142 to be Leopard-only since it causes 
        correctness issues on Tiger and does not seem to have any 
        performance impact on Tiger either.

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

2007-10-05  Ada Chan  <adachan@apple.com>

        <rdar://problem/5436617> Favicons sometimes don't show up even when they are
        in the database
        - A client can try to retain an icon for a page before the database is actually
        opened.  Since isOpened() is not a requirement to retain an icon, remove the check
        for that.  Instead, we'll check to make sure whether this database is enabled
        before proceeding.

        Reviewed by Brady.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL): only check isOpen() before we
        schedule for a sync.

2007-10-05  Lars Knoll  <lars@trolltech.com>

        Reviewed by olliej.

        fix a hang in editing/selection/extend-by-word-002.html

        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::CharBreakIteratorQt::next):
        (WebCore::characterBreakIterator):

2007-10-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Switch to default level of debugging symbols to resolve <rdar://problem/5488678>.
        The "full" level appears to offer no observable benefits even though the documentation
        suggests it be used for dead code stripping.  This should also decrease link times.

        * Configurations/Base.xcconfig:

2007-10-04  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for <rdar://problem/5369017> REGRESSION: Can't tab to webview that doesn't have editable content

        * page/FocusController.h: Added FocusDirection argument.
        * page/FocusController.cpp: (WebCore::FocusController::setInitialFocus):
          Use FocusDirection argument instead of key modifiers to send direction to advanceFocus.
        * WebCore.exp: Updated symbol.

2007-10-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by John.
        
        <rdar://problems/5516309>
        
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints): Avoid the expense of updating tints on controls for the
        empty-window case since this can take a significant amount of time even on windows that have no
        content at all. Note this fix specifically optimizes the empty window/tab case; for a more broad
        fix John wrote up rdar://problem/5521050.

2007-10-04  Darin Adler  <darin@apple.com>

        * page/Frame.h: Put functions into categories to indicate other classes
        we'd like to move them into in the future. Just organizational -- no code
        change.

2007-10-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by maciej.

        fix a crash in the FrameLoader that can happen under certain
        conditions in the Qt port.

        Test: fast/loader/iframe-crash-on-missing-image.xhtml

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

2007-10-03  Alp Toker  <alp@atoker.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14726
        [gtk] API design. Mapping the WebView delegates to signals.

        Change the API namespace of the Gtk+ port from 'WebKitGtk' to 'WebKit'.

        * WebCore.pro:

2007-10-03  Alp Toker  <alp@atoker.com>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=14129
        [CAIRO] Support the canvas element

        Add a new canvas implementation using Cairo for rendering.

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        (WebCore::CanvasGradient::~CanvasGradient):
        (WebCore::CanvasGradient::addColorStop):
        (WebCore::CanvasGradient::platformShading):
        * html/CanvasGradient.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createDrawingContext):
        (WebCore::HTMLCanvasElement::createPlatformImage):
        * html/HTMLCanvasElement.h:

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Signed off by olliej.

        move WebKitQt to WebKit/qt for consistency with the other ports.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * WebCore.pro:

2007-10-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver and Adam.

        Patch for <rdar://problem/5506968> Fail to DnD local file with non-ascii character in path from desktop to Safari (can open it with file menu)

        Use CoreFoundation to do the conversion from path to URL, as the Windows API was not
        correctly converting to UTF-8 and we know CFURL will.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::urlFromPath):
        (WebCore::getURL):

2007-10-02  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5511842> REGRESSION: Webkit stops responding while loading Apple Store Canada page (15304)
        
        Included the NSSynchronousURLConnection_PrivateMode mode, in addition to the default run loop modes
        as an acceptable mode when using performSelectorOnMainThread with our syncronous url callbacks.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):
        Added NSSynchronousURLConnection_PrivateMode to the list of accepted modes.

2007-10-02  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - add support for GDI objects to OwnPtr; I plan to use this
          to fix some GDI handle leaks

        * css/CSSGrammar.y: Change parser to avoid macro that conflicts
        with macro defined in Windows system headers: FLOAT. This is needed
        because OwnPtr.h will now include <windows.h>.
        * css/CSSParser.cpp: (WebCore::CSSParser::lex): Ditto.
        * css/tokenizer.flex: Ditto.

        * platform/win/CursorWin.cpp: (WebCore::Cursor::Cursor):
        Use OwnPtr for a few HBITMAP objects as a test case.

        * platform/win/COMPtr.h: (COMPtr::COMPtr): Fix so that we can use
        Query with other COMPtr. Before this would not compile if it was
        ever instantiated.

2007-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Ada.

        Fix leak of GDI handle when we call MLANG.

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by Olliej.

        The cookies() method should only return the value of the
        cookie, not additional info such as the expiration date.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookies):

2007-10-01  Lars Knoll  <lars@trolltech.com>

        Reviewed by Eric.

        Fix a wrong extension mapping in the MIMETypeRegistry and identify about: url's as frames in the FrameLoaderClient.

        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::):

2007-10-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5516183> REGRESSION: Creating a ToDo on an incoming message fails
        
        Rolling out r25721.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

2007-10-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5515426> NetNewsWire 3 crashes at launch in 
        WebCore::FrameView::layout (other repro scenarios too)

        The new call to updateWidget() that we added to FrameView::layout() 
        can destroy the RenderPartObject. And so we were crashing on the 
        subsequent call to updateWidgetPosition(). This patch fixes that by 
        checking to make sure the RenderPartObject is still in the HashSet 
        after updateWidget(). Because m_widgetUpdateSet can be modified 
        during the call to updateWidget(), we need it to be intact while we 
        are iterating through the copy, so we cannot use the HashSet::swap 
        call we were using before. This patch instead uses a Vector to 
        iterate through the HashSet data and calls clear() on the HashSet 
        at the end.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2007-10-01  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Switch bogus assert to a conditional and return.  This case happens
        when a widget is hidden.

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

2007-09-30  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - tone down the assertion I asked Harrison to include in his fix for
          <rdar://problem/5511128>; it's OK to re-ref and deref the document
          as long as you do so after the children are done being destroyed

        No effect on release builds. Assertion change only.

        Besides the changes listed below, renamed m_hasDeleted flag to
        m_deletionHasBegun.

        * dom/ContainerNode.cpp: (WebCore::ContainerNode::removeAllChildren):
        Added code to set the m_deletionHasBegun flag and some assertions
        that test its state.

        * dom/Document.h: Removed m_hasDeleted -- we now use m_deletionHasBegun
        in the base class TreeShared.
        * dom/Document.cpp:
        (WebCore::Document::Document): Removed initialization of m_hasDeleted.
        (WebCore::Document::removedLastRef): Added code to clear
        m_inRemovedLastRefFunction if we end up deciding not to delete this.

        * platform/Shared.h:
        (WebCore::TreeShared::TreeShared): Added m_deletionHasBegun in addition to
        m_inRemovedLastRefFunction (formerly named m_hasRemovedLastRef).
        (WebCore::TreeShared::~TreeShared): Assert that m_deletionHasBegun is true.
        (WebCore::TreeShared::ref): Assert neither flag is true.
        (WebCore::TreeShared::deref): Ditto.
        (WebCore::TreeShared::hasOneRef): Ditto.
        (WebCore::TreeShared::removedLastRef): Made private. Added code to
        set m_hasDeleted to true. Also removed cast; since this class template
        has a virtual destructor, we don't need to cast before calling delete.

2007-09-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        -Fix http://bugs.webkit.org/show_bug.cgi?id=13226.
        Remove Bakefiles from svn.

        * Projects/gdk/webcore-gdk.bkl: Removed.
        * Projects/wx/webcore-wx.bkl: Removed.
        * WebCoreSources.bkl: Removed.
        * webcore-base.bkl: Removed.

2007-09-28  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Mark.

        -Fix http://bugs.webkit.org/show_bug.cgi?id=15254.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::determineState):
            - Apply state if control is readonly
            - Added state GTK_STATE_SELECTED of object is checked
            - Apply GTK_STATE_ACTIVE if RenderObject isFocused()
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::gtkEntry):
            - Implemented theme-aware text field based on gtk/gtkentry.c implementation

2007-09-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric.

        Build fix for Mac Gtk+ and Qt builds. In revision 25798 changing
        XSLTProcessor.cpp was forgotten.

        * xml/XSLTProcessor.cpp: Use PLATFORM(MAC) instead of PLATFORM(DARWIN)

2007-09-29  Adam Roben  <aroben@apple.com>

        Fix <rdar://4965715> Horizontal scrollwheel scrolling moves in opposite direction on Vista

        Reviewed by Sam.

        No regression test possible.

        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use a negative
        delta when scrolling right to match EventHandler's expectations (which
        are based on AppKit).

2007-09-28  Kevin Decker  <kdecker@apple.com>

        Reviewed by Mark Rowe

        Build fix for Mac Gtk+ and Qt builds.
        
        * xml/XSLStyleSheet.cpp: Use PLATFORM(MAC) instead of PLATFORM(DARWIN)
        * xml/XSLTExtensions.cpp: Ditto.

2007-09-28  David Harrison  <harrison@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5511128> Crash closing or reloading this SVG

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        Use DocPtr instead of RefPtr, since these events are dispatched
        when the Document is being being torn down by removedLastRef().

        * dom/DocPtr.h:
        (WebCore::DocPtr::DocPtr):
        Fix longstanding typo in template so that the DocPtr(DocPtr) constructor can be used.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        (WebCore::Document::selfOnlyRef):
        (WebCore::Document::selfOnlyDeref):
        * platform/Shared.h:
        (WebCore::Shared::Shared):
        (WebCore::Shared::ref):
        (WebCore::Shared::deref):
        (WebCore::Shared::hasOneRef):
        (WebCore::TreeShared::TreeShared):
        (WebCore::TreeShared::ref):
        (WebCore::TreeShared::deref):
        (WebCore::TreeShared::hasOneRef):
        (WebCore::TreeShared::refCount):
        Add debug-only checks for a document being ref-counted while being deleted.

2007-09-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://5261371> Nothing downloaded when exporting bookmarks from iGoogle web history

        Function for use by WebKit. Currently used only on Windows.

        * platform/network/ResourceResponse.cpp:
        (WebCore::ResourceResponse::isAttachment):
        * platform/network/ResourceResponse.h:

2007-09-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15262
          REGRESSION: Margin-top:18px is pushing down the multiple select list box outside the div.

        Reflected in existing tests.

        * css/html4.css: Changed listboxes to use border-box sizing, to match Firefox,
        WinIE and apparently also Safari 2.

2007-09-27  Kevin Decker  <kdecker@apple.com>

        <rdar://problem/5493093>
    
        Rubber stamped by John Sullivan.
        
        * WebCore.order: Added.
        * WebCore.xcodeproj/project.pbxproj:  We're changing from using an order file built by another team to using one
         we actually check into our project repository. Linker settings for Symbol Ordering Flags have been updated
         accordingly.
         
2007-09-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.
        
        Fix for <rdar://problem/5499125>
        REGRESSION (r21367): After launching Kidzui beta, a webview frame fails to appear in its main window
        
        If window object properties were modified when it had initial empty document (synchronously after 
        window.open() for example) those modifications were lost when the real document was switched in.
        
        Match Firefox behavior where window properties are not cleared if the inital document and the loaded one
        have matching security domains.

        Tests: fast/dom/Window/window-early-properties.html
               http/tests/security/window-properties-clear-domain.html
               http/tests/security/window-properties-clear-port.html
               http/tests/security/window-properties-pass.html

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::isSecureTransition):
        (WebCore::FrameLoader::begin):
        * loader/FrameLoader.h:
        If we are transitioning from initial empty document to the final one, do a domain security check
        between old security policy URL and new URL. If that passes don't clear script proxy and script objects.
        
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::updateDocumentWrapper):
        * bindings/js/kjs_proxy.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        Since we don't always clear window properties anymore, we need to update the document property to point to
        the newly created one. 
        
2007-09-27  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        <rdar://problem/5493093>
        
        * WebCore.xcodeproj/project.pbxproj: Removed libxslt from statically linked frameworks.
        * platform/mac/SoftLinking.h: Formatting tweakes, added SOFT_LINK_LIBRARY, and if'def for 
        PLATFORM(DARWIN)
        * xml/XSLStyleSheet.cpp: Soft-linked libxslt.
        * xml/XSLTExtensions.cpp: Removed the call to xsltGenericError, and added a FIXME comment stating
        that it might be helpful to push any errors from xmlXPathNewValueTree up to the Javascript Console. 
        * xml/XSLTProcessor.cpp: Soft-linked libxslt.
        
2007-09-27  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/5453350> REGRESSION (r18541, Tiger only): Refreshing a cached https page does not reload CSS and JavaScript resources
        http://bugs.webkit.org/show_bug.cgi?id=15121

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::addExtraFieldsToRequest): Now sets the cache policy to ReloadIgnoringCacheData.  Without setting the cache policy,
        the default policy in this case was ReturnCacheDataElseLoad.  If we're in a situation where the resource is in the cache, we want to make sure to avoid loading from the cache in this case.

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

        Reviewed by Darin.

        <rdar://problem/5199546> CrashTracer: [REGRESSION] 8216 crashes in Safari at com.apple.WebCore: WebCore::ResourceHandle::client const + 6

        On Tiger NSURLConnection can sometimes call the connection:willCacheResponse: delegate method on
        a secondary thread instead of the main thread. This was never an issue before, since the implementation 
        of this method was very simple and thread safe.

        The fix is to block during connection:willCacheResponse: and perform the work on the main thread.
        We need to block since this delegate method needs to return a result. If we are already on the
        main thread (which sometimes we are), the method does nothing different. If we are on a secondary
        thread, we make a mutable dictionary to hold all the arguments and later the result object.
        Then performSelectorOnMainThread:withObject: using the _callConnectionWillCacheResponseWithInfo:
        selector. This new method just pulls the arguments out for the dictionary and calls the real
        connection:willCacheResponse: delegate method (this time on the main thread). The result is stored
        in the dictionary, and when performSelectorOnMainThread:withObject: finishes the result is pulled
        out and returned.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate _callConnectionWillCacheResponseWithInfo:]):
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

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

        Update to reflect the minimal WebKitSystemInterface changes required
        to support @font-face.

        Reviewed by john

        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2007-09-26  Darin Adler  <darin@apple.com>

        - fix Windows build

        * platform/win/ClipboardWin.cpp:
        (WebCore::writeURL): Add a check for empty URL. Remove the check for invalid URL.
        (WebCore::ClipboardWin::setData): Remove the check for invalid URL.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start): Check for empty URL instead of invalid URL.
        (WebCore::PluginViewWin::load): Same here.

2007-09-26  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5491054> REGRESSION (Mail, plain-text only): Nothing happens
          when you click on rdar://<num>&<num> links (or AOL links in Safari)

        Remove the non-useful concept of a "malformed"/"invalid" URL.

        There are URLs we can parse, and others we can't, but that's not sufficient to
        determine if we should try to work with the URL. It's entirely possible that
        a so-called "malformed" URL will work just fine if it's passed to the right
        software.

        * platform/KURL.h: Removed isMalformed() and isValid().

        * loader/Cache.cpp: (WebCore::Cache::requestResource): Removed unneeded check
        if the URL is valid. But do check for an empty URL just to guarantee we don't
        trip up with a null string. It's possible we can remove this empty URL check
        later, but it's less risky to leave the empty string behavior alone for now.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Removed unneeded check if the URL is valid.
        Back on 2007-07-08, we realized that we needed to allow empty URLs. But we also
        need to allow other URLs here. This is the code path from the Mail case.
        (WebCore::FrameLoader::submitForm): Replaced URL validity check with a check
        for an empty URL (same reasoning as for requestResource above).

        * page/InspectorController.cpp: (WebCore::InspectorResource::type):
        * rendering/RenderObject.cpp: (WebCore::RenderObject::addPDFURLRect):
        Removed unneeded check for an invalid URL. In both of these cases it's definitely
        safe to allow event an empty URL.

2007-09-26  George Staikos  <staikos@kde.org>

        Reviewed by John Sullivan.

        Only highlight the applicable portion of the text run for a search
        highlight.  No way to make a testcase for this presently.

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

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
          LGPL'ed files contain incorrect FSF address

        * LICENSE-LGPL-2:
        * LICENSE-LGPL-2.1:
        * WebCorePrefix.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/JSHTMLInputElementBase.cpp:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSHTMLOptionElementConstructor.h:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSSVGMatrixCustom.cpp:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_navigator.cpp:
        * bindings/js/kjs_navigator.h:
        * bindings/js/kjs_proxy.cpp:
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_window.cpp:
        * bindings/js/kjs_window.h:
        * bindings/objc/DOMImplementationFront.cpp:
        * bindings/objc/DOMImplementationFront.h:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/generate-bindings.pl:
        * config.h:
        * css/CSSBorderImageValue.cpp:
        * css/CSSBorderImageValue.h:
        * css/CSSCharsetRule.cpp:
        * css/CSSCharsetRule.h:
        * css/CSSCharsetRule.idl:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCursorImageValue.cpp:
        * css/CSSCursorImageValue.h:
        * css/CSSFontFaceRule.cpp:
        * css/CSSFontFaceRule.h:
        * css/CSSFontFaceRule.idl:
        * css/CSSGrammar.y:
        * css/CSSHelper.cpp:
        * css/CSSHelper.h:
        * css/CSSImageValue.cpp:
        * css/CSSImageValue.h:
        * css/CSSImportRule.cpp:
        * css/CSSImportRule.h:
        * css/CSSImportRule.idl:
        * css/CSSInheritedValue.cpp:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.cpp:
        * css/CSSInitialValue.h:
        * css/CSSMediaRule.cpp:
        * css/CSSMediaRule.h:
        * css/CSSMediaRule.idl:
        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSNamespace.h:
        * css/CSSPageRule.cpp:
        * css/CSSPageRule.h:
        * css/CSSPageRule.idl:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValue.idl:
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        * css/CSSQuirkPrimitiveValue.h:
        * css/CSSRule.cpp:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSRuleList.cpp:
        * css/CSSRuleList.h:
        * css/CSSSelector.cpp:
        * css/CSSSelector.h:
        * css/CSSStyleDeclaration.cpp:
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.cpp:
        * css/CSSStyleRule.h:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/CSSStyleSheet.cpp:
        * css/CSSStyleSheet.h:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.h:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.h:
        * css/CSSValue.idl:
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:
        * css/Counter.h:
        * css/Counter.idl:
        * css/DashboardRegion.h:
        * css/FontFamilyValue.cpp:
        * css/FontFamilyValue.h:
        * css/FontValue.cpp:
        * css/FontValue.h:
        * css/MediaFeatureNames.cpp:
        * css/MediaFeatureNames.h:
        * css/MediaList.cpp:
        * css/MediaList.h:
        * css/Pair.h:
        * css/RGBColor.idl:
        * css/Rect.h:
        * css/Rect.idl:
        * css/ShadowValue.cpp:
        * css/ShadowValue.h:
        * css/StyleBase.cpp:
        * css/StyleBase.h:
        * css/StyleList.cpp:
        * css/StyleList.h:
        * css/StyleSheet.cpp:
        * css/StyleSheet.h:
        * css/StyleSheet.idl:
        * css/StyleSheetList.cpp:
        * css/StyleSheetList.h:
        * css/StyleSheetList.idl:
        * css/html4.css:
        * css/make-css-file-arrays.pl:
        * css/makegrammar.pl:
        * css/makeprop.pl:
        * css/maketokenizer:
        * css/makevalues.pl:
        * css/quirks.css:
        * dom/AtomicStringList.h:
        * dom/Attr.cpp:
        * dom/Attr.h:
        * dom/Attr.idl:
        * dom/Attribute.cpp:
        * dom/Attribute.h:
        * dom/BeforeUnloadEvent.cpp:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.cpp:
        * dom/CDATASection.h:
        * dom/CDATASection.idl:
        * dom/CSSMappedAttributeDeclaration.cpp:
        * dom/CSSMappedAttributeDeclaration.h:
        * dom/CharacterData.cpp:
        * dom/CharacterData.h:
        * dom/CharacterData.idl:
        * dom/ChildNodeList.cpp:
        * dom/ChildNodeList.h:
        * dom/Clipboard.h:
        * dom/ClipboardEvent.cpp:
        * dom/ClipboardEvent.h:
        * dom/Comment.cpp:
        * dom/Comment.h:
        * dom/Comment.idl:
        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/DOMImplementation.cpp:
        * dom/DOMImplementation.h:
        * dom/DOMImplementation.idl:
        * dom/DocPtr.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Document.idl:
        * dom/DocumentFragment.cpp:
        * dom/DocumentFragment.h:
        * dom/DocumentFragment.idl:
        * dom/DocumentMarker.h:
        * dom/DocumentType.cpp:
        * dom/DocumentType.h:
        * dom/DocumentType.idl:
        * dom/EditingText.cpp:
        * dom/EditingText.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Entity.cpp:
        * dom/Entity.h:
        * dom/Entity.idl:
        * dom/EntityReference.cpp:
        * dom/EntityReference.h:
        * dom/EntityReference.idl:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/Event.idl:
        * dom/EventListener.h:
        * dom/EventListener.idl:
        * dom/EventNames.cpp:
        * dom/EventNames.h:
        * dom/EventTarget.idl:
        * dom/EventTargetNode.cpp:
        * dom/EventTargetNode.h:
        * dom/ExceptionCode.h:
        * dom/KeyboardEvent.cpp:
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * dom/MappedAttribute.cpp:
        * dom/MappedAttribute.h:
        * dom/MappedAttributeEntry.h:
        * dom/MouseEvent.cpp:
        * dom/MouseEvent.h:
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.cpp:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.cpp:
        * dom/MutationEvent.h:
        * dom/MutationEvent.idl:
        * dom/NameNodeList.cpp:
        * dom/NameNodeList.h:
        * dom/NamedAttrMap.cpp:
        * dom/NamedAttrMap.h:
        * dom/NamedMappedAttrMap.cpp:
        * dom/NamedMappedAttrMap.h:
        * dom/NamedNodeMap.h:
        * dom/NamedNodeMap.idl:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Node.idl:
        * dom/NodeFilter.cpp:
        * dom/NodeFilter.h:
        * dom/NodeFilter.idl:
        * dom/NodeFilterCondition.cpp:
        * dom/NodeFilterCondition.h:
        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        * dom/NodeIterator.idl:
        * dom/NodeList.cpp:
        * dom/NodeList.h:
        * dom/NodeList.idl:
        * dom/Notation.cpp:
        * dom/Notation.h:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.cpp:
        * dom/ProcessingInstruction.h:
        * dom/ProcessingInstruction.idl:
        * dom/QualifiedName.cpp:
        * dom/QualifiedName.h:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/Range.idl:
        * dom/RangeException.h:
        * dom/RangeException.idl:
        * dom/RegisteredEventListener.cpp:
        * dom/RegisteredEventListener.h:
        * dom/StyleElement.cpp:
        * dom/StyleElement.h:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        * dom/Text.cpp:
        * dom/Text.h:
        * dom/Text.idl:
        * dom/Tokenizer.h:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:
        * dom/TreeWalker.idl:
        * dom/UIEvent.cpp:
        * dom/UIEvent.h:
        * dom/UIEvent.idl:
        * dom/UIEventWithKeyState.cpp:
        * dom/UIEventWithKeyState.h:
        * dom/WheelEvent.cpp:
        * dom/WheelEvent.h:
        * dom/WheelEvent.idl:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        * html/FormDataList.cpp:
        * html/FormDataList.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.cpp:
        * html/HTMLAreaElement.h:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.cpp:
        * html/HTMLBRElement.h:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.cpp:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.cpp:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.cpp:
        * html/HTMLBlockquoteElement.h:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.cpp:
        * html/HTMLButtonElement.h:
        * html/HTMLButtonElement.idl:
        * html/HTMLCollection.cpp:
        * html/HTMLCollection.h:
        * html/HTMLCollection.idl:
        * html/HTMLDListElement.cpp:
        * html/HTMLDListElement.h:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.cpp:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.cpp:
        * html/HTMLDivElement.h:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLElementFactory.cpp:
        * html/HTMLElementFactory.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLEmbedElement.idl:
        * html/HTMLEntityNames.gperf:
        * html/HTMLFieldSetElement.cpp:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.cpp:
        * html/HTMLFontElement.h:
        * html/HTMLFontElement.idl:
        * html/HTMLFormCollection.cpp:
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.cpp:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.cpp:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLGenericFormElement.cpp:
        * html/HTMLGenericFormElement.h:
        * html/HTMLHRElement.cpp:
        * html/HTMLHRElement.h:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.cpp:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.cpp:
        * html/HTMLHeadingElement.h:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLHtmlElement.h:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.cpp:
        * html/HTMLIFrameElement.h:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:
        * html/HTMLImageLoader.cpp:
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.cpp:
        * html/HTMLIsIndexElement.h:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.cpp:
        * html/HTMLLIElement.h:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.cpp:
        * html/HTMLLabelElement.h:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.cpp:
        * html/HTMLLegendElement.h:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.cpp:
        * html/HTMLMapElement.h:
        * html/HTMLMapElement.idl:
        * html/HTMLMarqueeElement.cpp:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMenuElement.cpp:
        * html/HTMLMenuElement.h:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.cpp:
        * html/HTMLMetaElement.h:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.cpp:
        * html/HTMLModElement.h:
        * html/HTMLModElement.idl:
        * html/HTMLNameCollection.cpp:
        * html/HTMLNameCollection.h:
        * html/HTMLOListElement.cpp:
        * html/HTMLOListElement.h:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.cpp:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionElement.h:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLParagraphElement.cpp:
        * html/HTMLParagraphElement.h:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.cpp:
        * html/HTMLParamElement.h:
        * html/HTMLParamElement.idl:
        * html/HTMLParser.cpp:
        * html/HTMLParser.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        * html/HTMLPreElement.h:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.cpp:
        * html/HTMLQuoteElement.h:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.idl:
        * html/HTMLStyleElement.cpp:
        * html/HTMLStyleElement.h:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.cpp:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.cpp:
        * html/HTMLTableElement.h:
        * html/HTMLTableElement.idl:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowElement.cpp:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.cpp:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.cpp:
        * html/HTMLTitleElement.h:
        * html/HTMLTitleElement.idl:
        * html/HTMLTokenizer.cpp:
        * html/HTMLTokenizer.h:
        * html/HTMLUListElement.cpp:
        * html/HTMLUListElement.h:
        * html/HTMLUListElement.idl:
        * 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/events/JSSVGLazyEventListener.cpp:
        * ksvg2/events/JSSVGLazyEventListener.h:
        * ksvg2/events/SVGZoomEvent.cpp:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/PointerEventsHitRules.cpp:
        * ksvg2/misc/PointerEventsHitRules.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/misc/SVGTimer.cpp:
        * ksvg2/misc/SVGTimer.h:
        * ksvg2/misc/TimeScheduler.cpp:
        * ksvg2/misc/TimeScheduler.h:
        * ksvg2/scripts/cssmakeprops:
        * ksvg2/scripts/cssmakevalues:
        * ksvg2/svg/ColorDistance.cpp:
        * ksvg2/svg/ColorDistance.h:
        * ksvg2/svg/GradientAttributes.h:
        * ksvg2/svg/LinearGradientAttributes.h:
        * ksvg2/svg/PatternAttributes.h:
        * ksvg2/svg/RadialGradientAttributes.h:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAngle.idl:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.cpp:
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedPathData.cpp:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.cpp:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedTemplate.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/SVGColor.idl:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGCursorElement.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/SVGDocument.idl:
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElement.idl:
        * 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/SVGException.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/SVGImageElement.cpp:
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLangSpace.cpp:
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGLength.idl:
        * 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/SVGListTraits.h:
        * ksvg2/svg/SVGLocatable.cpp:
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMPathElement.cpp:
        * ksvg2/svg/SVGMPathElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMatrix.idl:
        * ksvg2/svg/SVGMetadataElement.cpp:
        * ksvg2/svg/SVGMetadataElement.h:
        * ksvg2/svg/SVGMetadataElement.idl:
        * ksvg2/svg/SVGNumber.idl:
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.cpp:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGParserUtilities.cpp:
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPathElement.h:
        * 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.idl:
        * 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.idl:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGRenderingIntent.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGSVGElement.idl:
        * 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/SVGTransform.idl:
        * ksvg2/svg/SVGTransformDistance.cpp:
        * ksvg2/svg/SVGTransformDistance.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/SVGUnitTypes.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:
        * loader/Cache.cpp:
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        * loader/CachedResourceClient.h:
        * loader/CachedResourceClientWalker.cpp:
        * loader/CachedResourceClientWalker.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/FTPDirectoryParser.cpp:
        * loader/FTPDirectoryParser.h:
        * loader/Request.cpp:
        * loader/Request.h:
        * loader/TextResourceDecoder.cpp:
        * loader/TextResourceDecoder.h:
        * loader/loader.cpp:
        * loader/loader.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTree.cpp:
        * page/FrameTree.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/MouseEventWithHitTestResults.cpp:
        * page/MouseEventWithHitTestResults.h:
        * page/Page.cpp:
        * page/Page.h:
        * page/Plugin.h:
        * page/mac/ChromeMac.mm:
        * platform/Arena.cpp:
        * platform/Arena.h:
        * platform/AtomicString.cpp:
        * platform/AtomicString.h:
        * platform/AtomicStringImpl.h:
        * platform/BidiContext.cpp:
        * platform/BidiContext.h:
        * platform/BidiResolver.h:
        * platform/Font.cpp:
        * platform/Font.h:
        * platform/FontData.h:
        * platform/FontDescription.h:
        * platform/FontFallbackList.h:
        * platform/PlatformString.h:
        * platform/PopupMenu.h:
        * platform/PopupMenuClient.h:
        * platform/SearchPopupMenu.h:
        * platform/SegmentedString.cpp:
        * platform/SegmentedString.h:
        * platform/Shared.h:
        * platform/StaticConstructors.h:
        * platform/String.cpp:
        * platform/StringHash.h:
        * platform/StringImpl.cpp:
        * platform/StringImpl.h:
        * platform/TextBreakIterator.h:
        * platform/TextBreakIteratorICU.cpp:
        * platform/TextBreakIteratorInternalICU.h:
        * platform/TextStyle.h:
        * platform/UnicodeRange.cpp:
        * platform/UnicodeRange.h:
        * platform/cf/StringCF.cpp:
        * platform/cf/StringImplCF.cpp:
        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/Icon.h:
        * platform/graphics/IntSizeHash.h:
        * platform/graphics/PathTraversalState.cpp:
        * platform/graphics/cairo/CairoPath.h:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/mac/IconMac.mm:
        * platform/graphics/qt/IconQt.cpp:
        * platform/graphics/svg/SVGResourceFilter.cpp:
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        * platform/graphics/svg/filters/SVGDistantLightSource.h:
        * platform/graphics/svg/filters/SVGFEBlend.cpp:
        * platform/graphics/svg/filters/SVGFEBlend.h:
        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp:
        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        * platform/graphics/svg/filters/SVGFEComposite.cpp:
        * platform/graphics/svg/filters/SVGFEComposite.h:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
        * platform/graphics/svg/filters/SVGFEFlood.cpp:
        * platform/graphics/svg/filters/SVGFEFlood.h:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
        * platform/graphics/svg/filters/SVGFEImage.cpp:
        * platform/graphics/svg/filters/SVGFEImage.h:
        * platform/graphics/svg/filters/SVGFEMerge.cpp:
        * platform/graphics/svg/filters/SVGFEMerge.h:
        * platform/graphics/svg/filters/SVGFEMorphology.cpp:
        * platform/graphics/svg/filters/SVGFEMorphology.h:
        * platform/graphics/svg/filters/SVGFEOffset.cpp:
        * platform/graphics/svg/filters/SVGFEOffset.h:
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp:
        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
        * platform/graphics/svg/filters/SVGFETile.h:
        * platform/graphics/svg/filters/SVGFETurbulence.cpp:
        * platform/graphics/svg/filters/SVGFETurbulence.h:
        * platform/graphics/svg/filters/SVGFilterEffect.cpp:
        * platform/graphics/svg/filters/SVGFilterEffect.h:
        * platform/graphics/svg/filters/SVGLightSource.cpp:
        * platform/graphics/svg/filters/SVGLightSource.h:
        * platform/graphics/svg/filters/SVGPointLightSource.h:
        * platform/graphics/svg/filters/SVGSpotLightSource.h:
        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm:
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm:
        * platform/graphics/svg/filters/cg/SVGFETileCg.mm:
        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm:
        * platform/graphics/svg/qt/RenderPathQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp:
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp:
        * platform/graphics/win/IconWin.cpp:
        * platform/gtk/FontPlatformData.h:
        * platform/gtk/FontPlatformDataGtk.cpp:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/mac/FontMac.mm:
        * platform/mac/FontPlatformData.h:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/mac/LocalCurrentGraphicsContext.mm:
        * platform/mac/PopupMenuMac.mm:
        * platform/mac/SearchPopupMenuMac.mm:
        * platform/mac/StringImplMac.mm:
        * platform/mac/StringMac.mm:
        * platform/mac/TextBreakIteratorInternalICUMac.mm:
        * platform/network/FormData.cpp:
        * platform/network/FormData.h:
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/FontQt.cpp:
        * platform/qt/MenuEventProxy.h:
        * platform/qt/PlugInInfoStoreQt.cpp:
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/QWebPopup.cpp:
        * platform/qt/QWebPopup.h:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/RenderThemeQt.h:
        * platform/qt/SearchPopupMenuQt.cpp:
        * platform/qt/TextBreakIteratorQt.cpp:
        * platform/qt/WheelEventQt.cpp:
        * platform/win/FontPlatformData.h:
        * platform/win/FontPlatformDataWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/SearchPopupMenuWin.cpp:
        * platform/win/TextBreakIteratorInternalICUWin.cpp:
        * rendering/AutoTableLayout.cpp:
        * rendering/AutoTableLayout.h:
        * rendering/CounterNode.cpp:
        * rendering/CounterNode.h:
        * rendering/DataRef.h:
        * rendering/EllipsisBox.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FixedTableLayout.cpp:
        * rendering/FixedTableLayout.h:
        * rendering/GapRects.h:
        * rendering/HitTestRequest.h:
        * rendering/HitTestResult.cpp:
        * rendering/HitTestResult.h:
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineRunBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/Length.h:
        * rendering/ListMarkerBox.cpp:
        * rendering/ListMarkerBox.h:
        * rendering/RenderApplet.cpp:
        * rendering/RenderApplet.h:
        * rendering/RenderArena.cpp:
        * rendering/RenderArena.h:
        * rendering/RenderBR.cpp:
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderContainer.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:
        * rendering/RenderFrame.cpp:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderLegend.cpp:
        * rendering/RenderLegend.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderPart.cpp:
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.cpp:
        * rendering/RenderPartObject.h:
        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGBlock.cpp:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGGradientStop.cpp:
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGInlineText.cpp:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.cpp:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        * rendering/RenderSVGText.h:
        * rendering/RenderSlider.cpp:
        * rendering/RenderSlider.h:
        * rendering/RenderStyle.cpp:
        * rendering/RenderStyle.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextFragment.cpp:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineFlowBox.cpp:
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGInlineTextBox.cpp:
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRootInlineBox.cpp:
        * rendering/SVGRootInlineBox.h:
        * rendering/TableLayout.h:
        * rendering/bidi.cpp:
        * rendering/bidi.h:
        * rendering/break_lines.cpp:
        * rendering/break_lines.h:
        * xml/DOMParser.cpp:
        * xml/DOMParser.h:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequest.h:
        * xml/XMLSerializer.cpp:
        * xml/XMLSerializer.h:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLImportRule.cpp:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessor.h:

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

        Reviewed by Harrison.

        - fix <rdar://problem/5503225> CrashTracer: [USER] 2 crashes in Dashcode
          at com.apple.WebCore: WebCore::Frame::document const + 0

        * page/FrameView.cpp: (WebCore::FrameView::updateControlTints):
        Added null check.

2007-09-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=15282 r25726 caused 
        plugins/mouse-events.html to fail

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): We need to call 
        updateWidgetPosition() after updating each widget.

2007-09-25  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):

2007-09-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5283916>
        JavaScript timers may be firing while JavaScript alerts are displayed.
        
        Pause JavaScript timeouts while calling UI delegate methods that might show dialogs.
        
        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

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

        Reviewed by Anders.

        Implement PopupMenu using GtkMenu.

        * platform/PopupMenu.h:
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        (WebCore::PopupMenu::menuItemActivated):
        (WebCore::PopupMenu::menuUnmapped):
        (WebCore::PopupMenu::menuPositionFunction):
        (WebCore::PopupMenu::menuRemoveItem):

2007-09-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Mark.

        Obey the Coding-Style and move the asterisk to the
        left to be part of the type.

        * platform/gtk/RenderThemeGtk.h:

2007-09-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5466459> CrashTracer: [USER] 1 crash in 
        NetNewsWire at com.apple.WebCore: WebCore::bidiNext + 485 (15241)

        Mitz discovered that this crash appeared because r25128 made it 
        possible for RenderPartObject::updateWidget() to be called during 
        layout. updateWidget() can, through a series of calls, cause an 
        attach/detach to happen, which is very bad in the middle of a 
        layout and is what led to this crash. This patch fixes that by 
        having the FrameView keep track of a queue of RenderPartObjects 
        that need to call updateWidget(), and it goes through the queue 
        calling updateWidget() as soon as layout is done.

        * page/FrameView.cpp: We only want to call updateWidget() if we are 
        not in a nested layout. Unfortunately, the existing variables on 
        FrameViewPrivate do not have exactly the information that we need, 
        so I added nestedLayoutCount.
        (WebCore::FrameViewPrivate::reset): Reset nestedLayoutCount.
        (WebCore::FrameView::layout): Increment nestedLayoutCount once we 
        have gotten through all of the early returns. Call updateWidget() 
        after layout is nestedLayoutCount is 1 and there are widgets to 
        update. Decrement nestedLayoutCount at the end.
        (WebCore::FrameView::addWidgetToUpdate):
        (WebCore::FrameView::removeWidgetToUpdate):
        * page/FrameView.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::~RenderPartObject): Remove this from 
        the FrameView's update set.
        (WebCore::RenderPartObject::layout): Instead of calling 
        updateWidget() immediately, add this to the update widget set on 
        FrameView.
        * rendering/RenderPartObject.h:

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15275
          SVG dependency on WebCore/dom/XMLTokenizer.cpp

        * dom/XMLTokenizer.cpp: Moved #include "SVGStyleElement.h" into #if ENABLE(SVG).

2007-09-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.

        <rdar://problem/5483567> 
        REGRESSION (Tiger only, workaround in AppKit on Leopard): Pasting words copied from TextEdit in Mail adds extra newline
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedNodes): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Call removeUnrenderedNodes
        to prevent unrendered spaces from interfering with paragraph merging.
        * editing/ReplaceSelectionCommand.h:

2007-09-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        - fix <rdar://problem/5502513>

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontLinkInterface):
        Roll back this file; the old code leaked a global COM object, but that's
        no big deal and the new code caused a crash on quit.

2007-09-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5494608>
        Seed: Safari will follow links in Flash movies without clicking.

        Make sure to handle mouseover and mouseout so the plug-in can track when the mouse is over it.
                
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):

2007-09-24  Mike Fenton  <mike@staikos.net>

        Reviewed by George Staikos.

        Switch to using a QImage instead of a QPixmap to make transparency work.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createDrawingContext):
        (WebCore::HTMLCanvasElement::createPlatformImage):
        * html/HTMLCanvasElement.h:

2007-09-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Updated project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.

        * WebCore.vcproj/WebCore.vcproj:

2007-09-24  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconForPageURL): Assert the page url is non-null

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

        Rubber stamped by Adam.

        Renamed files from *Gdk to *Gtk (see #14732) using the
        work of Juan A. Suarez Romero as a base.

        GDK -> GTK

        * Projects/gdk/webcore-gdk.bkl:
        * WebCore.pro:
        * WebCoreSources.bkl:
        * loader/gdk: Removed.
        * loader/gdk/DocumentLoaderGdk.cpp: Removed.
        * loader/gtk: Added.
        * loader/gtk/DocumentLoaderGdk.cpp: Removed.
        * loader/gtk/DocumentLoaderGtk.cpp: Added.
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/gdk: Removed.
        * page/gdk/DragControllerGdk.cpp: Removed.
        * page/gdk/EventHandlerGdk.cpp: Removed.
        * page/gdk/FrameGdk.cpp: Removed.
        * page/gtk: Added.
        * page/gtk/DragControllerGdk.cpp: Removed.
        * page/gtk/DragControllerGtk.cpp: Added.
        * page/gtk/EventHandlerGdk.cpp: Removed.
        * page/gtk/EventHandlerGtk.cpp: Added.
        (WebCore::EventHandler::createDraggingClipboard):
        * page/gtk/FrameGdk.cpp: Removed.
        * page/gtk/FrameGtk.cpp: Added.
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FontData.h:
        * platform/NotImplemented.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMenuDescription.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/gdk: Removed.
        * platform/gdk/ClipboardGdk.cpp: Removed.
        * platform/gdk/ClipboardGdk.h: Removed.
        * platform/gdk/ContextMenuGdk.cpp: Removed.
        * platform/gdk/ContextMenuItemGdk.cpp: Removed.
        * platform/gdk/CookieJarGdk.cpp: Removed.
        * platform/gdk/CursorGdk.cpp: Removed.
        * platform/gdk/DragDataGdk.cpp: Removed.
        * platform/gdk/DragImageGdk.cpp: Removed.
        * platform/gdk/FileChooserGdk.cpp: Removed.
        * platform/gdk/FileSystemGdk.cpp: Removed.
        * platform/gdk/FontCacheGdk.cpp: Removed.
        * platform/gdk/FontDataGdk.cpp: Removed.
        * platform/gdk/FontGdk.cpp: Removed.
        * platform/gdk/FontPlatformData.h: Removed.
        * platform/gdk/FontPlatformDataGdk.cpp: Removed.
        * platform/gdk/GlyphPageTreeNodeGdk.cpp: Removed.
        * platform/gdk/KeyEventGdk.cpp: Removed.
        * platform/gdk/KeyboardCodes.h: Removed.
        * platform/gdk/LocalizedStringsGdk.cpp: Removed.
        * platform/gdk/LoggingGdk.cpp: Removed.
        * platform/gdk/MIMETypeRegistryGdk.cpp: Removed.
        * platform/gdk/MouseEventGdk.cpp: Removed.
        * platform/gdk/PasteboardGdk.cpp: Removed.
        * platform/gdk/PlatformScreenGdk.cpp: Removed.
        * platform/gdk/PlatformScrollBar.h: Removed.
        * platform/gdk/PlatformScrollBarGdk.cpp: Removed.
        * platform/gdk/PopupMenuGdk.cpp: Removed.
        * platform/gdk/RenderThemeGdk.cpp: Removed.
        * platform/gdk/RenderThemeGdk.h: Removed.
        * platform/gdk/ScrollViewGdk.cpp: Removed.
        * platform/gdk/SearchPopupMenuGdk.cpp: Removed.
        * platform/gdk/SharedTimerLinux.cpp: Removed.
        * platform/gdk/SoundGdk.cpp: Removed.
        * platform/gdk/SystemTimeLinux.cpp: Removed.
        * platform/gdk/TemporaryLinkStubs.cpp: Removed.
        * platform/gdk/WheelEventGdk.cpp: Removed.
        * platform/gdk/WidgetGdk.cpp: Removed.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setPlatformFont):
        * platform/graphics/gdk: Removed.
        * platform/graphics/gdk/IconGdk.cpp: Removed.
        * platform/graphics/gdk/ImageGdk.cpp: Removed.
        * platform/graphics/gtk: Added.
        * platform/graphics/gtk/IconGdk.cpp: Removed.
        * platform/graphics/gtk/IconGtk.cpp: Added.
        * platform/graphics/gtk/ImageGdk.cpp: Removed.
        * platform/graphics/gtk/ImageGtk.cpp: Added.
        * platform/gtk: Added.
        * platform/gtk/ClipboardGdk.cpp: Removed.
        * platform/gtk/ClipboardGdk.h: Removed.
        * platform/gtk/ClipboardGtk.cpp: Added.
        (WebCore::ClipboardGtk::ClipboardGtk):
        (WebCore::ClipboardGtk::~ClipboardGtk):
        (WebCore::ClipboardGtk::clearData):
        (WebCore::ClipboardGtk::clearAllData):
        (WebCore::ClipboardGtk::getData):
        (WebCore::ClipboardGtk::setData):
        (WebCore::ClipboardGtk::types):
        (WebCore::ClipboardGtk::dragLocation):
        (WebCore::ClipboardGtk::dragImage):
        (WebCore::ClipboardGtk::setDragImage):
        (WebCore::ClipboardGtk::dragImageElement):
        (WebCore::ClipboardGtk::setDragImageElement):
        (WebCore::ClipboardGtk::createDragImage):
        (WebCore::ClipboardGtk::declareAndWriteDragImage):
        (WebCore::ClipboardGtk::writeURL):
        (WebCore::ClipboardGtk::writeRange):
        (WebCore::ClipboardGtk::hasData):
        * platform/gtk/ClipboardGtk.h: Added.
        * platform/gtk/ContextMenuGdk.cpp: Removed.
        * platform/gtk/ContextMenuGtk.cpp: Added.
        * platform/gtk/ContextMenuItemGdk.cpp: Removed.
        * platform/gtk/ContextMenuItemGtk.cpp: Added.
        * platform/gtk/CookieJarGdk.cpp: Removed.
        * platform/gtk/CookieJarGtk.cpp: Added.
        * platform/gtk/CursorGdk.cpp: Removed.
        * platform/gtk/CursorGtk.cpp: Added.
        * platform/gtk/DragDataGdk.cpp: Removed.
        * platform/gtk/DragDataGtk.cpp: Added.
        * platform/gtk/DragImageGdk.cpp: Removed.
        * platform/gtk/DragImageGtk.cpp: Added.
        * platform/gtk/FileChooserGdk.cpp: Removed.
        * platform/gtk/FileChooserGtk.cpp: Added.
        * platform/gtk/FileSystemGdk.cpp: Removed.
        * platform/gtk/FileSystemGtk.cpp: Added.
        * platform/gtk/FontCacheGdk.cpp: Removed.
        * platform/gtk/FontCacheGtk.cpp: Added.
        * platform/gtk/FontDataGdk.cpp: Removed.
        * platform/gtk/FontDataGtk.cpp: Added.
        * platform/gtk/FontGdk.cpp: Removed.
        * platform/gtk/FontGtk.cpp: Added.
        * platform/gtk/FontPlatformDataGdk.cpp: Removed.
        * platform/gtk/FontPlatformDataGtk.cpp: Added.
        * platform/gtk/GlyphPageTreeNodeGdk.cpp: Removed.
        * platform/gtk/GlyphPageTreeNodeGtk.cpp: Added.
        * platform/gtk/KeyEventGdk.cpp: Removed.
        * platform/gtk/KeyEventGtk.cpp: Added.
        * platform/gtk/LocalizedStringsGdk.cpp: Removed.
        * platform/gtk/LocalizedStringsGtk.cpp: Added.
        * platform/gtk/LoggingGdk.cpp: Removed.
        * platform/gtk/LoggingGtk.cpp: Added.
        * platform/gtk/MIMETypeRegistryGdk.cpp: Removed.
        * platform/gtk/MIMETypeRegistryGtk.cpp: Added.
        * platform/gtk/MouseEventGdk.cpp: Removed.
        * platform/gtk/MouseEventGtk.cpp: Added.
        * platform/gtk/PasteboardGdk.cpp: Removed.
        * platform/gtk/PasteboardGtk.cpp: Added.
        * platform/gtk/PlatformScreenGdk.cpp: Removed.
        * platform/gtk/PlatformScreenGtk.cpp: Added.
        * platform/gtk/PlatformScrollBarGdk.cpp: Removed.
        * platform/gtk/PlatformScrollBarGtk.cpp: Added.
        * platform/gtk/PopupMenuGdk.cpp: Removed.
        * platform/gtk/PopupMenuGtk.cpp: Added.
        * platform/gtk/RenderThemeGdk.cpp: Removed.
        * platform/gtk/RenderThemeGdk.h: Removed.
        * platform/gtk/RenderThemeGtk.cpp: Added.
        (WebCore::theme):
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::close):
        (WebCore::RenderThemeGtk::addIntrinsicMargins):
        (WebCore::RenderThemeGtk::supportsFocus):
        (WebCore::RenderThemeGtk::determineState):
        (WebCore::RenderThemeGtk::determineShadow):
        (WebCore::RenderThemeGtk::getThemeData):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::paintCheckbox):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::RenderThemeGtk::paintRadio):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::paintTextArea):
        (WebCore::RenderThemeGtk::adjustButtonStyle):
        (WebCore::RenderThemeGtk::systemFont):
        (WebCore::RenderThemeGtk::gtkButton):
        (WebCore::RenderThemeGtk::gtkCheckbox):
        (WebCore::RenderThemeGtk::gtkRadioButton):
        (WebCore::RenderThemeGtk::gtkWindowContainer):
        * platform/gtk/RenderThemeGtk.h: Added.
        * platform/gtk/ScrollViewGdk.cpp: Removed.
        * platform/gtk/ScrollViewGtk.cpp: Added.
        * platform/gtk/SearchPopupMenuGdk.cpp: Removed.
        * platform/gtk/SearchPopupMenuGtk.cpp: Added.
        * platform/gtk/SoundGdk.cpp: Removed.
        * platform/gtk/SoundGtk.cpp: Added.
        * platform/gtk/WheelEventGdk.cpp: Removed.
        * platform/gtk/WheelEventGtk.cpp: Added.
        * platform/gtk/WidgetGdk.cpp: Removed.
        * platform/gtk/WidgetGtk.cpp: Added.
        * platform/network/ResourceHandle.h:

2007-09-23  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=15025
        Background repeat css property is not inherited from parent if unspecified

        Don't let invalid url specification in background shorthand make
        the entire shorthand invalid.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBackgroundImage):
        (WebCore::CSSParser::parseBackgroundProperty):
        * css/CSSParser.h:

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

        Fix Bug 15251: REGRESSION: <input type=range> doesn't respond to form.reset() or setting input.value

        http://bugs.webkit.org/show_bug.cgi?id=15251
        <rdar://5498169>

        Reviewed by Maciej.

        Test: fast/forms/range-reset.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): <input
        type=range> should be storing its value separately from the value
        attribute, as do all of our variable-input input types.

2007-09-21  Mark Rowe  <mrowe@apple.com>

        Build fix for non-Mac platforms after r25697.
        
        Rename Frame::cleanupPlatformScriptObjects to Frame::clearPlatformScriptObjects.

        * bridge/win/FrameWin.cpp:
        * page/gdk/FrameGdk.cpp:
        * page/qt/FrameQt.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2007-09-21  Adele Peterson  <adele@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5497357> REGRESSION: Safari doesn't show the month days on AirFrance reservation page

        Test: fast/dom/HTMLSelectElement/options-collection-set-string-length.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: (WebCore::JSHTMLOptionsCollection::setLength):
          Convert the value to a number.  We already have code here to check if the value is not a number.
          This matches other browsers, which allow a string value to be used to set the length.

2007-09-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5491013> REGRESSION: -[WebView windowScriptObject] returns a dummy object or nil if a page hasn't loaded

        Calling -[WebView windowScriptObject] before the page loads would give you nil. This behavior didn't match Tiger.
        The API behavior in Tiger let you get the window script object once and keep ahold of it as long as you needed it.
        The window object would remain valid even after page loads. This change restores the Tiger behavior.

        <rdar://problem/5495790> NULL dereference crash beneath Bindings::RootObject::interpreter when saving Dashcode document

        The changes to WebScriptObject's _isSafeScript call also fixed the crash in Dashcode.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _setOriginRootObject:andRootObject:]): New method used to update the the root objects,
        so the WebScriptObject can still be used after a page load.
        (-[WebScriptObject _isSafeScript]): Call [self _rootObject] instead of accessing the data member directly.
        DOMNode has an override for the _rootObject method, and it can return 0 when _private->_rootObject
        is non-zero. We would return YES here when it wasn't safe and later crash with my modified layout tests.
        Checking _rootObject first prevents other calls sites from needing to check for a valid root object,
        this fixed the Dashcode crash.
        (-[WebScriptObject _imp]): Ditto.

        * bindings/objc/WebScriptObjectPrivate.h: Add _setOriginRootObject:andRootObject:.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Call the renamed clearScriptObjects function.
        (WebCore::FrameLoader::dispatchWindowObjectAvailable): Some gratuitous code cleanup.

        * page/Frame.cpp:
        (WebCore::Frame::clearScriptObjects): Renamed cleanupScriptObject to clearScriptObjects.
        Call clearPlatformScriptObjects last so m_bindingRootObject is already NULL.
        (WebCore::Frame::windowScriptNPObject): Hold a JSLock before accessing the window. This
        change is unrelated to the bug, but should be fixed.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject): Return a script object even if the interpreter is NULL.
        This resotres the Tiger behavior of always being able to access the window object.
        (WebCore::Frame::clearPlatformScriptObjects): Keep the window script object around, and update
        the root objects for the window script object.

        * page/Frame.h: Rename cleanupScriptObject to clearScriptObjects.
        * page/FramePrivate.h: Use a RetainPtr for m_windowScriptObject.

2007-09-21  Mike Fenton  <mike@staikos.net>

        Reviewed by George Staikos.

        Fix styled pen support by not clobbering QPen properties.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):

2007-09-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Tristan and Darin

        http://bugs.webkit.org/show_bug.cgi?id=15239
        <rdar://problem/5491955> REGRESSION (r25547): With Hanin IME, one cannot input characters into forms (15239)
        
        This problem was caused by the setComposition method failing to clear
        the composition markers in the presence of an empty string.  This would 
        result in the caret being locked within the 0 length bounds of the "composition"
        and so preventing basic keyboard interaction.

        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):

2007-09-21  Adele Peterson  <adele@apple.com>

        Reviewed by Tristan.

        Fix for <rdar://problem/5497346> "Check spelling when I click Send" crashes on stationery messages every time

        No test. I wasn't able to find a way to get this to occur with Safari or DumpRenderTree.

        * editing/Editor.cpp: (WebCore::Editor::advanceToNextMisspelling): Updated comment.
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot): Only return the root position if its editable.
        (WebCore::maxDeepOffset): Added nil check & assert.

2007-09-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        <rdar://problem/5404339>
        Site redirects continuosly, starving UI thread, causing app to hang.
        
        Use GetQueueStatus to see if there are input messages in the queue that aren't being processed.
        If so, use a low-priority timer instead of PostMessage.
        
        * platform/win/SharedTimerWin.cpp:
        (WebCore::setSharedTimerFireTime):

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

        Reviewed by Anders.

        - add QueryInterface capabilities to COMPtr

        * platform/win/COMPtr.h:
        (COMPtr::COMPtr): Added constructor that takes a Query tag and
        does an appropriate QueryInterface.
        (COMPtr::query): Added function to do a queryInterface.
        (COMPtr::copyQueryInterfaceRef): Added private helper used by
        both of the above. Note that when the query fails you get a 0,
        which is the same thing you get if a 0 pointer is passed in.

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontLinkInterface): Convert to using
        the new query as a test case. Also eliminate the unnecessary
        second global variable and use COMPtr objects rather than just
        leaking references.

        * platform/win/WCDataObject.h: Removed unneeded include and
        using statements.

2007-09-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5494790>
        clicking any link in the Flash regions at bananarepublic.com results in bad page

        Don't replace the frame contents, the Mac version doesn't do this.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2007-09-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5496700>
        Repro crash loading http://www.tivo.com/whatistivo/tivohd/index.html

        Don't continue if the plug-in cancelled the stream.
                
        * loader/win/NetscapePlugInStreamLoaderWin.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):

2007-09-21  Kevin Decker  <kdecker@apple.com>

        * platform/mac/SoftLinking.h: Build fix; added necessary #imports. 

2007-09-21  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Added SoftLinking.h to the project.
        * platform/mac/SoftLinking.h: Contains a new macro; useful in helping to lazily load frameworks.

2007-09-20  Ada Chan  <adachan@apple.com>

        <rdar://problem/5477240> Regression: Footer is too high in print preview
        Make computePageRectsForFrame() return the height of the page adjusted for margins.

        Reviewed by Steve.

        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * bridge/win/FrameWin.h:

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

        Reviewed by Hyatt.

        - <rdar://problem/5101991> Avril Lavigne music player comes up in a window with scrollbars
        - Implementing missing scrollbar functionality to allow turning off scrollbars correctly.

        * platform/ScrollView.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::setAllowsScrolling):
        (WebCore::ScrollView::ScrollViewPrivate::allowsScrolling):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::setAllowsScrolling):
        (WebCore::ScrollView::allowsScrolling):

2007-09-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Dave Hyatt

        <rdar://problem/5245981> - No favicon shows up for cnet.com
        
        CNet's favicon has two images in it - a 32x32 white square, and a 16x16 image that is their actual icon
        Till now on Windows we've always gone straight for the first image in an icon for the favicon, now we
        actually do proper size matching

        * platform/graphics/BitmapImage.h:

        * platform/graphics/Image.h:
        (WebCore::Image::getHBITMAPOfSize): 
        (WebCore::Image::drawFrameMatchingSourceSize): Search through the frames of the image for the correct size

        * platform/graphics/win/ImageWin.cpp:
        (WebCore::BitmapImage::getHBITMAP):
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):

2007-09-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brady.

        Call ascii() instead of utf8() from debug logging code to avoid threading
        issues associated w/ converting to UTF8.

        * loader/icon/IconDatabase.cpp:
        (WebCore::makeAllDirectories):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::loadDecisionForIconURL):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):
        (WebCore::IconDatabase::iconDatabaseSyncThread):
        (WebCore::IconDatabase::performOpenInitialization):
        (WebCore::IconDatabase::checkIntegrity):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::writeToDatabase):
        (WebCore::readySQLStatement):
        (WebCore::IconDatabase::setIconURLForPageURLInSQLDatabase):
        (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
        (WebCore::IconDatabase::removePageURLFromSQLDatabase):
        (WebCore::IconDatabase::getIconIDForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::addIconURLToSQLDatabase):
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::removeIconFromSQLDatabase):
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase):

2007-09-20  Mike Fenton  <mike@staikos.net>

        Reviewed by George Staikos.

        Implement gradients and more of canvas for Qt.  Style changes and some
        of the stroking fixes by George.

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        (WebCore::CanvasGradient::~CanvasGradient):
        (WebCore::CanvasGradient::addColorStop):
        (WebCore::CanvasGradient::platformShading):
        * html/CanvasGradient.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):

2007-09-20  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=15235
        Options can not be removed from a Select element with OptGroup's using JavaScript
        <rdar://problem/5494123>

        Remove HTMLOptionElement children against the proper parent node.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::remove):

2007-09-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - WebCore part of speculative fix for <rdar://problem/5490627>, about crashes constructing a
          String using the values filled in by checkSpellingOfString()

        * editing/Editor.cpp:
        (WebCore::findFirstMisspellingInRange):
        initialize out parameters the way we do elsewhere; add many assertions for improper results
        from checkSpellingOfString(); don't create a String at all until we've checked all the ways
        that checkSpellingOfString() results could indicate invalid string, even the unexpected ones;
        as an optimization, don't construct a String at all when looping through to mark all instances.

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        There is no need to have FTPDirectoryDocument stubs. We can
        compile FTPDirectoryDocument.cpp and FTPDirectoryTokenizer.cpp
        instead.

        * WebCore.pro:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Remove includes that are not needed.

        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the Pasteboard stubs to PasteboardGdk.cpp.

        * WebCore.pro:
        * platform/gdk/PasteboardGdk.cpp: Added.
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::Pasteboard):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the Icon stubs to IconGdk.cpp

        * WebCore.pro:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/graphics/gdk/IconGdk.cpp: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the Font stubs to FontGdk.cpp

        * platform/gdk/FontGdk.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the SearchPopupMenu stubs to SearchPopupMenuGdk.cpp

        * WebCore.pro:
        * platform/gdk/SearchPopupMenuGdk.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the ContextMenu and ContextMenuItem stubs to
        ContextMenuGdk.cpp and ContextMenuItemGdk.cpp.

        * WebCore.pro:
        * platform/gdk/ContextMenuGdk.cpp: Added.
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::platformDescription):
        (WebCore::ContextMenu::releasePlatformDescription):
        * platform/gdk/ContextMenuItemGdk.cpp: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Implement the WebCore::fileSize function using g_stat.

        * platform/gdk/FileSystemGdk.cpp:
        (WebCore::fileSize):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the ResourceHandle stubs from TemporaryLinkStubs
        to the ResourceHandleCurl.cpp file. This affects the
        Gtk+ and wx port as they share the curl implementation.


        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        (WebCore::ResourceHandle::loadsBlocked):
        * platform/wx/TemporaryLinkStubs.cpp:

2007-09-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Take http://bugs.webkit.org/show_bug.cgi?id=15221 into account
        and change the variable names from nameSystem to systemName and
        change the name of the function to stringByAdoptingFileSystemRepresentation.

        * platform/gdk/FileChooserGdk.cpp:
        (WebCore::stringByAdoptingFileSystemRepresentation):
        (WebCore::FileChooser::basenameForWidth):

2007-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Fix <rdar://problem/5492141> Assertion in isdigit() on windows Safari

        Test: fast/css/hexColor-isDigit-assert.html

        * platform/DeprecatedString.cpp:
        (WebCore::isCharacterAllowedInBase): Check that the character is ascii 
        to avoid an assertions on Windows.

2007-09-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5489879>
        Combination of real player with high connection quality in selecting player makes Safari quit.
        
        Prevent the Real Player plug-in from calling the window proc recursively.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::wndProc):
        (WebCore::PluginViewWin::setNPWindowRect):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:
        (WebCore::):

2007-09-18  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5472062> -webkit-user-select: none makes selection difficult
        and for <rdar://problem/5472056> REGRESSION: Cannot type into edit fields on a form (sccsheriff.org)

        Tests:

        This fix has a few steps:
        1) Removes the ignore value for the -webkit-user-select property.  We now decide when to prevent selection from starting by calling canStartSelection on the node.
        2) Implements canStartSelection which returns false for all elements that used to have -webkit-user-select:ignore set, true for content editable nodes, 
           and walks up the tree to ask the parent before allowing selection to be started on any other nodes.
        3) We used to disallow selection from starting within -webkit-user-select:none blocks, but now we only use canStartSelection for that.  This will allow easy selections
           in cases like iChat where there's a mix of selectable and non-selectable content.
        4) Makes -webkit-user-select inherited.  After removing the "ignore" value, -webkit-user-select would behave like it was inherited anyways since we already allowed the text value to override the none value.


        * css/html4.css: Removed all usage of -webkit-user-select: ignore.  This is now handled internally with canStartSelection().
          Now -webkit-user-select won't be unintentionally overridden by nodes that don't want to allow selection to be started, but do want to honor the -webkit-user-select to
          determine whether or not selection is allowed at all.

        * editing/SelectionController.cpp: (WebCore::SelectionController::selectAll):
          Don't try to determine whether selection is allowed inside the root node here.  VisiblePosition and Selection creation will keep Selection endpoints out of -webkit-user-select:none regions.
        
        * dom/Node.h:
        * dom/Node.cpp: (WebCore::Node::canStartSelection): Added. Always allows selection to be started in a content editable node.  If there's a parent, ask the parent if starting a selection is allowed.
          If there's no parent, default to allowing selection.
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::canStartSelection): Added. If its not a link, then calls the base class. Disallows selection for non-editable links.
          Allows selection for editable links.
          This logic used to be done in CSSStyleSelector by changing the user-select property.
        * html/HTMLButtonElement.h: (WebCore::HTMLButtonElement::canStartSelection): Added. Disallows selection from starting in buttons.
        * html/HTMLImageElement.h: (WebCore::HTMLImageElement::canStartSelection): Added. Disallows selection from starting in images.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::canStartSelection): Added. Disallows selection from anything that's not a text field.  Text fields call up to the base class.
          When they're editable, text controls will always be selectable because of the case for content editable content. Otherwise, they'll respect their parent element's decision about starting a selection. 
        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::canStartSelection): Added. Disallows selection from starting in popup buttons.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent): Use canMouseDownStartSelect instead of the ambiguously named shouldSelect().
        (WebCore::EventHandler::handleMousePressEventTripleClick): ditto.
        (WebCore::EventHandler::handleMousePressEventSingleClick): ditto.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Use canMouseDragExtendSelect.
        (WebCore::EventHandler::selectCursor): Paint an ibeam in any region that allows you to click to create a selection.
        (WebCore::EventHandler::canMouseDownStartSelect): Now fires the selectStart event, and calls canStartSelection instead of checking the user-select property.
        (WebCore::EventHandler::canMouseDragExtendSelect): This is identical to canMouseDownStartSelect because of 12823, even though it seems strange that we would fire the selectStart event here.
        * page/EventHandler.h:
        * page/FocusController.cpp: (WebCore::clearSelectionIfNeeded): Calls canStartSelection instead of checking the user-select property to decide when to prevent selection creation. 
        * rendering/RenderObject.cpp: (WebCore::RenderObject::draggableNode): ditto.
        * rendering/RenderObject.h: Removed helper methods that are no longer needed.

        * rendering/RenderStyle.h: Made userSelect inherited.  After removing the "ignore" value, -webkit-user-select would behave like it was inherited 
          anyways since we already allowed the text value to override the none value.
          Removed the SELECT_AUTO and SELECT_IGNORE values since they're no longer used.
        (WebCore::):
        (WebCore::RenderStyle::userSelect):
        (WebCore::RenderStyle::setUserSelect):
        (WebCore::RenderStyle::initialUserSelect):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::RenderStyle::diff):

        * css/CSSComputedStyleDeclaration.cpp: (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Remove case for SELECT_AUTO and SELECT_IGNORE
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):  Remove adjustment for links.  This is now handled in HTMLAnchorElement::canStartSelection.
        (WebCore::CSSStyleSelector::applyProperty): Map CSS_VAL_AUTO to SELECT_TEXT.  Remove CSS_VAL_IGNORE.

2007-09-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5478250> REGRESSION: After pasting text copied from Mail subject and typing return, the cursor disappears because of negative left margin

        When pasting text from the Mail subject line, the RTF pasteboard contains text that has a first line negative indent along with a
        paragraph indent that has a counteracting positive indent. This results in the first line being flush left justified, and the remaining
        wrapped lines being indented. When this is converted to a DOM fragment, AppKit makes a block element with a margin-left and a negative
        text-indent that matches the RTF. So far this is all correct behavior.

        When this content is pasted on the line of an existing paragraph that has content, ReplaceSelectionCommand will decided to merge the paragraphs.
        This will convert the block element to a style span that has all inherited style properties. These inherited properties will still contain block
        properties that have no affect on inline elements. These block properties will hang around on the style span and will get cloned to new block
        elements if the user hit return on that line. The new block elements would then have the text-indent but not the margin-left, so the text would be
        hidden off the left edge of the page.

        In the end, we should never hang on to block-only properties in our style spans. This cuts out meaningless properties and prevents properties
        from magically affecting blocks later if the style is cloned for a new block element during a future editing operation.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Remove any inherited block properties that are now in the span's style.
        * editing/markup.cpp:
        (WebCore::createMarkup): Ditto.

2007-09-18  Dave Hyatt  <hyatt@apple.com>

        Land a UnicodeRange helper class (ported from Mozilla) that we are going to use to prepare for making
        language-sensitive fallback choices for fonts.

        Reviewed by olliej

        * WebCore.vcproj/WebCore.vcproj:
        * platform/UnicodeRange.cpp: Added.
        (WebCore::):
        (WebCore::findCharUnicodeRange):
        (WebCore::langGroupFromUnicodeRange):
        * platform/UnicodeRange.h: Added.

2007-09-18  Dave Hyatt  <hyatt@apple.com>

        Fix a bug in my previous patch.  Make sure to select the old font back into the HDC and to also release the HDC.
       
        Reviewed by aroben

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

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

        Reviewed by Darin.

        Patch for <rdar://problem/5488478> Safari crashes when passing null to Range.insertNode()

        Test: fast/dom/Range-insertNode-crash.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode): Null check the passed in node to insert.

2007-09-18  Mike Fenton  <mike@staikos.net>

        Reviewed by George Staikos.

        Retain the pen properties when changing one aspect of the pen.

        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):

2007-09-18  Mike Fenton  <mike@staikos.net>

        Reviewed by George Staikos.

        Make <canvas> work in more cases by restarting the painter after we
        finish painting, and restoring the pen and opacity.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):

2007-09-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15169
          Freeze on Google maps using the "Dig a hole" tool
          <rdar://problem/5477414>

        Test: fast/dom/CSSStyleDeclaration-empty-string-property.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName): Added an early return if the property name
        is the empty string, thus avoiding a loop that is not prepared for that
        case.

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

        Reviewed by Adam.

        - fix <rdar://problem/5415734> <select> draws incorrectly if size of menu options
          is changed after it pops up once

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu): Removed unnecessary initialization of IntRect.
        (WebCore::PopupMenu::show): Check that the clientRect is empty instead of checking
        the entire windowRect -- this fixes a bug where we pop up a tiny 2-pixel high black
        box when you click on an empty menu.
        (WebCore::PopupMenu::visibleItems): Base the number of items on the client rect
        instead of the window rect. Rounding down means this would have worked anyway, but
        it's more correct to do it this way.
        (WebCore::PopupMenu::paint): Deallocate the bitmap so it gets reallocated if it
        has the wrong width or height (or if GetObject returns false, which should not
        happen in practice).

2007-09-18  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5486974> REGRESSION(r25373): 1/4 second to doubleclick word in GMail when using Kotoeri IM, also slow in other IMs (15163)

        Updated tests:
        * fast/dom/Window/window-xy-properties-expected.txt:
        * fast/dom/plugin-attributes-enumeration-expected.txt:
        * fast/events/onerror-bubbling-expected.txt:
        * fast/events/related-target-expected.txt:
        * fast/forms/select-namedItem-expected.txt:
        * fast/table/incomplete-table-in-fragment-2-expected.txt:
        * fast/table/incomplete-table-in-fragment-hang-expected.txt:
        * fast/table/large-rowspan-crash-expected.txt:
        * plugins/embed-attributes-setting-expected.txt:

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        Avoid VisiblePosition check if the current node is a descendant
        of the start container and the start offset was 0. In that case
        we already had enough context to correctly decide whether to emit
        a newline after a preceding block. We chose not to emit
        (m_haveEmitted is false), so don't second guess that.
            
        (WebCore::TextIterator::exitNode):
        Changed some comments.

2007-09-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Speculative fix for <rdar://problem/5479443> REGRESSION: Hang due to 
        infinite JS recursion on close @ engadget.com (onunload-based ad)
        
        If page is NULL, shouldInterruptScript now returns true, so you can't 
        get stuck in a state in which a script executes forever without putting 
        up a UI to ask if it should stop.

        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::shouldInterruptScript):

2007-09-17  Dave Hyatt  <hyatt@apple.com>

        Fix for bug 14743, missing glyphs on many international sites because of MLang's tiny cache.
        
        Bypass Mlang's cache entirely.  Get the mapped font from MLang, obtain the font name, and then feed
        the name back into our own system so that it gets created and cached again without MLang being involved.
        Then free up the font obtained from MLang immediately so that its cache just remains empty.
           
        Reviewed by aroben

        * platform/FontData.h:
        (WebCore::FontData::isSystemFont):
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        
2007-09-17  Adam Roben  <aroben@apple.com>

        Fix <rdar://5423441> Should get focus ring color from SafariTheme

        Reviewed by Hyatt.

        No regression test possible.

        * WebCore.vcproj/WebCore.vcproj: Added ColorSafari.cpp.
        * platform/graphics/win/ColorSafari.cpp: Added.
        (WebCore::makeRGBAFromCGColor): Added.
        (WebCore::focusRingColor): Added. Gets the focus ring color from
        SafariTheme if SafariTheme has support for it.
        (WebCore::setFocusRingColorChangeFunction): Added.
        * platform/win/TemporaryLinkStubs.cpp: Removed focus ring color
        functions.

2007-09-17  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:
        * loader/NetscapePlugInStreamLoader.h:

2007-09-17  Anders Carlsson  <andersca@apple.com>

        Fix Mac build.
        
        * loader/NetscapePlugInStreamLoader.cpp:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/win/NetscapePlugInStreamLoaderWin.cpp: Copied from loader/NetscapePlugInStreamLoader.cpp.

2007-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5483346>
        crash at vw.com WebCore::PluginViewWin::disconnectStream.
        
        The following events would lead to this crash:
        
        1. a plug-in stream finishes loading and calls NPP_DestroyStream.
        2. the DestroyStream handler calls NPN_Evaluate, submitting a form through JavaScript.
        3. A new page is going to be loaded and DocumentLoader::stopLoading is called.
        4. DocumentLoader::stopLoading will stop all loader, including the one that is done loading!
        
        The fix is to port NetscapePluginStreamLoader over from the Mac code and use it instead. This fixes the crash
        because it disassociates the stream loader with the document loader _before_ calling NPP_DestroyStream, whereas
        SubresourceLoader does this _after_ calling NPP_DestroyStream. 
        
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        (WebCore::NetscapePlugInStreamLoader::~NetscapePlugInStreamLoader):
        (WebCore::NetscapePlugInStreamLoader::create):
        (WebCore::NetscapePlugInStreamLoader::isDone):
        (WebCore::NetscapePlugInStreamLoader::releaseResources):
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):
        * loader/NetscapePlugInStreamLoader.h:
        (WebCore::NetscapePlugInStreamLoaderClient::didFinishLoading):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::didReceiveResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFail):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::load):

2007-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5483839>
        Crash loading http://www.microsoft.com if Silverlight 1.0 is installed.
        
        Work around a problem in our NPRuntime implementation by never unloading the silverlight plug-in dll.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::determineQuirks):
        * plugins/win/PluginViewWin.h:
        (WebCore::):

2007-09-17  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15178
        and
        <rdar://problem/5474001>

        The stress test proves that this was an overzealous ASSERT.  It is very possible to mark an icon
        for addition to the on-disk database and then mark it for removal before it is ever written out.  
        This is not an error and was already handled gracefully

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeIconFromSQLDatabase): Don't ASSERT of log if the icon wasn't on disk

2007-09-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        <rdar://problem/5487048> - ASSERT in stress test in IconDatabase

        If a PageURLRecord went away, it never clears its URL from the IconRecord it retained.

        * loader/icon/PageURLRecord.cpp:
        (WebCore::PageURLRecord::~PageURLRecord): Set the icon record to 0, clearing the page url
        * loader/icon/PageURLRecord.h: Add the destructor

2007-09-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5480050>
        Leopard9A551 with Dashcode 112: Dashcode crash when dragging image into canvas.
        
        If @import stylesheet was modified through CSS DOM style selector would not get updated. This
        could lead to crashes.

        Test: fast/css/import-style-update.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::styleSheetChanged):

2007-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5421997>
        http://bugs.webkit.org/show_bug.cgi?id=14247
        Display problem with Flash - image does not stop changing
        
        Port the manual load code over from the Mac version.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        * plugins/win/PluginDatabaseWin.h:
        Add load manually parameter.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::stop):
        If we're loading manually, cancel the main resource load.
         
        (WebCore::PluginStreamWin::destroyStream):
        Don't disconnect the stream if we're loading manually.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):
        Always call updateWindow()
        
        (WebCore::PluginViewWin::PluginViewWin):
        Initialize loadManually.
        
        (WebCore::PluginViewWin::init):
        Don't set the width and height of the window here since it will make the plug-in HWND show briefly
        before it's been positioned.
        
        (WebCore::PluginViewWin::didReceiveResponse):
        Create the manual stream.
        
        (WebCore::PluginViewWin::didReceiveData):
        (WebCore::PluginViewWin::didFinishLoading):
        (WebCore::PluginViewWin::didFail):
        Call through to the manual stream.
        
        * plugins/win/PluginViewWin.h:

2007-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14693
        document.width/height doesn't force layout

        Test: fast/dom/document-width-height-force-layout.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::width): Force layout.
        (WebCore::HTMLDocument::height): ditto.
        * html/HTMLDocument.h:

2007-09-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Convert the filenames from WebCore::String to the filesystem encoding
        and vice versa using g_filename_{from,to}_utf8 functions. Also add the needed NULL
        checks for the return values where glib and gtk+ can return NULL.

        * platform/gdk/FileChooserGdk.cpp:
        (WebCore::convertToStringByAdoptingTheFilesystemRepresentation):
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):

2007-09-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Use the new WebCore::String::fromUTF8 function to create
        the labels.

        * platform/gdk/LocalizedStringsGdk.cpp:
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):

2007-09-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Add WebCore::String::fromUTF8 to convert from UTF-8
        to a WebCore::String. This is meant to be used by
        the Gtk+ port and the signature and implementation
        is similiar to the one of DeprecatedString.

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::fromUTF8):

2007-09-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Implement the fileExists and deleteFile functions
        using glib.

        * WebCore.pro:
        * platform/gdk/FileSystemGdk.cpp: Added.
        (WebCore::fileExists):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-16  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5472125> REGRESSION (9A535-9A548): No VO cursor shown when navigating in a mail message body

        The problem was that the visible units code was mishandling non-editable content, generating null
        VisiblePositions instead of the actual boundary VisiblePositions.
        
        Updated tests:
        * fast/dom/Window/window-xy-properties-expected.txt:
        * fast/dom/plugin-attributes-enumeration-expected.txt:
        * fast/events/onerror-bubbling-expected.txt:
        * fast/events/related-target-expected.txt:
        * fast/forms/select-namedItem-expected.txt:
        * fast/table/incomplete-table-in-fragment-2-expected.txt:
        * fast/table/incomplete-table-in-fragment-hang-expected.txt:
        * fast/table/large-rowspan-crash-expected.txt:
        * plugins/embed-attributes-setting-expected.txt:
       
        Source Changes:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        (WebCore::VisiblePosition::honorEditableBoundaryAtOrBefore):
        (WebCore::VisiblePosition::honorEditableBoundaryAtOrAfter):
        Rename firstEditablePositionAtOrAfter to honorEditableBoundaryAtOrAfter.
        Rename firstEditablePositionAtOrBefore to honorEditableBoundaryAtOrBefore.
        Changed these two functions to handle non-editable positions.
        
        * editing/VisiblePosition.h:
        * editing/visible_units.cpp:
        (WebCore::previousWordPosition):
        (WebCore::nextWordPosition):
        (WebCore::positionAvoidingFirstPositionInTable):
        (WebCore::startPositionForLine):
        (WebCore::startOfLine):
        (WebCore::endOfLine):
        (WebCore::previousSentencePosition):
        (WebCore::nextSentencePosition):
        Rename firstEditablePositionAtOrAfter to honorEditableBoundaryAtOrAfter.
        Rename firstEditablePositionAtOrBefore to honorEditableBoundaryAtOrBefore.
        Also, startOfLine() now calls positionAvoidingFirstPositionInTable() in the empty block early return case.
        positionAvoidingFirstPositionInTable() was the logic startOfLine() used in the normal case. Now in a reusable function.

2007-09-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Mac doesn't have any kind of not implemented macro, so we'll actually implement
        fileSize.

        * platform/mac/FileSystemMac.mm:
        (WebCore::fileSize):

2007-09-14  Timothy Hatcher  <timothy@apple.com>

        Initialize m_dialogArguments to 0. Fixes the newly crashing layout tests.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):

2007-09-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady, John H.

        <rdar://problem/5483632> File system operation wrappers are unimplemented on windows
        
        Implement Windows versions of fileExists and deleteFile. 
        Also corrects fileSize to use a 64-bit version of stat.

        * platform/win/FileSystemWin.cpp:
        (WebCore::fileSize):  
          Renamed argument to be more consistent with others.
          And converted to _stat32i64 to allow 64-bit filesizes
        (WebCore::fileExists):
        (WebCore::deleteFile):
        * platform/win/TemporaryLinkStubs.cpp:

2007-09-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam and Geoff.

        <rdar://problem/5333272> Cannot upload files when path contains 
        non-ascii/multibyte characters

        We can't use _stat to determine file size on Windows as it may not 
        correctly handle multibyte characters, so we have to use _wstat.
        
        In deference to the fact that we may one day use the FormDataStreamCFNet.cpp
        on Mac i've wrapped the call to _wstat with a generic fileSize
        method in FileSystem.h

        * WebCore.vcproj/WebCore.vcproj:
        * platform/FileSystem.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/win/FileSystemWin.cpp: Added.
        (WebCore::setHTTPBody):
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/FileSystemMac.mm:
        (WebCore::fileSize):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-09-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam.

        <rdar://problem/5472970> REGRESSION (r24276): TinyMCE popups show an empty window with no content

        Accessing the document of a window before the load finished would cause the window
        object to hold onto the initial empty document, and never switch over to the real document
        once the load finished. This regression was caused by r24276 which added a check to prevent
        clearing the window object when the load finished. The absence of this clear allowed the
        dialogArguments set with showModalDialog to persist on the window after the load. However,
        not clearing the window would keep other properties (and the empty document object) around.

        So the fix is to store away the dialog arguments that were passed to showModalDialog and
        put them back on the window object in the dialogArguments property each time
        the window is cleared.

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow): No longer put dialogArguments on the window here.
        (KJS::showModalDialog): Put dialogArguments on the window and call
        setDialogArgumentsAndReturnValueSlot to remember the arguments.
        (KJS::Window::clear): Put m_dialogArguments back on the window as dialogArguments.
        (KJS::WindowFunc::callAsFunction): Call the new setDialogArgumentsAndReturnValue.
        (KJS::Window::setDialogArgumentsAndReturnValue): Store the arguments in m_dialogArguments.
        * bindings/js/kjs_window.h: Rename setReturnValueSlot to setDialogArgumentsAndReturnValueSlot.
        * manual-tests/modal-dialog-arguments.html: Confirmed that this test still passes.

        Reverted r24276 which was all the changes in FrameLoader.cpp and FrameLoader.h.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Remove m_shouldClearWindowProperties.
        (WebCore::FrameLoader::createWindow): Remove the call to setShouldClearWindowProperties.
        (WebCore::FrameLoader::clear): No longer check m_shouldClearWindowProperties, clear the
        window whenever clearWindowProperties is set.
        (WebCore::FrameLoader::begin): Remove m_shouldClearWindowProperties.
        (WebCore::FrameLoader::open): Ditto.
        * loader/FrameLoader.h: Remove m_shouldClearWindowProperties.

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

        How about a build fix that works on *all* platforms?

        * platform/Threading.h:
        (WebCore::initializeThreading):

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

        Roll out my previous build fix and just make the stupid thing inline
        (I knew there was something easier but oh boy, no coffee yet... weinig?)

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

        Rubberstamped by Mark Rowe

        Add the logging channel I just created to the initialize list on Mac

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

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

        Build fix

        That method can't go in the header, apparently

        * platform/Threading.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::initializeThreading):
        * platform/mac/Threading.mm:
        (WebCore::initializeThreading):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::initializeThreading):

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

        Reviewed by Darin

        -Add callOnMainThread() implementation to Windows

        * WebCore.vcproj/WebCore.vcproj:
        
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): Call initializeThreading() from the main thread before kicking off the secondary thread
        
        * platform/Logging.cpp: Added Threading logging channel
        (WebCore::):
        * platform/Logging.h: Ditto
        
        * platform/Threading.h:
        (WebCore::initializeThreading): Added - only needs Windows impl for now
        * platform/win/ThreadingWin.cpp: Added.
        (WebCore::callFunctionsOnMainThread): Calls each function currently in the main-thread queue
        (WebCore::ThreadingWindowWndProc):
        (WebCore::initializeThreading): Creates a message-only window to use for callOnMainThread()
        (WebCore::callOnMainThread): Queues the function to be called and posts a message to the threading
          window such that the function-call-queue can be addressed
        
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        
2007-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5316743>
        Safari does not handle filename parameter of content-disposition
        
        Use CFURLResponseCopySuggestedFilename instead of our own hand-rolled implementation. 
        
        While we do return the correct filename in all cases I've tried, using CFNetwork is better because
        it might handle corner cases that we don't.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        
2007-09-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=15209
        Sometimes removing an iframe from the DOM does not remove its frame 
        from the page

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame): Use the contentFrame pointer
        directly instead of searching for a frame by the frame element's name, 
        because the frame element's name may have changed. (Another reason to do
        this is that it's just plain more straight-forward and efficient.)

2007-09-14  Darin Adler  <darin@apple.com>

        Reviewed by Mitz and Kevin Decker.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15197
          <rdar://problem/5478271> REGRESSION: Some Yahoo text entry fields
          render as lines rather than text entry boxes

        Test: fast/forms/textarea-rows-cols.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Use constants for the default number
        of rows and columns.
        (WebCore::HTMLTextAreaElement::parseMappedAttribute): If rows/cols attribute has a value
        that's missing, non-numeric, or zero, then use the default value. Also check for the
        case where the effective value of the attribute isn't changing.

2007-09-14  Sven Herzberg  <sven@imendio.com>

        Reviewed by George.

        Don't maintain obsolete code, fixes:
        http://bugs.webkit.org/show_bug.cgi?id=15215

        * platform/gdk/FontPlatformData.cpp: remove static
        FontPlatformData::list() (isn't used at any place)

2007-09-14  Sven Herzberg  <sven@imendio.com>

        Reviewed by Adam Roben.

        Don't use fontconfig types if necessary, fixes:
        http://bugs.webkit.org/show_bug.cgi?id=15203

        * platform/gdk/FontPlatformData.cpp: don't use an FcBool to store the
        initialized state, use a plain c++ bool instead

2007-09-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/5480437> - No site icon at launch and related error messages

        The error message was actually indicative of a larger bug that might've resulted in icons getting
        improperly pruned because they were never added to the set of retained page URLs.

        To solve the no-icon-at-launch problem, we send the "didReceiveIcon:" delegate call for every page 
        load that has an icon, whether the icon comes in from network, from disk, or was already in ram

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader): Always send the didReceiveIcon delegate call when an icon's 
          image data is known

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::retainIconForPageURL): Much more accurately track the set of retained pages by
          adding them when their retain count moves from 0 to 1

        * loader/icon/PageURLRecord.h:
        (WebCore::PageURLRecord::retain): Correctly distinguish the "retain count just went from 0 to 1" case
          in the return value

2007-09-13  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Geoff and Maciej

        Fix MSVC build warning due to out of range data in a char array

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon): The buffer is now unsigned data

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer): Add the "unsigned char*" c'tor
        * platform/SharedBuffer.h:

2007-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/5470457> REGRESSION: Input method inline hole is mishandled in text
          <input> elements with maxlength limit

        * editing/Editor.h: Moved MarkedTextUnderline here and renamed it CompositionUnderline.
        Moved the rest of the marked text API here and used the term that will be more familiar
        to those on platforms other than Macintosh, "composition". This helps prevent confusion
        with the other kinds of mark -- the emacs "mark" and spelling/grammar marks. Also
        cleaned up the conditionals a bit for the Macintosh-specific parts of this header.

        * editing/Editor.cpp:
        (WebCore::Editor::Editor): Updated for name change.
        (WebCore::Editor::clear): Added. To be called by FrameLoader::clear().
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Removed code to make inserted
        text replace the marked text range -- we now deal with this explicitly by not
        calling this function to replace marked text. Also removed unneeded code that was
        specific to the use of this to replace the marked text.
        (WebCore::Editor::selectComposition): Renamed from selectMarkedText. Updated since
        the composition range is not stored as a Range.
        (WebCore::Editor::confirmComposition): Added. To be called when changing a composition
        into actual text. Unlike the old code path, deletes the composition first, then inserts
        the text, triggering the normal insertion code path and events. This is helpful because
        it means the inserted text will be truncated by the <input> element, for example.
        (WebCore::Editor::confirmCompositionWithoutDisturbingSelection): Added.
        (WebCore::Editor::setComposition): Added. To be called when changing the composition.
        Takes parameters for the underlines and selection. Unlike the old code path, this passes
        a flag down that indicates the inserted text is part of a composition. This is helpful
        because we don't send the event that will cause the <input> element to do truncation.
        It's also a better API for future improvements to our input method handling.
        (WebCore::Editor::revealSelectionAfterEditingOperation): Updated for name change.
        (WebCore::Editor::setIgnoreCompositionSelectionChange): Ditto.
        (WebCore::Editor::compositionRange): Added. Needed now that the composition is not
        stored as a Range.
        (WebCore::Editor::getCompositionSelection): Added.

        * editing/TypingCommand.h:
        * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertText):
        Added an insertedTextIsComposition parameter, and don't send the BeforeTextInsertedEvent
        if it's true.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Replaced the Macintosh-specific
        call to setMarkedTextRange with a call to the new Editor::clear().

        * page/Frame.h:
        * page/Frame.cpp:
        * page/FramePrivate.h:
        * page/mac/FrameMac.mm:
        Removed the marked text code. It was streamlined and moved to Editor, except for the
        Mac-specific code, which was moved into WebKit.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm: Removed some now-unneeded marked text code.
        (-[WebCoreFrameBridge markedTextNSRange]): Updated for name/API change.

        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Updated marked text code for name changes, and also
        streamlined the code a bit for the case where there is no composition.
        (WebCore::InlineTextBox::paintCompositionBackground): Name change.
        (WebCore::InlineTextBox::paintCompositionUnderline): Ditto.

        * rendering/RenderTextControl.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::finishText): Added. Helper function shared by the
        (WebCore::RenderTextControl::text):
        (WebCore::getNextSoftBreak):
        (WebCore::RenderTextControl::textWithHardLineBreaks):

        * platform/CharacterNames.h: Added newlineCharacter.

        * dom/Range.h: Remove the now-unneeded version of toString that converts <br>
        elements into newlines.
        * dom/Range.cpp:
        (WebCore::Range::toString): Changed this to use a Vector<UChar> instead of
        a String so it will not have pathological reallocation performance, and removed
        the <br> feature.
        (WebCore::Range::pastEndNode): Made this return 0 when there is no start node.
        This bit of extra robustness guarantees you can't do a null dereference if the
        start node is 0 and the end node is not. Not sure this case really exists.

        * page/ContextMenuController.cpp: (ContextMenuController::contextMenuItemSelected):
        Removed a semi-bogus use of Range::toString(true). The right function to use here
        is plainText().

        * bridge/EditorClient.h: Removed obsolete markedTextAbandoned function.

        * WebCore.exp: Updated for above changes. 

2007-09-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam and Geoff.

        <rdar://problem/5304000>
        Windows Safari doesn't always call NPP_SetWindow() for NPAPI plugins.
        
        This does two things:
        
        1. Makes sure that the plug-in get the correct initial size.
        
        2. Always updates the size of the HWND, even if the widget size didn't change. This is because
        the widget size can be different before the HWND has been created.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2007-09-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof, Sam, Adam, Hyatt, Darin.

        - <rdar://problem/5480234> JS setTimeout function requires a second argument
        - Removed check for number of arguments in setTimeout to behave like other browsers.
        - Added layoutTest setTimeout-no-arguments.html

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):

2007-09-13   Dave Hyatt  <hyatt@apple.com>

        Some minor Windows font improvements before I make the larger changes.
        
        Reviewed by aroben, weinig

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        Don't use the currently selected font in the HDC when passing priority code pages to MLANG.  Make
        sure to use ACP code pages instead so that there won't be any confusion regarding traditional vs.
        simplified chinese, etc.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):
        Rewrite containsCharacters so that it isn't glyph-dependent (since CG doesn't shape, this call is
        rejecting fonts that it shouldn't).  Re-implement this method in terms of MLang and use code page
        testing.
        
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        Add some comments to explain the additional item in the items array.
       
        (WebCore::UniscribeController::shape):
        Fix up the missing glyph check when doing uniscribe shaping.  Only wgDefault matters as far as doing
        font fallback.
        
2007-09-13  kuchhal  <kuchhal@yahoo.com>

        Reviewed, tweaked and landed by Anders.

        <rdar://problem/5461153> 
        http://bugs.webkit.org/show_bug.cgi?id=15143
        Crash seen on Windows
        
        Null check frame before calling Frame::settings.
        
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):

2007-09-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Implement the FileChooser for the WebKit/Gtk+ port by using
        the GtkFileChooserDialog and g_path_get_basename to get the
        basename for the current filename.


        * WebCore.pro:
        * platform/gdk/FileChooserGdk.cpp: Added.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::~FileChooser):
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Move the "string" functions from the TemporaryLinkStubs.cpp
        to LocalizedStringsGdk.cpp and implement them using the text
        from the win port and glib-i18n (gettext).

        * platform/gdk/LocalizedStringsGdk.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::unknownFileSizeText):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-09-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        EventHandlerGdk::createDraggingClipboard must succeed otherwise an
        ASSERT is hit. Add Clipboard stubs for the Gdk/Gtk+ port and
        instantiate ClipboardGdk from the EventHandlerGdk to make the ASSERT
        go away. In contrast to the Windows and Mac port this clipboard is not
        inheriting CachedResourceClient. This was proposed by Oliver.

        * WebCore.pro:
        * page/gdk/EventHandlerGdk.cpp:
        * platform/gdk/ClipboardGdk.cpp: Added.
        (WebCore::ClipboardGdk::ClipboardGdk):
        (WebCore::ClipboardGdk::~ClipboardGdk):
        (WebCore::ClipboardGdk::clearData):
        (WebCore::ClipboardGdk::clearAllData):
        (WebCore::ClipboardGdk::getData):
        (WebCore::ClipboardGdk::setData):
        (WebCore::ClipboardGdk::types):
        (WebCore::ClipboardGdk::dragLocation):
        (WebCore::ClipboardGdk::dragImage):
        (WebCore::ClipboardGdk::setDragImage):
        (WebCore::ClipboardGdk::dragImageElement):
        (WebCore::ClipboardGdk::setDragImageElement):
        (WebCore::ClipboardGdk::createDragImage):
        (WebCore::ClipboardGdk::declareAndWriteDragImage):
        (WebCore::ClipboardGdk::writeURL):
        (WebCore::ClipboardGdk::writeRange):
        (WebCore::ClipboardGdk::hasData):
        * platform/gdk/ClipboardGdk.h: Added.

2007-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Corrections missed in previous revision

        * platform/Cursor.h:
        * platform/win/CursorWin.cpp:
        (WebCore::loadCursorByName):

2007-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fixing 
            <rdar://problem/5018591> Windows doesn't have a standard vertical text cursor
            <rdar://problem/5224996> Add zoom in and zoom out cursors

        Added SharedCursor for CursorWin so we can correctly track lifetime of custom/image
        based cursors, such as the vertical text and zooming cursors.

        * platform/Cursor.h:
        (WebCore::SharedCursor::SharedCursor):
        (WebCore::SharedCursor::~SharedCursor):
        (WebCore::SharedCursor::nativeCursor):
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::loadCursorByName):
        (WebCore::loadSharedCursor):
        (WebCore::pointerCursor):
        (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):
        (WebCore::moveCursor):
        (WebCore::verticalTextCursor):
        (WebCore::progressCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):

2007-09-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen

        <rdar://problem/5478577> - Further improve cold launch time with Icon Database changes

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open): Store the directory and full path for later usage and access in the API, respectively
          Move the makeAllDirectories() call to the background thread.
        (WebCore::IconDatabase::IconDatabase): Don't set up the timer here...
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Create the timer on demand
        (WebCore::IconDatabase::iconDatabaseSyncThread): makeAllDirectories() here where it's not as expensive
        (WebCore::IconDatabase::cleanupSyncThread): Cleanup the directory as well as full path

        * loader/icon/IconDatabase.h: m_syncTimer becomes an OwnPtr, and we add the database directory
          as a member to set it on the main thread and act with it on the background thread

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

        Reviewed by Tristan.

        <rdar://problem/5469868> 
        GoogleDocs: A hang occurs when applying list styling to a selection in a <table>
        
        When list insertion moves selected paragraphs into list items, it relies on 
        the selection preservation code inside moveParagraphs to iterate over the 
        selected paragraphs.  If a selection is ever restored incorrectly (before
        the original, or inside the original) list insertion will go into an infinite loop.
        
        In this hang, a table was selected and the selection preservation code incorrectly
        restored a selection, placing it inside the table.
        
        The bug was that a TextIterator, when being used for selection preservation, must
        emit a character between every VisiblePosition in the Range used to create the
        iterator.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Renamed the boolean that we use for 
        selection preservation.  It used to be m_emitForReplacedElements because
        we believed that replaced elements were the only case where TextIterators
        should have emitted differently when used for selection preservation.
        (WebCore::TextIterator::handleReplacedElement): Ditto.
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero): Represent the 
        position before block tables, but only if we are emitting for selection 
        preservation.
        (WebCore::TextIterator::shouldEmitSpaceBeforeAndAfterNode): We should emit 
        a space before and after block tables if we are emitting for selection 
        preservation (because we have VisiblePositions before and after them).
        (WebCore::TextIterator::handleNonTextNode): Use a renamed variable.
        * editing/TextIterator.h: Made shouldEmitSpaceBeforeAndAfterNode a member
        function, because whether or not we emit spaces before and after a block
        table depends we're emitting for selection preservation.

2007-09-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5464998> REGRESSION (9A543): Using Sort 
        options takes you back to search screen on zappos.com

        The current mechanism for preserving form elements across removes 
        did not work in the case where the input was moved by the parser to 
        be out of scope of the form. This fixes that problem by having the 
        parser keep track of the preserve boolean rather than the current 
        form element.

        * dom/Tokenizer.h:
        (WebCore::Tokenizer::isHTMLTokenizer): New function.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Get rid of 
        m_preserveAcrossRemove.
        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::isMalformed): Get rid of 
        m_preserveAcrossRemove.
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::removedFromTree): Ask the parser 
        if it is currently handling residual style rather than asking the 
        form if it wants to preserveAcrossRemove.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser): New boolean to initialize.
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Set 
        m_handlingResidualStyleAcrossBlocks to true at the beginning and 
        false at the end.
        * html/HTMLParser.h:
        (WebCore::HTMLParser::isHandlingResidualStyleAcrossBlocks):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::isHTMLTokenizer):
        (WebCore::HTMLTokenizer::htmlParser):

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

        Fix compilation in some configurations for patch I reviewed and missed
        this option on.

        * platform/qt/CursorQt.cpp:
        (WebCore::Cursor::Cursor):

2007-09-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher and Kevin Decker

        <rdar://problem/5367045> - Launch time regression due to accessing resource from a different bundle

        When the default icon was moved from WebKit to WebCore, we had to access an entirely new bundle on launch which
        measurably increased time during launch accessing the disk.

        Instead of moving it back to the WebKit bundle, lets make launch time even faster by compiling in the icon.

        * Resources/urlIcon.tiff: Removed.

        * WebCore.xcodeproj/project.pbxproj: Removed urlIcon.tiff

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon): Compile in the icon data here.

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

        Always specify that slider thumbs are small when painting with SafariTheme

        This is the only size we support.

        Reviewed by Sam.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSliderThumb):

2007-09-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5474753> - ASSERT in IconDatabase ReadySQLStatement

        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLStatement): This is a LOG_ERROR situation, not really an ASSERT situation

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

        Don't ask SafariTheme to draw focus rings around text controls

        We do this ourselves.

        Reviewed by Oliver.

        * rendering/RenderThemeSafari.cpp:

2007-09-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5475639> and http://bugs.webkit.org/show_bug.cgi?id=15185 -
        Prevent two WebKits from fighting over the database schema in the future in case it ever changes again

        By telling the "older schema" WebKit to simply close itself and not bother to do any icon related stuff
        if the database schema is newer, we prevent the possibility of an older webkit run side-by-side with a newer
        WebKit causing icon database issues.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename): Rev the icon database filename to be "WebpageIcons.db"  The name is
          more appropriate for what is actually stored in the file, and since we're already not converting v5 to v6 icons, 
          making this leap now makes sense and gives us a good "future-proof" baseline
        (WebCore::isValidDatabase): Change the validity check to be "less then" instead of "not equal to" - the
          "greater than" case is now handled in performOpenInitialization()
        (WebCore::IconDatabase::performOpenInitialization): If the schema version is greater than the current, then
          close the database as to not conflict with the newer version.  Also noted that the integrity check failure 
          should actually close the sql database, not the icondatabase
        (WebCore::IconDatabase::syncThreadMainLoop): If termination has already been requested, skip straight to cleanup
        (WebCore::IconDatabase::cleanupSyncThread): More correctly set the "sync thread running" flag to false here,
          as the thread can now decide to exit on its own

2007-09-12  Mike Fenton <mike@staikos.net>

        Reviewed by George Staikos.

        Patch from Mike Fenton to allow custom cursors.

        * platform/qt/CursorQt.cpp:

2007-09-11  Kevin Decker <kdecker@apple.com>

        Reviewed by Oliver Hunt.

        Fixed: <rdar://problem/5472402> crash due to infinite recursion in expandUseElementsInShadowTree on SVG from wikipedia

        * ksvg2/svg/SVGUseElement.cpp: Added SVG_EXPERIMENTAL #ifdef for expandUseElementsInShadowTree().
        (WebCore::SVGUseElement::buildPendingResource): Ditto.
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements): Tweaked an ASSERT to not fire on non-experimental builds.
        * ksvg2/svg/SVGUseElement.h: Added SVG_EXPERIMENTAL #ifdef for expandUseElementsInShadowTree().

2007-09-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Fix for <rdar://problem/5473046> - Crash when resetting all icons

        Originally I'd written the "reset all icons" to be synchronous on the main thread, but it
        was decided that it should be async since it involved I/O.  Turns out it needs to be... both!
        Synchronous removal of all in-memory records of icons, and then continue and clean up the 
        on-disk database on the background thread.

        Also, it turns out that resetting all the page url retain counts should *not* be part of 
        "reset all icons" because it breaks various contracts the API makes about maintaining retain counts.

        The problem that occured here was removing all the icons, then all the history items that were 
        removed as part of "Reset Safari..." would try to release their icon, but their icon doesn't exist
        anymore.

        We get around this by simply leaving the in-memory page url records and retain counts alone - they
        are still wiped from disk.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons): Clear in-memory records of all icons then tell the thread to
          wipe the on-disk tables
        (WebCore::IconDatabase::removeAllIconsOnThread): Only do the disk cleanup - in-memory maintenance is
          handled on the main thread
        (WebCore::IconDatabase::cleanupSyncThread): Now that it's possible for new "icons to be written to disk"
          to appear while on-disk deleting is occuring, let the cleanup procedure perform 1 final write *after*
          it does the remove all icons
        * loader/icon/IconDatabase.h: Removed unused lock and condition

        * loader/icon/PageURLRecord.cpp:
        (WebCore::PageURLRecord::setIconRecord): Allow setting a NULL icon record, so a PageURLRecord can be
          cleared as part of removeAllIcons()

2007-09-11  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by David Harrison.
        
        <rdar://problem/5467203> CrashTracer: [USER] 1 crash in Mail at <unknown binary>: WebCore::Range::startContainer const

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::addRange):
        (WebCore::SelectionController::setSelectedRange):
        Added a check to make sure the passed in Range* value is not null
        before performing operations on it.

2007-09-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/5458246> 
        GoogleDocs: A hang occurs when applying list styling to selection that contains a <HR>
        
        List insertion moves selected paragraphs into list items, and relies on the selection
        preservation code inside moveParagraphs to iterate over the selected paragraphs.
        When list insertion would try to listify a paragraph that came after a list item 
        containing an <hr>, the selection preservation code would set an incorrect ending 
        selection because of a TextIterator bug, and we would try to listify the same 
        paragraph over and over.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Pass range compliant equivalents to
        the Range constructor here.  The position [hr, 0] is not a valid DOM Range endpoint 
        for example.
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitSpaceForNode): Added.
        (WebCore::TextIterator::handleNonTextNode): Emit a space to represent a horizontal rule,
        since it has VisiblePositions before and after it, but only for TextIterators used for
        selection preservation, so innerText will be unaffected.

2007-09-11  Ada Chan  <adachan@apple.com>

        <rdar://problem/5472130> Support NTLM authentication via CFNetwork.

        Reviewed by Darin.

        * platform/network/ProtectionSpace.h:
        (WebCore::):
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::createCF):
        (WebCore::core):

2007-09-11  Darin Adler  <darin@apple.com>

        Rubber-stamped by Dave Harrison.

        - fixed pasteboard types here to match WebKit and use constants instead of
          WebKitSystemInterface

        * platform/mac/PasteboardMac.mm: Use constants for all pasteboard type strings.

        * platform/mac/WebCoreSystemInterface.h: Removed wkCreateURLPasteboardFlavorTypeName
        and wkCreateURLNPasteboardFlavorTypeName.

2007-09-11  Sven Herzberg  <sven@imendio.com>

        Reviewed by Mark.

        Remove unnecessary fields in FontPlatformData
        http://bugs.webkit.org/show_bug.cgi?id=15177

        * platform/gdk/FontDataGdk.cpp: removed the destroy code of the fields
        that have been removed
        * platform/gdk/FontPlatformData.h: removed m_fontFace, m_fontMatrix
        and m_options; hask on m_scaledFont
        * platform/gdk/FontPlatformDataGdk.cpp: simplified setFont() by using
        m_scaledFont only; turned the former struct members into local
        variables

2007-09-11  George Staikos  <staikos@kde.org>

        Reviewed by Anders.

        Work around gcc bug with some old gcc versions.

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

2007-09-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej Stachowiak.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15157
          Image defined in background-position: top center gets unexpectedly truncated
          <rdar://problem/5469095>

        Test: fast/repaint/body-background-image.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged): Refined the logic for when the root takes
        over painting the background, to match paintBoxDecorations(). In particular,
        if the root has defined a background, the body should paint its own background.

2007-09-10  David Harrison  <harrison@apple.com>

        Reviewed by Kevin and Tristan.

        Tests added:
        * editing/pasteboard/paste-into-anchor-text.html: Added.
        * editing/pasteboard/paste-table-cells.html: Added.

        Source changes:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        Nil check enclosingAnchor.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeNodeAndPruneAncestors):
        New. Keeps m_firstNodeInserted and m_lastLeafInserted updated.
        
        (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):
        Added a comment.
        
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
        Let ReplaceSelectionCommand::removeNodeAndPruneAncestors() update the nodes.
         
        (WebCore::ReplaceSelectionCommand::doApply):
        Pass originalVisPosBeforeEndBR to shouldRemoveEndBR()
        
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR):
        Don't remove the br if nothing was inserted.
        
        * editing/ReplaceSelectionCommand.h:
        Add VisiblePosition parameter to shouldRemoveEndBR()
        
        * editing/markup.cpp:
        (WebCore::createMarkup):
        Wrap orphan tr element with a table element, just like we were doing
        for tobody elements.

2007-09-10  David Kilzer  <ddkilzer@apple.com>

        Rubberstamped by Kevin Decker.

        No test required since there is no change in functionality.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::BackForwardList): Fix misspelling of DefaultCapacitiy to DefaultCapacity.

2007-09-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele Peterson.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15156
          REGRESSION (r24594-r24668): The bottom of styled <select> button text is clipped out
          <rdar://problem/5464301>

        Test: fast/forms/menulist-clip.html

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::controlClipRect): Use correct coordinates for
        the inner block's content rect.

2007-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin, Sam, Oliver, Geoff, probably others - what a fun one to review!

        <rdar://problem/5471641> - URLs get the wrong icon

        Turns out sqlite3_reset() doesn't clear bindings, so previously bound icons were being
        written out for pages without icons.  Easy fix!

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase): For null icons, manually
          bind NULL - otherwise, the previously bound icon will be written out to disk

        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::bindNull): Access to sqlite3_bind_null
        * loader/icon/SQLStatement.h:

2007-09-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver and Darin.

        <rdar://problem/5468613>
        Using shockwave pages first time after plugin install crashed safari in PluginPing.
        
        Only restore the window proc if the plugin didn't override it.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::stop):

2007-09-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.

        <rdar://problem/5467405> 
        Revert back behavior of -webkit-user-select to fix widget selection problems
        
        Rolled out r25086 and r25057.  I will be re-opening:
        <rdar://problem/5333725> -webkit-user-select: none makes selection difficult
        Which we will either to defer or fix by introducing a new value of -webkit-user-select.
        <rdar://problem/5370059> REGRESSION: Cannot type into edit fields on a form (sccsheriff.org)
        Which we will either defer or fix with Adele's patch that doesn't involve making 
        -webkit-user-select inherited.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectAll):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::canMouseDownStartSelect):
        * page/EventHandler.h:
        * rendering/RenderObject.cpp:
        (WebCore::selectStartNode):
        (WebCore::RenderObject::canSelect):
        (WebCore::RenderObject::shouldSelect):
        (WebCore::RenderObject::draggableNode):
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::):
        (WebCore::RenderStyle::userSelect):
        (WebCore::RenderStyle::setUserSelect):
        (WebCore::RenderStyle::initialUserSelect):

2007-09-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Kevin.

        Fix <rdar://problem/5444866>
        REGRESSION: missing text in Acrobat "Getting Started" screen due to change in load ordering of large resources
        
        Make external scripts loaded using file: wait until all style sheet loads have completed before executing. 
        Fixes a class of problems where there is a dependency between script and stylesheet and results would effectively 
        get randomized based on which order the resources arrived. In Tiger file loads were effectively serialized by
        lower level components, which is why this regressed. 

        Test: http/tests/local/stylesheet-and-script-load-order.html

        * dom/Document.cpp:
        (WebCore::Document::removePendingSheet):
        * dom/Tokenizer.h:
        (WebCore::Tokenizer::executeScriptsWaitingForStylesheets):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::begin):
        (WebCore::HTMLTokenizer::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLTokenizer::notifyFinished):
        * html/HTMLTokenizer.h:

2007-09-08  David Smith  <catfish.man@gmail.com>

        Reviewed by Maciej Stachowiak.
        
        http://bugs.webkit.org/show_bug.cgi?id=15148
        Bug 15148: Poor performance on crazy DOM raytracer
        
        Switch data structures to avoid quadratic behavior.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects): Update for ListHashSet
        (WebCore::RenderBlock::markPositionedObjectsForLayout): Update for ListHashSet
        (WebCore::RenderBlock::insertPositionedObject): Use ListHashSet to avoid expensive uniqueing
        (WebCore::RenderBlock::removePositionedObject): Update for ListHashSet
        (WebCore::RenderBlock::removePositionedObjects): Update for ListHashSet
        (WebCore::RenderBlock::lowestPosition): Update for ListHashSet
        (WebCore::RenderBlock::rightmostPosition): Update for ListHashSet
        (WebCore::RenderBlock::leftmostPosition): Update for ListHashSet
        (WebCore::RenderBlock::rightBottom): Update for ListHashSet
        * rendering/RenderBlock.h: Change m_positionedObjects from DeprecatedPtrList to ListHashSet

2007-09-09  Brady Eidson <beidson@apple.com>

        Rubberstamped by Darin

        pthread_main_np() is a Darwin thing, not a Mac thing

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):

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

        Build fix for Gtk+ by adding WebCore::callOnMainThread to the TemporaryLinkStubs.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::callOnMainThread):

2007-09-08  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        Separate out and implement FileSystem functions,  and stub out the
        icondatabase function for future implementation.

        * WebCore.pro:
        * platform/qt/FileSystemQt.cpp: Added.
        (WebCore::fileExists):
        (WebCore::deleteFile):
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/ThreadingQt.cpp: Added.
        (WebCore::callOnMainThread):

2007-09-08  Mark Rowe  <mrowe@apple.com>

        Build fix for when ENABLE(ICONDATABASE) is not set.

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::~IconDatabase):

2007-09-08  Mark Rowe  <mrowe@apple.com>

        More fixes for the Qt and Gtk builds.

        * WebCore.pro: Update for file changes.
        * loader/icon/IconDatabase.cpp: Include errno.h for EDEADLK.
        * loader/icon/PageURLRecord.h:

2007-09-08  Justin Garcia  <justin.garcia@apple.com>

        Backing my change back in without the changes to VisiblePosition::next 
        and previous that weren't necessary to fix the bug and were causing some
        layout test failures.  Most of the failures appeared to be fixes but I
        want more time to investigate and have to move to on to another task.

        * editing/Selection.cpp:
        (WebCore::Selection::validate):
        * editing/visible_units.cpp:
        (WebCore::endOfWord):

2007-09-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Fix the _NSAutoreleaseNoPool() errors on launch - We were using NSFileManager on the secondary
        thread with no NSAutoreleasePool in place

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::iconDatabaseSyncThread):

2007-09-08  Sam Weinig  <sam@webkit.org>

        Add fix to the correct file.

        * loader/icon/SQLDatabase.h:
        * loader/icon/SQLStatement.h:

2007-09-08  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * loader/icon/SQLStatement.h: Disable boolean conversion warning.

2007-09-08  Brady Eidson  <beidson@apple.com>

        Build fix for non-Mac platforms that use Icon Database

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase): Apparently only Mac has the beauty that is pthread_main_np()

2007-09-08  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Headers used up in WebKit need to be be "private" rather than "project".

2007-09-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5434431> - Asynchronous Icon Database

        The IconDatabase API was originally designed to be fully asynchronous - if an icon wasn't read in from disk
        when you asked for it, you would be notified when it was.

        Safari 2 did writes on a background thread, but reads blocked the main thread.

        The current WebCore implementation using SQLite attempted to get rid of the background thread by defering expensive 
        writes via timers, but falls short in moderate to extreme usage cases

        Time to make the IconDatabase live up to it's fully asynchronous destiny.

        This should -
        - Make the browser instantly usable while converting Safari 2 icons in the background occurs
        - Remedy any UI slowness/blocking when on slow network home directories
        - Remedy random UI slowness, pauses, and stutters do to random I/O occurring at the exact wrong time or under heavy
          disk usage from swapping or other apps on the system
        - Allow certain long-running procedures to be interruptible (Safari 2 import, reading icons in from disk when trying to quit, etc)

        This will have a noticeable effect on current Safari 2 and Safari 3 beta browsers, including icons not appearing in bookmarks, history,
        or the location field the first time they're asked for, as current released Safari's don't properly listen for these async notifations.  
        The second time such a menu or view is brought up, the icon should be there.

        Additionally this includes a SQLite schema change which will be a lot more efficient but will result in the loss of current SQLite icons.
        Converting from Safari 2 style icons will still work.

        WebCore, welcome to multi-threadedness

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::iconLoadDecisionAvailable): Called when an Icon becomes available that was requested by this 
          DocumentLoader (to support the webView:didReceiveIcon: delegate call in WebKit)
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconLoadDecisionAvailable): Called from the DocumentLoaders who get notified - if the FrameLoader 
          ends up not caring because the WebView has transitioned to a new page, nothing occurs.  Otherwise, the FrameLoader possibly
          starts it Icon Loader and possibly sends the webView:didReceiveIcon: delegate call
        (WebCore::FrameLoader::startIconLoader): Instead of "Yes, load the icon now" or "No, don't load it" there is a third possibility -
          "You might be asked to load your icon later."  Add supporting logic for receiving this state, and being called a second time
          when the load decision is finally available.
        * loader/FrameLoader.h:

        * loader/FrameLoaderClient.h: Added "registerForIconNotification" which is a way to tell WebViews "The icon you are interested in might
          become available via the generic WebIconDatabaseDidAddIconNotification instead of a targeted delegate call"
          A WebView can then receive the generic notification and pass on it's own targeted delegate call.

        * loader/icon/IconDataCache.cpp: Removed.
        * loader/icon/IconDataCache.h: Removed.

        * loader/icon/IconDatabase.cpp:
        (WebCore::urlForLogging): Cut a URL down in length for sane logging and debugging
        (WebCore::defaultClient): Return the default, empty IconDatabaseClient incase the API doesn't set one.

        Following block of methods are for the Main thread's usage -
        (WebCore::IconDatabase::setClient):
        (WebCore::makeAllDirectories): Small optimization that checks to see if the entire path exists already, and doesn't try to loop
          through each patch component if the full path is already present
        (WebCore::IconDatabase::open): Makes all directories to the target path and kicks off the background thread - nothing more.
        (WebCore::IconDatabase::close): Signals the thread to quit and waits for it to do so
        (WebCore::IconDatabase::removeAllIcons): Purge the icon database
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::readIconForPageURLFromDisk):
        (WebCore::IconDatabase::iconURLForPageURL):
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::loadDecisionForIconURL): Determine if an icon loader should load now.  If the decision is "maybe later", then
          mark the DocumentLoader to be notified later when the final decision is available.
        (WebCore::IconDatabase::iconDataKnownForIconURL): Determine if the actual image data has been read from disk (or set from the loader) for 
          icon URL in question
        (WebCore::IconDatabase::setEnabled):
        (WebCore::IconDatabase::isEnabled):
        (WebCore::IconDatabase::setPrivateBrowsingEnabled):
        (WebCore::IconDatabase::isPrivateBrowsingEnabled):
        (WebCore::IconDatabase::delayDatabaseCleanup): Restore this method from a year ago, as asynchronous pruning of icons can now occur on a 
          background thread.
        (WebCore::IconDatabase::allowDatabaseCleanup):
        (WebCore::IconDatabase::checkIntegrityBeforeOpening):
        (WebCore::IconDatabase::pageURLMappingCount):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::iconRecordCount):
        (WebCore::IconDatabase::iconRecordCountWithData):
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::~IconDatabase):
        (WebCore::IconDatabase::notifyPendingLoadDecisions): Tell all the registered DocumentLoaders "Hey, we've read in all URL mappings from disk,
          so check to see if you are interested in any of them"
        (WebCore::IconDatabase::notifyPendingLoadDecisionsInternal):
        (WebCore::IconDatabase::wakeSyncThread): Wake the sync thread, if it is idle
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Even though we're on a background thread, we still defer writing out to disk during
          periods of high activity
        (WebCore::IconDatabase::syncTimerFired): Call wakeSyncThread()

        Following block of methods may be used by either thread -
        (WebCore::IconDatabase::isOpen):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::defaultDatabaseFilename):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):

        Following block of methods are used by the secondary thread only -
        (WebCore::IconDatabase::importIconURLForPageURL): For the Safari 2 import procedure - write a URL mapping directly out to disk
        (WebCore::IconDatabase::importIconDataForIconURL): For the Safari 2 import procedure - write an Icon directly out to disk
        (WebCore::IconDatabase::shouldStopThreadActivity): To check and see if the thread should stop what it is doing now to do something
          more important (such as quit, or delete all icons)
        (WebCore::IconDatabase::iconDatabaseSyncThreadStart):
        (WebCore::IconDatabase::iconDatabaseSyncThread): Entry point for the background thread
        (WebCore::databaseVersionNumber):
        (WebCore::isValidDatabase):
        (WebCore::createDatabaseTables):
        (WebCore::IconDatabase::performOpenInitialization): Open and validate the SQLite database, making sure it's schema jives with what
          is expected
        (WebCore::IconDatabase::checkIntegrity):
        (WebCore::IconDatabase::performURLImport): Import all the Page URL -> Icon URL mappings from the database.  Done "1st thing" on startup,
          this is necessary to be able to give the loader decisions about whether or not it should load icons from the network
        (WebCore::IconDatabase::syncThreadMainLoop): Main loop - sleeps until woken up, then does a read cycle and a write cycle until both cycles
          do no work - then it goes back to sleep.
        (WebCore::IconDatabase::readFromDatabase): Reads icons from the database that clients are waiting on
        (WebCore::IconDatabase::writeToDatabase): Writes any changes page -> icon url mappings to disk, as well as any new image data that has 
          been received from the loader
        (WebCore::IconDatabase::pruneUnretainedIcons): Done only once, and only after the first write to the database, this procedure removes all
          icons and page URLs from disk that haven't been retained by any client.  Note that the prune can be delayed by utilizing delayDatabaseCleanup()
        (WebCore::IconDatabase::checkForDanglingPageURLs): Usually part of the prune procedure, prunes any pages who point to icons that no longer exist 
          in the database
        (WebCore::IconDatabase::removeAllIconsOnThread): Completely purge both the on-disk and in memory records of all icons
        (WebCore::IconDatabase::deleteAllPreparedStatements): Part of removeAllIcons and the thread cleanup procedure
        (WebCore::IconDatabase::cleanupSyncThread): Write out any last remaining writes to disk, close the database, and then end the thread
        (WebCore::IconDatabase::imported): Checks the DB to see if the Safari 2 import has occured
        (WebCore::IconDatabase::setImported): Sets the "Safari 2 imported" flag
        (WebCore::readySQLStatement):
        (WebCore::IconDatabase::setIconURLForPageURLInSQLDatabase): This and the following "SQLDatabase" suffixed methods are pretty self explanatory
        (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
        (WebCore::IconDatabase::removePageURLFromSQLDatabase):
        (WebCore::IconDatabase::getIconIDForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::addIconURLToSQLDatabase):
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::removeIconFromSQLDatabase):
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase):
        * loader/icon/IconDatabase.h:

        * loader/icon/IconDatabaseClient.h: Added.
        (WebCore::IconDatabaseClient::~IconDatabaseClient):
        (WebCore::IconDatabaseClient::performImport): Perform the Safari 2 import, implemented by WebKit
        (WebCore::IconDatabaseClient::dispatchDidRemoveAllIcons): Send the API notification
        (WebCore::IconDatabaseClient::dispatchDidAddIconForPageURL): Ditto

        * loader/icon/IconDatabaseNone.cpp: Best attempt to keep non icon-DB platforms building
        (WebCore::IconDatabase::defaultDatabaseFilename):
        (WebCore::IconDatabase::readIconForPageURLFromDisk):
        (WebCore::IconDatabase::loadDecisionForIconURL):
        (WebCore::IconDatabase::iconDataKnownForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::isEnabled):
        (WebCore::IconDatabase::delayDatabaseCleanup):
        (WebCore::IconDatabase::allowDatabaseCleanup):
        (WebCore::IconDatabase::setClient):

        * loader/icon/IconRecord.cpp: Added.
        (WebCore::IconRecord::IconRecord): IconRecord used to be "IconDataCache" - it is merely a container for the url, timestamp, and image for a site icon.
          It is Shared, and therefore ref counted - PageURLRecords are the owning containers.  This is a tricky way to track how many page urls are retaining 
          an IconRecord and therefore tracking when we should try to get rid of one.
        (WebCore::IconRecord::~IconRecord):
        (WebCore::IconRecord::image):
        (WebCore::IconRecord::setImageData):
        (WebCore::IconRecord::loadImageFromResource):
        (WebCore::IconRecord::imageDataStatus): Return whether the image data hasn't been read yet, exists in memory, or is absent (site with no icon)
        (WebCore::IconRecord::snapshot): Returns a snapshot of the icon's data - url, timestamp, and image data - to be written to disk
        * loader/icon/IconRecord.h: Added.
        (WebCore::IconSnapshot::IconSnapshot):
        (WebCore::IconRecord::getTimestamp):
        (WebCore::IconRecord::setTimestamp):
        (WebCore::IconRecord::iconURL):
        (WebCore::IconRecord::retainingPageURLs):

        * loader/icon/PageURLRecord.cpp: Added.
        (WebCore::PageURLRecord::PageURLRecord): PageURLRecord is fundamentally a pairing of a Page URL to an Icon.  It has manual ref counting for the sake
          of "retainIconForPageURL" and "releaseIconForPageURL", and can provide a quick snapshot of it's Page URL -> Icon URL mapping for writing to
          the database
        (WebCore::PageURLRecord::setIconRecord):
        (WebCore::PageURLRecord::snapshot):
        * loader/icon/PageURLRecord.h: Added.
        (WebCore::PageURLSnapshot::PageURLSnapshot):
        (WebCore::PageURLRecord::url):
        (WebCore::PageURLRecord::PageURLRecord::iconRecord):
        (WebCore::PageURLRecord::retain):
        (WebCore::PageURLRecord::release):
        (WebCore::PageURLRecord::retainCount):

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::copy): Added a deep copy method for the purposes of handing icon data across the thread boundary into the icon database
        * platform/SharedBuffer.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::registerForIconNotification):

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::callOnMainThread): Only other IconDatabase utilizing platform - keep their build going

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

        Reviewed by Timothy Hatcher.

        Housekeeping.  No test required.

        * bindings/objc/WebScriptObjectInternal.h: Removed unused file.
        * bindings/objc/WebScriptObjectPrivate.h: Updated copyright statement.

2007-09-07  Justin Garcia  <justin.garcia@apple.com>
        
        Rolling out my changes from r25421 while I investigate the layout test failures
        they caused.
        
        * editing/Selection.cpp:
        (WebCore::Selection::validate):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        (WebCore::VisiblePosition::lastEditablePositionAtOrBefore):
        (WebCore::VisiblePosition::firstEditablePositionAtOrAfter):
        * editing/VisiblePosition.h:
        * editing/visible_units.cpp:
        (WebCore::endOfWord):
        (WebCore::previousWordPosition):
        (WebCore::nextWordPosition):
        (WebCore::startOfLine):
        (WebCore::endOfLine):
        (WebCore::previousSentencePosition):
        (WebCore::nextSentencePosition):

2007-09-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.
        
        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no 
        memory cache, or a very tiny one

        Added a client callback to notify WebKit when the first navigation has
        taken place. "Navigation" here means a transition from one page to 
        another that ends up in the back/forward list.
        
        WebKit Mac uses this notification to grow its cache model under certain
        circumstances.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        * loader/FrameLoaderClient.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::didPerformFirstNavigation): Ah, 
        SVGEmptyFrameLoaderClient, my old friend. 

2007-09-07  Adele Peterson  <adele@apple.com>

        Reviewed by Dave Harrison.

        Fix for <rdar://problem/5428427> Wrong characters are re-converted after doing reconversion with Kotoeri

        Revert change for<rdar://problem/5279521> and add nil checks for the result of TextIterator::rangeFromLocationAndLength
        TextIterator::exitNode shouldn't require the m_lastTextNode to be true, but we can't change that without making the logic in _web_attributedStringFromRange match.
        We'll get that for free when we switch to use TextIterator in _web_attributedStringFromRange.

        * editing/ApplyStyleCommand.cpp: (WebCore::ApplyStyleCommand::applyBlockStyle): Added nil checks.
        * editing/IndentOutdentCommand.cpp: (WebCore::IndentOutdentCommand::indentRegion): ditto.
        * editing/TextIterator.cpp: (WebCore::TextIterator::exitNode): Re-added check for m_lastTextNode before emitting newline.

2007-09-07  Ada Chan  <adachan@apple.com>

        <rdar://problem/5395928> Need to be able to handle context menu item selection by index
        
        Reviewed by Beth.

        * platform/ContextMenu.h: Added method to retrieve context menu item by index
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu): call setPlatformDescription() since that will handle
        adding the MNS_NOTIFYBYPOS style to the context menu.
        (WebCore::contextMenuItemByIdOrPosition): helper method so we don't have to duplicate code
        between itemWithAction() and itemAtIndex().
        (WebCore::ContextMenu::itemWithAction):
        (WebCore::ContextMenu::itemAtIndex):
        (WebCore::ContextMenu::setPlatformDescription): add MNS_NOTIFYBYPOS style to the context menu
        so we will get notified by menu position through WM_MENUCOMMAND when the item is selected.

2007-09-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5057506> Double-clicking after ToDo content doesn't select the paragraph break
        
        * editing/Selection.cpp:
        (WebCore::Selection::validate):
        Moved the code that moves across a paragraph boundary
        when expanding selections by word granularity from
        endOfWord to here.
        In the word and paragraph granularity cases, if the 
        end of the selection is at the end of the last paragraph 
        in the last cell of a block table, expand it so that 
        it ends at the start of the paragraph after the table, 
        instead of just after the table, so that ToDo content 
        gets the same double/tripled click behavior that normal 
        paragraphs get (added two testcases).
        When expanding the selection to include paragraph
        breaks, pass VisiblePosition::next true so that it
        doesn't change editability.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next): Renamed the bool because it's now also
        used to keep non-editable positions non-editable.
        (WebCore::VisiblePosition::previous): Ditto.
        (WebCore::VisiblePosition::lastPositionWithSameEditabilityAtOrBefore):
        Renamed this function and made it also work with non-editable positions.
        (WebCore::VisiblePosition::firstPositionWithSameEditabilityAtOrAfter):
        Ditto.
        * editing/VisiblePosition.h:
        * editing/visible_units.cpp:
        (WebCore::endOfWord): Called the renamed function.
        (WebCore::previousWordPosition): Ditto.
        (WebCore::nextWordPosition): Ditto.
        (WebCore::startOfLine): Ditto.
        (WebCore::endOfLine): Ditto.
        (WebCore::previousSentencePosition): Ditto.
        (WebCore::nextSentencePosition): Ditto.

2007-09-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        <rdar://problem/5089241> - ASSERT and other funky effects in IconLoader with large 404 pages

        There were two problems:
        1 - I originally didn't expect SubresourceLoader to keep pulling in data after it received a 404 response,
            but if the server sends back a complex 404 page, the loader did just that.  That could result in the 
            IconLoader "finishing" twice
        2 - In this case, the long messy 404 page would be committed to the database as image data.  This would 
            result in wasted space on disk, wasted space in RAM, and wasting processor time trying to parse 50k+
            of HTML as image data

        Fix is two parts - 1, monitor the "m_loadIsInProgress" flag and 2, make ::finishLoading() take an actual 
        SharedBuffer argument that is what should be committed to the database so the ResourceHandle is unnecessary

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse): If the response is not valid, commit null data 
        (WebCore::IconLoader::didFail): If we've already finished loading once (the 404 response), don't
          finish again!
        (WebCore::IconLoader::didFinishLoading): Ditto
        (WebCore::IconLoader::finishLoading): Take a SharedBuffer argumnt as the actual data to commit
        * loader/icon/IconLoader.h: Add a SharedBuffer arg to ::finishLoading()

2007-09-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Inline the in-header definitions for non-Mac platforms

        * platform/AutodrainedPool.h:
        (WebCore::AutodrainedPool::AutodrainedPool):
        (WebCore::AutodrainedPool::~AutodrainedPool):
        (WebCore::AutodrainedPool::cycle):

2007-09-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Add some AutoreleasePool and Threading utilities in preparation for the multi-threaded
        fix for <rdar://problem/5434431>

        AutodrainedPool wraps an NSAutoreleasePool and tracks a "cycle" count.  This allows clients
        in WebCore to simply call ::cycle() and after a preset number of iterations the pool will drain
        and recreate the underlying NSAutoreleasePool
   
        Threading utilities include C++ wrappers for pthread mutexes and conditions, as well as a generic
        "callOnMainThread()" function for any non-main thread to use.

        * platform/AutodrainedPool.h: Added.  
        (WebCore::AutodrainedPool::AutodrainedPool): Empty implementations for all non-mac platforms
        (WebCore::AutodrainedPool::~AutodrainedPool): ditto
        (WebCore::AutodrainedPool::cycle): ditto
        * platform/mac/AutodrainedPool.mm: Added.
        (WebCore::AutodrainedPool::AutodrainedPool): 
        (WebCore::AutodrainedPool::~AutodrainedPool):
        (WebCore::AutodrainedPool::cycle): Keep track of number of cycles, and drain/recreate the pool if the
          cycle limit is hit

        * platform/Threading.h: Added.
        (WebCore::Mutex::Mutex): C++ wrapper for pthread_mutex
        (WebCore::Mutex::~Mutex):
        (WebCore::Mutex::lock):
        (WebCore::Mutex::tryLock):
        (WebCore::Mutex::unlock):
        (WebCore::MutexLocker::MutexLocker): Handles automatically locking/unlocking a Mutex (for early returns
          from a function, for example)
        (WebCore::MutexLocker::~MutexLocker):
        (WebCore::ThreadCondition::ThreadCondition): C++ wrapper for pthread_condition
        (WebCore::ThreadCondition::~ThreadCondition):
        (WebCore::ThreadCondition::wait):
        (WebCore::ThreadCondition::signal):
        (WebCore::ThreadCondition::broadcast):
        * platform/mac/Threading.mm: Added.
        (-[WebCoreFunctionWrapper initWithFunction:]): Obj-C implementation of "callOnMainThread"
        (-[WebCoreFunctionWrapper _call]):
        (WebCore::callOnMainThread):

2007-09-07  George Staikos  <staikos@kde.org>

        Fix typo.

        * loader/ProgressTracker.h:
        (WebCore::ProgressTracker::totalPageAndResourceBytesToLoad):

2007-09-07  Qing Zhao  <qing@staikos.net>

        Reviewed by Anders and George.

        Add accessors for these two variables.

        * loader/ProgressTracker.h:
        (WebCore::ProgressTracker::totalPageAndResourseBytesToLoad):
        (WebCore::ProgressTracker::totalBytesReceived):

2007-09-06  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Maciej Stachowiak.
        
        <rdar://problem/5333496> Back button stopped working on sfgate.com (14957)
        
        This fix is specifically targted to address sfgate.com and reuters.com with minimal
        impact to other areas of the frameloader.  It does not cause any regression tests to fail.
        I've added two layout tests: One to detect this particular bug, and one to address
        a secondary issue: if an iframe navigation occurs during onload by a timeout an
        additional history item is added, similarly to firefox.  We tried to match firefox
        more than IE with this fix but did gain a little bit of IE compatability.

        Tests: http/tests/navigation/onload-navigation-iframe-timeout.html
               http/tests/navigation/onload-navigation-iframe.html

        * dom/Document.h:
        (WebCore::Document::processingLoadEvent):
        Return the m_processingLoadEvent boolean so FrameLoader knows
        that the document is in the middle of calling <body onload>
        
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::createdByParser):
        (WebCore::HTMLFrameOwnerElement::setCreatedByParser):
        Added support for a new member variable of frame elements: m_createdByParser.
        This lets us specifically target the fix to only iframes created via JS
        and not in-document.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        Initialize m_navigationDuringLoad to false
        
        (WebCore::FrameLoader::provisionalLoadStarted):
        Determine if the load we're about to start is occuring during
        an onload.
        
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        If the current frameloader is for a child frame, and the navigation is occuring
        during an onload update the current history item rather than adding a new one.
        
        * loader/FrameLoader.h:
        Added a new member variable, m_navigationDuringLoad to track
        the navigation status during the on load, rather than trying to determine
        the status after (which is nearly impossible due to a new runloop spin).

2007-09-06  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Darin.

        The implementation of BackForwardList::clearPageCache() was removed in r21793.
        It's now safe to remove it from the header.

        * history/BackForwardList.h: Removed clearPageCache().

2007-09-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5457844>
        Crash when using mouse wheel with plug-ins disabled.

        Null check the widget.

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

2007-09-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Small tweak.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):

2007-09-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam and Steve.

        <rdar://problem/5459321>
        ADOBE: Safari 3 on Windows is passing bogus values in stream->headers in NPP_NewStream, causing Flash Player to crash.
        
        Serialize the headers into a stream and pass it to NPP_NewStream in stream->headers.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        * plugins/win/PluginStreamWin.h:

2007-09-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15153
          REGRESSION: Assertion failure in FrameView::scheduleRelayout() (m_frame->view() == this)

        Back out the willRemove() part of the previous patch.
        It was incorrect and not needed to fix the bug anyway.

        * dom/Document.cpp: (WebCore::Document::detach): Remove willRemove().

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Put the willRemove() call
        back here where it was originally before the previous fix.

        * history/CachedPage.cpp: (WebCore::CachedPage::clear):
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        (WebCore::Frame::setDocument):
        Added FIXMEs about the fact that we call detach() on the document but not willRemove().

2007-09-05  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Changed the blocked exception log message to match AppKit's blocked exception message.

        * platform/mac/BlockExceptions.mm:
        (ReportBlockedObjCException):

2007-09-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/5457865> REGRESSION (9A527): Safari crashes when opening a page
          that immediately redirects to a PDF

        I don't know how to make an automated test that trips over this.

        The immediate cause of this regression was making a back/forward list entry in
        this case. Earlier, the quick redirect would not results in a separate entry.
        That's possibly a bug too, but it's better to fix the crash first.

        The page cache was putting the document into a strange state: Still attached but
        with the renderer set to 0. There was no good reason to do this, so got rid of it.
        Moved the responsibility to the caller of not calling detach() when moving into
        the page cache. This is more of a frame loader thing than a document thing.

        * dom/Document.cpp: (WebCore::Document::detach): Added assertions that this is
        only called on a document that's attached and not in the page cache. Also moved
        the call to willRemove in here, so that callers can't make the mistake of not
        calling that function. Removed the incorrectly-positioned code that made this
        function do less if it was called on a document in the page cache.

        * history/CachedPage.cpp: (WebCore::CachedPage::clear): Removed the code to handle
        a document with a renderer of 0. There was no need to put the document into this
        state. Any document in the page cache will always be "attached".

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Added a check to prevent
        from calling an unnecessary cancelParsing() on a document that's in the page cache
        and guard the call to detach() with a check of attached(), like all other calls to
        detach() on DOM objects.

        * page/Frame.cpp:
        (WebCore::Frame::setView): Added a missing check of attached(), like all other
        calls to detach() on DOM objects. Also added code to not call detach() on the
        document when it's in the page cache.
        (WebCore::Frame::setDocument): This call site already had the attached() check,
        but was missing the page cache check.

2007-09-05  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        Follow up on my fix for <rdar://problem/5306171>.
        My first patch (r25373) broke svg/custom/stroke-width-click.svg.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        Add currPos.isNotNull() check because positions in non-html content (like svg)
        do not have visible positions, and we don't want to emit for them either.

2007-09-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14685
          <rdar://problem/5349755> text-align affects <select> button but not its drop-down menu

        * platform/PlatformString.h:
        (WebCore::String::defaultWritingDirection):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::defaultWritingDirection): Moved textDirectionForParagraph()
        from RenderMenuList.cpp here.
        * platform/StringImpl.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural): Changed to return 'true'.
        (WebCore::PopupMenu::paint): Changed to use natural directionality for menu
        items.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Use defaultWritingDirection.

2007-09-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        - fixed <rdar://problem/5455457> REGRESSION (9A527-9A535): Colloquy crash on launch in WebCoreScriptDebugger initWithDelegate (with announce.js plug-in installed)

        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject): Ensure that -[WebView
        windowScriptObject] and -[WebFrame windowObject] return null until
        the windowScriptObjectAvailable: delegate method is sent.

2007-09-05  David Harrison  <harrison@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/5306171> Mail: The first return after an attachment in multipart/mixed message is lost

        Test added: editing/selection/toString-1.html
        
        Source changes:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        - Remove outdated and erroneous check for m_lastTextNode.
        - Fix VisiblePosition check to look for line diff. Simple position diff gives the
        wrong answer when the start is table/0 and the current is the first position
        inside the content of the table.

2007-09-04  Brett Wilson  <brettw@chromium.org>

        Reviewed by Maciej Stachowiak.

        http://bugs.webkit.org/show_bug.cgi?id=15072
        Bug 15072: Fix ImageDecoder.cpp to not copy incoming data

        Change ImageDecoder::setData to take a SharedBuffer*.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::bytes):
        (WebCore::RGBA32Buffer::height):
        (WebCore::ImageDecoder::setData):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::decodingHalted):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/png/PNGImageDecoder.h:

2007-09-04  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5271213>, resizing iChat window is slower than in
        Tiger. This patch implements a fast scaling mode that can be used by
        WebViews, e.g., during window resizing.

        Reviewed by John Sullivan

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Frame.cpp:
        (WebCore::FramePrivate::FramePrivate):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::inLowQualityImageInterpolationMode):
        (WebCore::Page::setInLowQualityImageInterpolationMode):
        * page/Page.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::setUseLowQualityImageInterpolation):
        (WebCore::GraphicsContext::useLowQualityImageInterpolation):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setUseLowQualityImageInterpolation):
        (WebCore::GraphicsContext::useLowQualityImageInterpolation):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):

2007-09-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Some SQLite tweaks for debugging
        -In debug builds, track the thread that opened the database and enforce that any statements
         that operate on the SQLDatabase do so from the thread that opened it
        -Track whether or not a transaction is in progress for the SQLDatabase to find cases where
         someone opens a new transaction while there is still one outstanding (a SQLite logic error)

        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::SQLDatabase): 
        (WebCore::SQLDatabase::open): Track the opening thread.  Also, return false if the DB failed to
          open instead of trying to run a PRAGMA on it!
        (WebCore::SQLDatabase::close): Reset the opening thread
        * loader/icon/SQLDatabase.h:
        (WebCore::SQLDatabase::transactionInProgress): 
        (WebCore::SQLDatabase::sqlite3Handle): For access to the raw sqlite3* handle to do a thread
          safety check

        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::prepare): Use the new sqlite3Handle accessor
        (WebCore::SQLStatement::step): Ditto

        * loader/icon/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction): Removed the c'tor form that could automatically
          begin the transaction - never used and shouldn't be in practice!
        (WebCore::SQLTransaction::begin): Maintain the transaction-in-progress flag on the DB
        (WebCore::SQLTransaction::commit): Ditto
        (WebCore::SQLTransaction::rollback): Ditto
        * loader/icon/SQLTransaction.h:

2007-09-04  David Harrison  <harrison@apple.com>

        Reviewed by Maciej and John.

        <rdar://problem/5452675> CrashTracer: [USER] 10 crashes in Mail at com.apple.WebCore: WebCore::Node::nodeIndex const + 6

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        Adjust pos to pos.downstream() after the refNode is calculated, but before the insertion. Doing it earlier
        undid the logic of positionAvoidingSpecialElementBoundary(). The downstream is still needed just to set the
        ending selection.

2007-09-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Fix <rdar://problem/5452112>
        REGRESSION: Initially focused textfield on www.mac.com login page has no insertion point, and doesn't accept typed characters
        
        Use updateLayoutIgnorePendingStylesheets() instead of updateLayout(). We need to have rendering to set input focus.

        Test: fast/forms/focus-style-pending.html

        * dom/Element.cpp:
        (WebCore::Element::focus):

2007-09-04  Girish Ramakrishnan  <girish@trolltech.com>

        Reviewed by Simon.

        Fixed Qt build on Windows

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

2007-09-03  David Harrison  <harrison@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/5456785> REGRESSION (r15963-r15970): Heading text not placed in VoiceOver Item Chooser (15132)

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject title]):
        For headings, return the text under the element instead of nil.

2007-08-20  Oleg Sukhodolsky <son.two@gmail.com>

        Reviewed by Mark.

        WebKitQt/WebCoreSupport should not be added to INCLUDEPATH for gdk-port

        * WebCore.pro:

2007-09-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/5452164> Production build with in symbols directory has no debug info

        Enable debug symbol generation on all build configurations.  Production builds are stripped
        of symbols by Xcode during deployment post-processing.

        * Configurations/Base.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2007-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan and Mark Rowe

        Groundwork for support for monitoring IconDatabase in-memory statistics

        * WebCore.exp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pageURLMappingCount): Stub for now
        (WebCore::IconDatabase::retainedPageURLCount): Ditto
        (WebCore::IconDatabase::iconRecordCount): Ditto
        (WebCore::IconDatabase::iconRecordCountWithData): Ditto
        * loader/icon/IconDatabase.h:

2007-09-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        <rdar://problem/5454704> WebKit seems to get too-narrow widths for "Monotype Corsiva", so lays out incorrectly

        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::determinePitch): Work around NSFont incorrectly reporting Monotype Corsiva as fixed pitch.

2007-09-01  Darin Adler  <darin@apple.com>

        - rolled out fix for bug 12988 because it broke getElementById in a layout test
          I'm working on a new fix.

        * dom/Document.cpp: Rolled out.

2007-09-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        <rdar://problem/5344848> IME is incorrectly used for key events when on non-editable regions

        Adding a new EditorClient method so it is possible to inform WebKit of focus changes.
        Also added new virtual method Node::shouldUseInputMethod to allow us to trivially check
        whether an input method should be used when processing input for the currently focused
        Node.

        * bridge/EditorClient.h:
        * dom/Node.cpp:
        (WebCore::Node::shouldUseInputMethod):
        * dom/Node.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::shouldUseInputMethod):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::shouldUseInputMethod):
        * html/HTMLTextAreaElement.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::setInputMethodState):

2007-09-01  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12988
        First element (in document order) is not returned when other duplicate ID-ed elements were created first

        Reset the element id cache when id's are added or removed and there
        are duplicates for that id.

        Tests: fast/dom/duplicate-ids-document-order.html

        * dom/Document.cpp:
        (WebCore::Document::getElementById):
        (WebCore::Document::addElementById):
        (WebCore::Document::removeElementById):

2007-09-01  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15083
        Some symbols in WebKit do not need to be exported

        Do not export these symbols.

        * dom/QualifiedName.cpp:
        (WebCore::hashComponents):
        * dom/XMLTokenizer.cpp:
        (WebCore::toString):
        (WebCore::getTokenizer):
        * history/HistoryItem.cpp:
        (WebCore::defaultNotifyHistoryItemChanged):
        * platform/Arena.cpp:
        (WebCore::CeilingLog2):
        * platform/graphics/Color.cpp:
        (WebCore::calcHue):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathToCFStringApplierFunction):
        (WebCore::CFStringFromCGPath):
        * rendering/RenderText.cpp:
        (WebCore::isSpaceAccordingToStyle):

2007-08-31  Alice Liu  <alice.liu@apple.com>

        Reviewed by Tim Hatcher.

        Fixed <rdar://problem/5420682> Mail crashes at WebCore::InsertLineBreakCommand::doApply() after dropping a selected image over container's close box

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::show):
        Factored out the code in ::show() that created and styled the elements of the Deletion UI

        (WebCore::DeleteButtonController::createDeletionUI):
        Neglecting to move the append of the deletionUI elements into the same clause that handles the creation
        of them ended up creating multiple elements at were repeatedly appended to the target, resulting in a 
        bloated table deletion UI which was slow to show and hide. 

        * editing/DeleteButtonController.h:
        (WebCore::DeleteButtonController::enabled):
        Restore this function to how it used to be pre-r25305, sans asserts

        * editing/EditCommand.cpp:
        Add disable/enable sandwich when undoing/redoing commands too
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):

2007-08-31  Antti Koivisto  <antti@apple.com>

        Reviewed by Anders.

        Fix <rdar://problem/5452943>
        REGRESSION (r25283): Reproducible crash in HTMLObjectElement::getInstance under guard malloc
        
        Calling updateLayoutIgnorePendingStylesheets() may do arbitrary things to render tree so
        no RenderObjects can be cached over it.

        * html/HTMLEmbedElement.cpp:
        (WebCore::findWidgetRenderer):
        (WebCore::HTMLEmbedElement::getInstance):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::getInstance):

2007-08-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5443936>
        Crash after QT movie completes playback at apple.com/imac
        
        If the plug-in or one of its children have focus, set it to NULL to prevent the web view window from getting the focus, 
        which can cause a layout to happen while in HTMLObjectElement::detach. (This is what we do on the Mac).
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setParent):

2007-08-30  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        Fix for <rdar://problem/5450600> REGRESSION: can't paste in textfield if its in a body that has user-select:none set (affects widgets)

        Test: editing/pasteboard/paste-plaintext-user-select-none.html

        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplacementFragment::insertFragmentForTestRendering):
          Copy the user-select style from the current selection node and apply it so it is considered during the test rendering.
          This is important since we recently changed user-select to be inherited.  When we consider valid VisiblePositions for the test rendering,
          we need to have the correct user-select value that will actually be used for the real insertion.

2007-08-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5423939>
        http://bugs.webkit.org/show_bug.cgi?id=15013
        ASSERTION FAILED !m_inDestructor in WebCore::Shared<WebCore::PluginStreamWin>::ref() on Windows
        
        Protect the stream in case it's destroyed by the plug-in.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didReceiveData):

a2007-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=15122

        * editing/htmlediting.cpp: (WebCore::avoidIntersectionWithNode):
        Change assertion so that it only fires when actually modifying the selection.
        This isn't nearly as helpful, because the old assertion could catch potential
        problems in more cases, but it's not obvious how to do better.

2007-08-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/5430772> REGRESSION(303-310A5) list items do not show with mouse over on istweb.apple.com/quack.apple.com
        
        VC++ treats bitfields as signed members, so Node::m_styleChange would be
        sign extended if it was assigned the value FullStyleChange.  This caused
        style recalculation to stop propagating.  
        
        We work around this VC++ oddity by storing the enum as an unsigned, and
        casting back to StyleChangeType in the getter.
                
        Test: fast/css/hover-affects-child.html

        * dom/Node.h:
        (WebCore::Node::styleChangeType):

2007-08-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.

        <rdar://problem/5368833> 
        REGRESSION: Pasting a triple-clicked line of quoted text at the top of a message adds an extra, quoted line

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertParagraphSeparator): Added an option for
        using a plain div to hold the new paragraph, instead of a clone of the previous
        block.
        * editing/CompositeEditCommand.h:
        * editing/InsertParagraphSeparatorCommand.cpp: Ditto.
        (WebCore::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): Ditto.
        (WebCore::InsertParagraphSeparatorCommand::doApply): Ditto.
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Use a default block element when creating
        new paragraphs, so that empty paragraphs don't contain the block style of the previous
        one.
        Don't expand collapsed brs at the end of inserted content, this was the root of the bug.
        We'd copy <blockquote>hello<br></blockquote><br class="Apple-interchange-newline">
        and get an extra paragraph.  The removed code used to make sure that if the copied 
        selection ends with a paragraph break that is represented in the copied markup by a 
        regular br (not an interchange newline br), that that paragraph break appears in the 
        pasted content, but shouldMergeEnd, which was introduced after this code was written, 
        now takes care of that.
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR): Inserted content should always
        displace placeholder brs, even if that inserted content ends with a br.
        * editing/markup.cpp:
        (WebCore::needInterchangeNewlineAfter): This code failed to add an interchange newline
        if the user copied <div>hello</div><br>, only don't add an interchange newline when
        copying ^hello<br>^<br>, because then the copied paragraph break will already be 
        represented in the copied markup by a br.
        (WebCore::createMarkup):

2007-08-30  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5423900> Seed: safari crashes on submit feedback page in -[WebCoreAXObject isAttachment]

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject isAttachment]):
        Add nil check since element could be detached.

2007-08-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13282
          <rdar://problem/5126392> REGRESSION (NativePopUp): Rightmost character cut off in pop-up menu

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth): When measuring option text, use
        the same WebCore run rounding behavior that is used to draw it in the popup button.

2007-08-30  Riku Voipio  <riku.voipio@iki.fi>

        Reviewed by Dave Kilzer.

        Better ARM defines.

        * platform/DeprecatedString.h: Update comments to reflect the
        change and update test to fit changes to Platform.h.

2007-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix http://bugs.webkig.org/show_bug.cgi?id=14981
          DEBUG builds of WebKit hang videwing Yahoo! Mail messages
          with ~5 MB text attachment

        * rendering/InlineFlowBox.cpp: (WebCore::InlineFlowBox::checkConsistency):
        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::checkConsistency):
        * rendering/RenderText.cpp: (WebCore::RenderText::checkConsistency):
        Put the actual consistency check inside an ifdef. If you need it you can
        turn it on. There's still some function call overhead in builds that don't
        have NDEBUG defined, but that's worth it so we can turn this on and off
        without recompiling the world.

        - small code style improvement to recently changed function

        * editing/TextIterator.cpp: (WebCore::plainTextToMallocAllocatedBuffer):
        Use a typedef and make_pair to make the code dealing with the pair simpler to read.

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix Qt/Gdk build. gcc on Linux at least doesn't like initializing
        variables between jumps with goto ("jump to label foo crosses
        initialization of bar").

        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):

2007-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Antti.
 
        - fix <rdar://problem/5423270> CrashTracer: [USER] 1 crash in Safari at com.apple.WebCore:
          WebCore::plainTextToMallocAllocatedBuffer + 762

        * editing/TextIterator.cpp: (WebCore::plainTextToMallocAllocatedBuffer):
        Check for a malloc failure and exit the function if it failed.

2007-08-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5404329>
        Plugin content starves WM_TIMER events on UI thread (affects idle behavior of app) on http://www.vincent-vella.com/, http://www.sagmeister.com/
        
        Add a tiny delay to invalidation timer to prevent it from starving other timers.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):

2007-08-29  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        * editing/htmlediting.cpp: (WebCore::avoidIntersectionWithNode):
        Fix an assert that was firing for me all the time when doing editing operations.

2007-08-29  Anders Carlsson <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5386098>
        Repro hang with some Flash plugin content (http://dougmccune.com/blog/2007/07/25/coming-to-flexcamp-at-adobe/)
        
        In some cases, Flash ends up starving the main loop by sending a lot of WM_USER + 1 messages. Throttle these
        messages so they won't end up hanging the web browser.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin):
        (WebCore::PluginMessageThrottlerWin::~PluginMessageThrottlerWin):
        (WebCore::PluginMessageThrottlerWin::appendMessage):
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
        (WebCore::PluginMessageThrottlerWin::allocateMessage):
        (WebCore::PluginMessageThrottlerWin::isInlineMessage):
        (WebCore::PluginMessageThrottlerWin::freeMessage):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::wndProc):
        (WebCore::PluginViewWin::determineQuirks):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        (WebCore::PluginViewWin::pluginWndProc):

2007-08-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5436800> REGRESSION: PLT is 1.5% slower due 
        to r24593 and r25098

        In r25098, we only called setCreatedByParser for XML! This patch 
        calls it for HTML too, and takes care of the performance 
        regression.

        * html/HTMLElementFactory.cpp:
        (WebCore::styleConstructor):

2007-08-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.
        
        Fix <rdar://problem/5425951>
        REGRESSION: change to updateLayoutIgnorePendingStylesheets causes SAP Portal page to render wrong
        
        If new nodes have been added or style recalc has been done with style sheets still pending, some nodes 
        may not have had their real style calculated yet. Normally this state gets cleaned when style sheets arrive 
        but in updateLayoutIgnorePendingStylesheets() we need to do full style recalc to get up-to-date style immediatly.
        
        Added a document flag to track if there are any nodes that did not have their real style calculated due to
        pending stylesheets.

        Test: fast/dynamic/style-access-late-stylesheet-load.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        * dom/Document.h:
        (WebCore::Document::setHasNodesWithPlaceholderStyle):

2007-08-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        We disable the DeleteButton UI before applying any editing commands.
        This patch simply moves those disable/enable calls to a more correct place, closer to the actual application of the editing command. 

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::applyCommand):

2007-08-28  Alice Liu  <alice.liu@apple.com>

        fixed <rdar://problem/5420682> Mail crashes at WebCore::InsertLineBreakCommand::doApply() 
                                       after dropping a selected image over container's close box

        Reviewed by Darin and Maciej.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::show):
        (WebCore::DeleteButtonController::hide):
        * editing/DeleteButtonController.h:
        (WebCore::DeleteButtonController::enabled):
        General changes made to DeleteButtonController: when hiding, it's not necessary to clear out 
        the m_containerElement and m_target, especially since to fix this bug we need to keep 
        their values around.  It's sufficient to just detach the container from target.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        Move the selection out of the deletion UI since we don't want to expose the deletion UI to any editing.

        * editing/Editor.cpp:
        (WebCore::Editor::rangeForPoint):
        Move the range out of the deletion UI since we don't want to expose the deletion UI to any editing.

        * editing/htmlediting.cpp:
        * editing/htmlediting.h:
        (WebCore::avoidIntersectionWithNode):
        Moved function that operates on Range from markup.cpp to here
        Added new implementation for function that operates on Selection

        * editing/markup.cpp:
        (WebCore::createMarkup):
        Moved function out of this file to htmlediting.cpp, and renamed to avoidIntersectionWithNode

2007-08-29  David Hyatt  <hyatt@apple.com>

        Fix for 5441281, remove our dependency on cursor rects and drag margins
        in AppKit for a large performance boost on the PLT and iBench.

        Reviewed by darin

        * platform/mac/WidgetMac.mm:
        (WebCore::safeRemoveFromSuperview):
        (WebCore::Widget::addToSuperview):
        Suppress the resetting of drag margins when views are added and removed.

        (WebCore::Widget::setCursor):
        Just use NSCursor's set method to immediately set the cursor.  We no longer
        rely on NSScrollView/NSClipView setDocumentCursor, since that is implemented
        using cursor rects.

2007-08-29  Rick  <rick@writhe.org.uk>

        Reviewed by Tim Hatcher.

        Fix http://bugs.webkit.org/show_bug.cgi?id=14853
        Bug 14853: Incorrect implementation of ArrayImpl's equality operator

        * platform/ArrayImpl.cpp:
        (WebCore::ArrayImpl::operator==):
        Fixed typo so that correct variable is used in equality comparison.

2007-08-29  Peter Kasting  <pkasting@google.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15096
        Move the GIF frame duration minimum check into the various
        ImageSource*.cpp backends and use the same values as
        ImageSourceCG.cpp.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2007-08-29  Peter Kasting  <pkasting@google.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15097
        Make PNGImageDecoder.cpp size its frame buffer vector in its
        constructor, so it never throws decoded image data away no matter
        what order its functions are called in.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):

2007-08-29  Peter Kasting  <pkasting@google.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15104
        Don't double-compensate for sizeof(unsigned) when making a buffer
        overflow check in the GIF decoder.  Now interlaced GIFs don't
        sometimes get nothing/garbage in some of the bottom rows.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):

2007-08-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Update fix landed in r25249 to account for XMLHttpRequest, which can also be EventTargets.

        Tests: http/tests/security/listener/xss-XMLHttpRequest-addEventListener.html
               http/tests/security/listener/xss-XMLHttpRequest-shortcut.html

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::putValueProperty): Use the Window object associated with document's frame, not the active Window.
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction): ditto
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::document): Expose Document member so bindings can access the correct frame.

2007-08-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5424866> Bottom portion of any Web Clip widget appears transparent

        Restore the previous behavior, creating plug-ins on attach, for WebKit plug-ins. Netscape plug-ins
        are still created during the first layout.
        
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getInstance):
        Only call layout if the renderer doesn't have a widget.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::getInstance):
        Likewise.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldUsePlugin):
        Update for enum change.
        
        * loader/FrameLoaderTypes.h:
        Add ObjectContentNetscapePlugin and ObjectContentOtherPlugin.
        
        * page/mac/WebCoreFrameBridge.h:
        Get rid of the enum here, we can use the one in FrameLoaderTypes.h
        
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        Only create the plug-in if it's not a Netscape plug-in.
        
        (WebCore::RenderPartObject::layout):
        Fix indentation.
        
2007-08-28  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5415006> Command Left in a To Do causes caret to disappear

        The selection was ending up inside non-editable content at the To Do Options
        arrow image, rather then at the editable position just to the left of that image.
        The problem was that startPositionForLine looked only at line boxes, and there
        is no linebox for the editable position at the far left of a To Do, which is
        a table. Addressed by having startPositionForLine use table offset 0 instead
        of the first VisiblePosition inside the table.
        
        Found and fixed the similar case with option-left (move by word position).
        
        Test cases:
        * editing/selection/mixed-editability-8.html: Added.
        * editing/selection/mixed-editability-9.html: Added.

        Source changes:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyMovingLeftBackward):
        
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        (WebCore::VisiblePosition::stayInEditableContentLeft):
        (WebCore::VisiblePosition::stayInEditableContentRight):
        Factored stayInEditableContentLeft() and stayInEditableContentRight()
        out of previous() and next().
        
        * editing/VisiblePosition.h:
        Declare stayInEditableContentLeft() and stayInEditableContentRight().

        * editing/visible_units.cpp:
        (WebCore::previousWordPosition):
        (WebCore::nextWordPosition):
        (WebCore::startOfLine):
        (WebCore::endOfLine):
        (WebCore::previousSentencePosition):
        (WebCore::nextSentencePosition):
        Call stayInEditableContentLeft() or stayInEditableContentRight(), as 
        appropriate, so prevent crossing from editable content into
        uneditable content.
        
        (WebCore::startPositionForLine):
        Use table offset 0 instead of the first VisiblePosition in the table.
        
2007-08-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5443453> Decreasing history expiration time from 1 year to 1 week can lead to long hang while icon database syncs

        Perform the sync inside a SQLite transaction.  This drops the time taken for the sync from over 90s to under half a second in the
        extreme case of over 90,000 URLs being pruned.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncDatabase):

2007-08-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5437983> Loading history containing 100,000 entries adds 20s to Safari's startup

        Add a new constructor for HistoryItem that initializes the alternate title.  This prevents WebHistoryItem
        in WebKit from having explicitly set the display title, which triggers a history item changed notification
        to be posted, for each history item loaded.

        * WebCore.exp:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:

2007-08-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5298296> XMLHttpRequest readyState 3 & responseText buffer issues
        
        Add a shouldContentSniff flag to ResourceLoader and ResourceHandle and have XMLHttpRequest 
        pass in false when creating its subresource loader.
        
        * WebCore.exp:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::loadNow):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::load):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2007-08-27  Steve Falkenburg  <sfalken@apple.com>

        Added getter for committedFirstRealDocumentLoad.
        
        Reviewed by Maciej.

        * loader/FrameLoader.h: Added committedFirstRealDocumentLoad.
        (WebCore::FrameLoader::committedFirstRealDocumentLoad): Added.

2007-08-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Fix <rdar://problem/5433144>
        REGRESSION: Unable to click "Select" link at Expedia for car rentals
        
        javascript: URLs need special handling when serializing. Escaping them like
        normal attribute values can do bad things. Try hard to not escape anything,
        escape quote characters only if really necessary. Try to match Firefox.

        Test: fast/innerHTML/javascript-url.html

        * editing/markup.cpp:
        (WebCore::urlAttributeToQuotedString):
        (WebCore::startMarkup):

2007-08-27  David Hyatt  <hyatt@apple.com>

        Fix for 5441224, micro-optimizations to improve the PLT by 1%.

        Reviewed by Darin

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::requiresLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isBody):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::renderArena):
        (WebCore::RenderObject::isRoot):

2007-08-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15091
          Crash in RenderBlock::skipWhitespace during layout <rdar://problem/5439631> 

        Test: fast/replaced/applet-disabled-positioned.html

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createRenderer): Changed to call
        RenderObject::createObject(), which accounts for style.

2007-08-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix for <rdar://problem/5433726>
        Mail crash at WebCore::Frame::styleForSelectionStart() when deleting a selection in a HTML message (http://www.yahoo.com/)

        Test: editing/style/temporary-span-crash.html

        * page/Frame.cpp:
        (WebCore::Frame::styleForSelectionStart):
        Temporary span created here might not have renderer if document has style sheet that makes it display:none.
        Set display:inline explicitly in spans style attribute. This temporary span does not need to get its display 
        value from actual document style sheets. Null check the renderer too to be sure.


2007-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele.

        Fix for <rdar://problem/5426142>

        Use the EventTarget's frame when creating the EventListener.

        Tests: http/tests/security/listener/xss-JSTargetNode-onclick-addEventListener.html
               http/tests/security/listener/xss-JSTargetNode-onclick-shortcut.html
               http/tests/security/listener/xss-window-onclick-addEventListener.html
               http/tests/security/listener/xss-window-onclick-shortcut.html

        * bindings/js/JSEventTargetNode.cpp:
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::JSEventTargetNodePrototypeFunction::callAsFunction):
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):

2007-08-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15077
          REGRESSION: Cannot drag selected text out of a background window

        * manual-tests/drag-out-of-background-window.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag): Added missing coordinate
        conversion.

2007-08-25  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14848
        DOM table rules are not updated when changed

        On a dynamic rules attr change, mark the table cells and
        their ancestors (up to and including the table tag) as
        changed.

        Tests: fast/table/rules-attr-dynchange1.html
               fast/table/rules-attr-dynchange2.html

        * html/HTMLTableElement.cpp:
        (WebCore::isTableCellAncestor):
        (WebCore::setTableCellsChanged):
        (WebCore::HTMLTableElement::parseMappedAttribute):

2007-08-25  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=15073
        <rdar://problem/5426557> REGRESSION: Can no longer drag text from textareas
        
        Test: fast/forms/drag-out-of-textarea.html

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControlInnerBlock::nodeAtPoint):
          Only restricts hit testing if the placeholder text is visible.
        * rendering/RenderTextControl.h: (WebCore::RenderTextControl::placeholderIsVisible): Added. 

2007-08-25  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

        Part 2 of http://bugs.webkit.org/show_bug.cgi?id=14967.
        Eliminate all remaining implicit conversions of wtf::Vector<T> to T*.  Where code was
        previously checking that the Vector's data pointer was non-NULL, check !Vector::isEmpty()
        instead.

        * bindings/js/kjs_navigator.cpp:
        (KJS::PluginBase::cachePluginDataIfNecessary):
        * loader/mac/LoaderNSURLExtras.m:
        (suggestedFilenameWithMIMEType):
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::pauseScheduledEvents):
        (WebCore::FrameView::resumeScheduledEvents):
        (WebCore::FrameView::dispatchScheduledEvents):
        * platform/mac/PlugInInfoStoreMac.mm:
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):

2007-08-25  Mitz Pettel  <mitz@webkit.org>

        Rubber-stamped by Adam Roben

        - remove unused file

        * platform/win/MouseEventWin.cpp: Removed.

2007-08-25  Jasper Bryant-Greene  <m@ni.ac.nz>

        Reviewed by Oliver Hunt.

        Set paintingDisabled to true in Cairo's GraphicsContext constructor
        when passed a null PlatformGraphicsContext.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):

2007-08-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15056
          REGRESSION (r21472): Digg Podcasts Episodes Render "Digg" counter incorrectly

        Covered by fast/parser/residual-style-close-across-n-blocks.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): If the
        residual style was closed before anything else in the block (so it does
        not apply to anything inside the block) avoid creating an empty element for
        it inside the block.

2007-08-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14972
          Moving cursor down in contentEditable section fails if styled line-height:1em

        Test: editing/selection/move-by-line-003.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates): Changed hit testing so that each
        line is tested for hits between its overflow top and the next line's overflow top.
        This matches RenderBlock::positionForCoordinates.

2007-08-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14792
          <rdar://problem/5367763> REGRESSION: Copy inserts carriage return in middle of selection

        Test: editing/pasteboard/newlines-around-floating-or-positioned.html

        * editing/TextIterator.cpp:
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode): Do not emit newlines around
        floating or positioned blocks. This behavior seems to match WinIE's.

2007-08-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5432254> GoogleDocs: A hang occurs when applying list style to selected table
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): If the position
        that marked the start of the range to delete has been removed from the
        document, and it was inside the node that holds the position that marks
        the end of the range to delete, don't remove any children of that node,
        because we don't know how many to remove.  For example, if the end is
        [a, 5] and the start was in some descendant of a and was removed, don't
        remove any of the children of a.  We will now refuse to remove some content
        incorrectly, but that's less dangerous than removing content incorrectly.
        Long term we need to update these positions as we remove content from the 
        document, but that seems like a more risky change.  Added a testcase.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::modifyRange): If the end of the selection to 
        modify is just after a table, and if the start of the selection is inside 
        that table, the last paragraph that we'll want modify is the last one inside 
        the table, not the paragraph that contains the table itself. Adjust 
        startOfLastParagraph here to avoid infinite recursion.

2007-08-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5430165>
        REGRESSION: Dynamically loaded images fail to load

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        Initialize the m_elementIsProtected member.

        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        Assert that the element is not protected.
        
        (WebCore::HTMLImageLoader::setLoadingImage):
        If the image is not null, protect the element. Otherwise, unprotect it.
        
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        Unprotect the element here.

        (WebCore::HTMLImageLoader::protectElement):
        (WebCore::HTMLImageLoader::unprotectElement):
        New methods which protect and unprotect the element.
        
        * html/HTMLImageLoader.h:

2007-08-24  Kevin McCullough  <kmccullough@apple.com>

        - Updated ChangeLog

2007-08-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt and Adele.

        Fix for <rdar://problem/5417203> Google Gmail 1.0 widget - unread 
        count is missing

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray): Calc pref widths for 
        our cells, if needed.

2007-08-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        <rdar://problem/5437038> 1 credential object leaked for each call to credentialWithUser:password:persistence
        - Use initWithUser instead of credentialWithUser because credentialWithUser leaks.

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]):

2007-08-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        <rdar://problem/5433236> Print preview of empty txt file crashes Safari
        Fix: Adjust computePageRectsForFrame to always return at least one 
        page rect, even if document height is zero.

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.h: Added Vector& parameter to 
        computePagesRectsForFrame; changed its return type to void.
        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame): Reordered the loop that inserts
        rects into the vector.

2007-08-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver

        Fix <rdar://problem/5393758>
        Crash in WebCore::FontData::platformInit
        
        Null check glyph page. 
        
        If font has somehow failed to initialize it is possible to have null glyph page. Based on
        crash dumps this seems to occasionally happen when running Mail under guard malloc. 
        
        No test case, I don't know how to get to this state.

        * platform/FontData.cpp:
        (WebCore::FontData::FontData):
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):

2007-08-24  George Wright  <george.wright@collabora.co.uk>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=15071
        [cairo] SVG skews are incorrect

        Fix Cairo implementation of AffineTransform::shear so that shearing is
        done in the correct direction.

        * platform/graphics/cairo/AffineTransformCairo.cpp:
        (WebCore::AffineTransform::shear):

2007-08-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        If necessary, re-set the window proc after each call to NPP_SetWindow. This is to ensure that
        our window proc is always run even if a plug-in subclasses the window and replaces the window proc.
        
        Also, make sure that the default window proc is of type ASCII so we can eliminate the 
        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::setNPWindowRect):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::PluginViewWin):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        (WebCore::PluginViewWin::pluginWndProc):

2007-08-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele.

        <rdar://problem/5156801> REGRESSION: Crash at DeleteSelectionCommand::doApply() when deleting table content

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Use a RefPtr
        for node.  If the node to be removed contains the selection, and if
        the next node to be removed (nextNode) is inside the deletion UI,
        removing node will remove nextNode from the document.  nextNode is
        a RefPtr, but node isn't and when nextNode falls out of scope the node
        that node points to will be destroyed and we'll end up using a stale pointer.
        Long term we should probably just disable the deletion UI before editing 
        operations because the undo of the removal of node in the situation 
        described above relies on the presence of the deletion UI, but it isn't 
        present because its added and removed in a non-undoable way.

2007-08-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14899
          !d->m_view->needsLayout() in Frame::paint() (Causes assert)

        WebKit copies the width and height attributes of an <embed> to its
        nearest <object> ancestor. This used to be done in updateWidget(), but
        that could lead to the document being dirty right after layout and
        before painting. The patch moves the copying of the attributes to when
        the <embed> is inserted into the document or its attributes change.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        (WebCore::HTMLEmbedElement::attributeChanged):
        * html/HTMLEmbedElement.h:
        * manual-tests/bugzilla-14899.html: Added.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2007-08-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Oliver.

        <rdar://problem/5422410>
        http://bugs.webkit.org/show_bug.cgi?id=15019
        REGRESSION (r25124-r25140): New posts and hot topics won't show at mobile01.com

        Remove the call to checkCallImplicitClose(). Calling it in loadPlugin is bad for two reasons:
        
        1. It could cause onload to be dispatched even when the page has subresources that are still
        loading, such as images.
        
        2. Now that loadPlugin is called during layout, it could cause onload to be dispatched during
        layout, which can execute javascript and do pretty much anything while the render tree is in an
        inconsistent state.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadPlugin):

2007-08-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5430584>
        http://bugs.webkit.org/show_bug.cgi?id=15053        
        WebKit does not check Windows Registry HKEY_CURRENT_USER for NPAPI plugin locations
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginsFromRegistry):
        (WebCore::PluginDatabaseWin::getPluginsInPaths):

2007-08-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/5418891> CrashTracer: [USER] 1 crash in Mail at -[WebViewEditor webView:shouldInsertText:replacingDOMRange:givenAction:]

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): We're reusing the topBlockquote
        variable.  Null it out first.  If there is no new topBlockquote and we don't null
        it out first, we'll assume that there was a new one and crash.

2007-08-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adele.

        - rdar:5423067 Reapplyingthe change but only when the text area is in focus.

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

2007-08-21  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5249757> Painting of JPGs in WebKit is too slow.

        Use a new Leopard API for fast tiling of images.  We only use this API
        when the whole image is being tiled and when the current CGImageRef to tile
        has a size that matches the size of the whole image.

        We can optimize border-image in the future by adding a cache of the 9
        sub-images.

        Reviewed by darin

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

2007-08-22  Kevin McCullough  <kmccullough@apple.com>

        - Rolling back since I need to update some layouttests this change breaks.

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

2007-08-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof, Adam, Hyatt, Maciej and Oliver.

        - In order to match the behavior of the other major browsers, selection is moved to the end of the text value when a change occurs to the contents of a text area instead of remembering the location of the selection.
        - <rdar://problem/5423067> gmail is super annoying when trying to add a new name to the TO, CC or BCC fields

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

2007-08-21  Adam Roben  <aroben@apple.com>

        Build fix for Mac

        Keep FrameView::layoutIfNeededRecursive Windows- and Gtk-only for now
        (sadly). This will have to wait until we merge ScrollView and FrameView.

        Reviewed by NOBODY.

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

2007-08-21  Adam Roben  <aroben@apple.com>

        Fix an ASSERT when using Find in Page

        Reviewed by Darin.

        No test possible.

        * bridge/win/FrameWin.cpp:
        (WebCore::imageFromSelection): Make sure to update layout before
        painting so we don't hit an ASSERT in painting code (Frame::selectionImage
        in FrameMac.mm does this as well).

2007-08-21  Adam Roben  <aroben@apple.com>

        Made FrameView::layoutIfNeededRecursive available to all platforms

        Currently it's only used on Gtk+ and Windows.

        Reviewed by Darin.

        * page/FrameView.cpp: Removed #ifdef.
        * page/FrameView.h: Ditto.

2007-08-21  Adele Peterson  <adele@apple.com>

        Build fix for release build.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):

2007-08-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15010
          <rdar://problem/5423956> REGRESSION (r25000-r25065): Table rendering broken by a recent nightly

        Test: fast/table/max-width-integer-overflow.html

        Avoid integer overflows when dealing with maximum widths by
        1) using floating point arithmetic when summing or multiplying column max widths
        2) capping max widths at INT_MAX / 2

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcPrefWidths):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):

2007-08-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben

        WebCore part of fix for: 
        <rdar://problem/5417777> WebKit focus ring color no longer matches system focus rings
        
        Adele wrote the first version of this patch. No test cases added because I made sure the 
        layout tests are unaffected. Two additional bug fixes were made in passing, but neither 
        of them had any effect on any known real-world case, and both were too difficult to write 
        test cases for to be worthwhile.

        * WebCore.exp:
        added symbols for these new functions so WebKit can call them
        
        * WebCore.xcodeproj/project.pbxproj:
        updated for new file
        
        * platform/graphics/mac/ColorMac.h: Added.
        New file to hold the increasing amount of Mac-specific color stuff.
        
        * platform/graphics/Color.h:
        removed #if PLATFORM(MAC) code, which is now in ColorMac.h
        
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeRGBAFromNSColor):
        new static function to convert an NSColor object to an RGBA32 struct
        (WebCore::colorFromNSColor):
        new public function to convert an NSColor object to a WebCore-style Color object
        (WebCore::focusRingColor):
        Uses (cached) systemFocusRingColor instead of hardwired values, unless usesTestModeFocusRingColor is true,
        in which case it uses the old hardwired color
        (WebCore::usesTestModeFocusRingColor):
        returns value of global var
        (WebCore::setUsesTestModeFocusRingColor):
        sets value of global var
        (+[WebCoreControlTintObserver controlTintDidChange]):
        Uses [NSColor keyboardFocusIndicatorColor] to set systemFocusRingColor; don't compile if COLORMATCH_EVERYTHING
        is set since we don't know what it would take to satisfy this state.

        * bindings/objc/DOMRGBColor.mm:
        now includes ColorMac.h to account for moved declarations
        * bridge/mac/WebCoreAXObject.mm:
        ditto
        
        * page/mac/FrameMac.mm:
        (WebCore::convertAttributesToUnderlines):
        now uses new colorFromNSColor. The old code was swapping G & B, but it didn't matter in practice because
        this function is only used to convert the color of an input manager's marked text underline, which is always black
        
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setBaseBackgroundColor:]):
        now uses new colorFromNSColor. The old code was swapping G & B, but it didn't matter in practice because
        this function is only called with a grayscale color perhaps containing an alpha value
                
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        just updated a comment

2007-08-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15023
          REGRESSION (r21113-r21143): JavaScript tooltip rendering bug

        Test: fast/repaint/layer-visibility.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasVisibleContent): Cache the layer's
        rects when it changes to visible.

2007-08-20  Kevin Decker <kdecker@apple.com>

        Reviewed by Anders.

        Fixed: <rdar://problem/5325262> REGRESSION (Tiger-Leopard): PictureTalk plug-in doesn't work

        The problem was that this particular plug-in handles "text/ptf", but WebCore wasn't giving the plug-in a chance to load
        any type with "text/"

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Allow plug-ins to once again use "text/" MIME types, but only if the MIME
        type is not "text/plain". Disallowing plug-ins to use text/plain prevents plug-ins from hijacking a fundamental type 
        that the browser is expected to handle, and also serves as an optimization to prevent loading the plug-in database in 
        the common case.

2007-08-20  Adam Roben  <aroben@apple.com>

        Remove workarounds for <rdar://problem/5386894> now that it's been fixed

        Reviewed by Darin.

        Tests: fast/loader/local-svg-parsed-as-svg.svg
               fast/loader/local-xhtml-parsed-as-xhtml.xhtml

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Removed hackish
        workaround.

2007-08-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5412988>
        Crash when visiting http://www.rockonflash.com/blog/?p=58
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):
        Just return if the plugin view hasn't been inserted in the hierarchy yet.

2007-08-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Zack.

        Do not define svg as ImageMIMEType if we can use ksvg2.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):

2007-08-19  Adam Roben  <aroben@apple.com>

        Gtk+ build fix.

        * platform/gdk/TemporaryLinkStubs.cpp: Removed const.

2007-08-19  Adam Roben  <aroben@apple.com>

        Fix <rdar://5395835> REGRESSION (r24527): Context menu for edit fields is missing "Font & Writing Direction"

        The problem was that ContextMenuItem::setSubMenu was just copying the
        HMENU from the ContextMenu passed in on Windows, but that HMENU was
        later getting destroyed when the ContextMenu went out of scope.

        I added a new ContextMenu::releasePlatformDescription method that is
        used in setSubMenu instead. I think an ultimately better design would
        be for setSubMenu to take ownership of the ContextMenu that's passed in
        (as should insertItem and appendItem), but I decided to be conservative
        and just make the changes needed to fix the bug.

        Reviewed by Darin.

        No test possible.

        * platform/ContextMenu.h: Added releasePlatformDescription.
        * platform/gdk/TemporaryLinkStubs.cpp: Added stub implementation.
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::releasePlatformDescription): Implemented, though
        it's never called on this platform.
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::releasePlatformDescription): Ditto.
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::setSubMenu): Call releasePlatformDescription
        since we need to take ownership of the HMENU.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::releasePlatformDescription): Implemented.

2007-08-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed <rdar://problem/5198272> REGRESSION: PLT 1.5% slower due to r21367 (change to start frames with empty documents)
        
        There were three main cuases of extra time due to creating the initial empty document:
        
        1) Creating an extra WebHTMLView and swapping it for a new one for each frame created.
        2) Parsing the minimal markup for the initial document's contents.
        3) Clearing the Window object an extra time and dispatching the corresponding delegate method.
        
        The WebCore part of the fixes addresses 2 and 3.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init): Don't parse "<html><body>" for the initial
        empty document; it turns out not to be needed.
        (WebCore::FrameLoader::dispatchWindowObjectAvailable): Don't 
        dispatch the delegate if we haven't created a ScriptInterpreter yet.
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded): Dispatch the window object
        delegate when we first create the interpreter, since that is now done
        lazily.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::committingFirstRealLoad): Helper for WebKit
        to know when to reuse a WebHTMLView.

2007-08-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15008
          ASSERTION FAILED: !firstLineBox() == !lastLineBox() setting content on image

        Test: fast/images/text-content-crash-2.html

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::setImage): Added a check that the renderer is an
        image.
        (WebCore::HTMLImageLoader::updateFromElement): Ditto.
        (WebCore::HTMLImageLoader::notifyFinished): Ditto.

2007-08-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - WebCore part of fix to scrollbar suppression hack for Leopard

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): Suppress scrollbars earlier, so it happens
        before any potential view swap.

2007-08-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.
        
        Fix <rdar://problem/5403773>
        CrashTracer: [USER] 88 crashes in Safari at com.apple.WebCore: WebCore::RenderTableSection::paint + 846

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removePositionedObjects):
        
        Fix crash in http://www.infobae.com/interior/home.html
        Positioned objects removed from m_positionedObjects would in some cases not get added back to any 
        positioned objects list. Adding objects happens in block layout but since layout was not invalidated 
        correctly in removePositionedObjects() it would not get invoked. As a result some positioned objects 
        would stay in layout dirty state leading to crashes and other bad things.
        
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        
        Add needLayout() guard to eliminate this class of crashes from release builds. 
        Assert commented out for now since one existing layout test can't handle it.

2007-08-17  Kevin Decker <kdecker@apple.com>

        Code change by Darin, landed and reviewed by me.

        Fixed: <rdar://problem/5252836> Adobe Help Viewer: Japanese characters in the Help Tree structure are shown as garbage
        Added fast/encoding/namespace-tolerance.html test.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Slightly loosen the charset decoder heuristic by tweaking it
        to ignore namespaces. This restores compatibility to documents which (1) use namespace prefixes on HTML elements
        (2) specify a non-latin charset and (3) contain non-latin characters.
        
        Added fast/encoding/namespace-tolerance.html test.
        
2007-08-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dave Hyatt.
        
        <rdar://problem/5379040>
        REGRESSION (Tiger-Leopard): ADOBE: Safari calls NPP_SetWindow with bad values sometimes

        Instantiate plug-ins during the first layout instead of doing so when creating the renderer.
        This ensures that the plug-in widget will have a correct initial size.
        
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getInstance):
        Force a layout if the plug-in doesn't have an instance.
        
        (WebCore::HTMLEmbedElement::attach):
        Pass true to updateWidget, causing it to only create a widget if it won't be a plug-in.
        
        * html/HTMLIFrameElement.cpp:        
        (WebCore::HTMLIFrameElement::attach):
        Pass false to updateWidget, this will only create subframes anyway.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::getInstance):
        Force a layout if the plug-in doesn't have an instance.
        
        (WebCore::HTMLObjectElement::attach):
        Pass true to updateWidget, causing it to only create a widget if it won't be a plug-in.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadPlugin):
        Get the size from the renderer and pass it to the client.
        
        * loader/FrameLoaderClient.h:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::createPlugin):
        Update declarations.
        
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::setWidget):
        No need to mark the renderer as dirty here.
        
        * rendering/RenderPartObject.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        Add a parameter, onlyCreateNonPlugins. If this is true the widget 
        will only be created if it's not a plug-in.
        
        (WebCore::RenderPartObject::layout):
        Call updateWidget here if m_widget is 0, causing the plug-in to be instantiated.
        
2007-08-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14189
        <rdar://problem/5319511> REPRODUCIBLE CRASH: Canvas createPattern(canvas, ...) crashes on Windows (14189)

        Ensure that we actually retain the CG pattern correctly.

        Credit to Henry Mason <hmason@mac.com> for finding the cause of this.

        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::~CanvasPattern):
        (WebCore::CanvasPattern::createPattern):
        * html/CanvasPattern.h:
        (WebCore::CanvasPattern::platformImage):

2007-08-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix. (Maybe?)
        
        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources):

2007-08-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5378473> 
        REGRESSION: Undoing a deletion that is part of an open typing command fails to reinsert the caret
        
        We recently made Undo of a series of deletes select all of the 
        characters that were deleted, not just the most recently deleted
        character.  But the code that did this set a new starting selection 
        after every delete, even those that were part of an open typing 
        command that started with character insertions or forward deletes, 
        operations that when undone, remove the starting selection being 
        set from the document.
        
        After this change we only set a new starting selection if the open typing
        command was opened by a backward delete. The new behavior matches TextEdit.  
        We don't do something similar or forward deletes because TextEdit opens 
        and closes a new typing command on forward delete (added a FIXME about this).

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand): Initialize 
        m_openedByBackwardDelete.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Added a FIXME about
        how in TextEdit, forward deletes open and close a new typing command.
        (WebCore::TypingCommand::doApply): Set m_openedByBackwardDelete
        appropriately.
        (WebCore::TypingCommand::deleteKeyPressed): Only set the starting
        selection if this delete is the first one in an open typing command
        or one in a series of deletes that opened the typing command.
        * editing/TypingCommand.h: Added m_openedByBackwardDelete.

2007-08-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Hyatt.
        
        Tweaked the cache eviction model to better balance between live and 
        dead resources.
        
        For the sake of avoiding evictions during the PLT, the old model 
        required the sum of dead and live resources to grow to twice the cache 
        capacity before evicting, and would then evict dead or live down to 0 
        if necessary. This was a too-high high water mark, which would nullify 
        much of the value of eviction, and a too-low low water mark, which 
        would nullify much of the value of the LRU-SP strategy.
        
        This patch changes the model in 3 ways.
        
        1. The new model for dead resources is a flexible window with a fixed 
        minimum and maximum. The dead resource window is big when live resource 
        pressure is small, and vice versa. This has the immediate advantage of
        cutting the high water mark by up to 50%. It also enables the following
        tunable optimizations in future patches:
            a. A dead resource limit of 0 for clients who want that. (Just set
            the fixed maximum to 0.)
            b. A much higher low water mark. (Just set the fixed minimum to, 
            say, 25% of the cache's capacity.)
            c. A much lower high water mark for users who browse simple pages
            in one tab. (Just set the fixed maximum to, say, 50% of the cache's
            capacity.)
        
        I plan to make the changes that actually take advantage of these 
        tunable optimizations in another check-in.

        The new model won't hurt the PLT because it will notice the PLT's low
        live resource size, and up the dead resource capacity in response. For
        the same reason, the new model should establish a good balance in 
        real-world use.
        
        2. Live resource eviction is now based on size(), not encodedSize().
        So, a page with lots of large, encoded images will start evicting 
        resources, if necessary, even before all the images paint. This allows 
        you to more accurately stipulate an exact high water mark.
        
        3. When pruning, prune to a small percentage below capacity, to avoid
        just having to prune again immediately.

        Layout tests pass. PLT shows no regression.

        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow): Updated for rename.

        * loader/Cache.cpp: Implemented the algorithm explained above.
        * loader/Cache.h: Removed explicit tracking of decoded data size, since
        it was unused.

        * loader/CachedResource.cpp: ditto on tracking of decoded data size

2007-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5415029> In Mail, a crash occurs at WebCore::Node::isDescendantOf()
          when attempting to delete a selection in a table

        The bug was caused by createMarkup trying to operate on a range that
        has an endpoint in the delete button DOM, because it removes that DOM
        during its operation! Still working on a regression test -- it's hard
        to make the kind of bad selection that's needed with the DOM, so I might
        have to use the eventSender.

        * editing/DeleteButtonController.h: Made some of the identifiers private.
        We can make them public if we need to use them. Added a getter function
        for the container element so we can figure out if a given node is inside
        the DOM added for the delete button.

        * editing/markup.cpp:
        (WebCore::moveEndpointsBeforeNode): Added. General purpose helper function
        that moves endpoints of a range to before a given node -- we do this before
        removing the delete button, so the endpoint is where the delete button was,
        rather than having an endpoint that's not in the document.
        (WebCore::createMarkup): Always return empty string, not null string.
        Get the document by calling ownerDocument on the range rather than getting
        the document of the commonAncestorContainer. That's because we need to
        get at the delete button before calling commonAncestorContainer. Call
        moveEndpointsBeforeNode to move the range endpoints out of the delete
        button interface before calling disable() which will remove it from the
        DOM if it's in there. Added an early return for the case where commonAncestor
        is non-0. If this happens, we would crash later because pastEndNode would
        not be in the tree. This change alone would prevent the crash, but we'd get
        bad markup, so we need the moveEndpointsBeforeNode fix. Added null checks
        for the frame to the range version as in the single-node version so this
        won't crash immediately on documents that are not in a frame. For the
        single-node version, added a check if a ndoe of 0 and a node inside the
        delete button user interface, and return the empty string for those cases.

2007-08-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/5378847> After creating and removing a ToDo, the caret disappears as soon as I start to type
        
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): A whitespace text node inserted by Mail
        when a ToDo is removed is completely removed by deleteInsignificantWhitespace,
        and since it contains the text insertion position, insertion fails.
        Save the position before the node where text insertion will occur,
        and if that node is removed, use the saved position for insertion.

2007-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/5413488> REGRESSION: every DOM element is about 40
          bytes bigger because it has a Timer

        Moved the timer to the document from the element.

        * dom/Document.h: Made frame() inline. Added updateFocusApperanceSoon(),
        cancelFocusAppearanceUpdate(), m_updateFocusAppearanceTimer,
        clearXMLVersion(), and updateFocusAppearanceTimerFired(). Also made
        everything that was previously protected be private instead.
        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_updateFocusAppearanceTimer.
        (WebCore::Document::updateFocusAppearanceSoon): Added. Starts timer.
        (WebCore::Document::cancelFocusAppearanceUpdate): Added. Stops timer.
        (WebCore::Document::updateFocusAppearanceTimerFired): Added. If the
        focused node is a focusable element, then calls
        updateFocusAppearance(false) on it.

        * dom/Element.h: Removed default value of the boolean parameter to
        updateFocusAppareance. Removed needsFocusAppearanceUpdate(),
        setNeedsFocusAppearanceUpdate(), updateFocusAppearanceTimerFired(),
        stopUpdateFocusAppearanceTimer(), m_updateFocusAppearanceTimer, and
        m_needsFocusAppearanceUpdate. Added
        updateFocusAppearanceSoonAfterAttach() and cancelFocusAppearanceUpdate().
        * dom/Element.cpp:
        (WebCore::ElementRareData::ElementRareData): Added initializer for
        m_needsFocusAppearanceUpdateSoonAfterAttach.
        (WebCore::Element::Element): Removed initializers for
        m_updateFocusAppearanceTimer and m_needsFocusAppearanceUpdate.
        (WebCore::Element::attach): Updated code that starts the focus
        appearance timer to instead call updateFocusAppearanceSoon() on the
        document.
        (WebCore::Element::detach): Replaced call to
        stopUpdateFocusAppearanceTimer with call to cancelFocusAppearanceUpdate.
        (WebCore::Element::focus): Added check for node that's already focused,
        to match the logic that's in the derived classes. This makes it safe for
        us to remove the override in the derived classes. Also replaced the code
        that called setNeedsFocusAppearanceUpdate(true) with code to set the
        rare data flag m_needsFocusAppearanceUpdateSoonAfterAttach and added a
        call to cancelFocusAppearanceUpdate() in the case where there's no focus
        appearance update.
        (WebCore::Element::blur): Replaced call to
        stopUpdateFocusAppearanceTimer with call to cancelFocusAppearanceUpdate.
        (WebCore::Element::cancelFocusAppearanceUpdate): Added. Sets
        m_needsFocusAppearanceUpdateSoonAfterAttach to false, and then calls
        cancelFocusAppearanceUpdate() on the document, but only if the element
        is the focused node of the document.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): Replaced code that sets
        m_xmlVersion directly with a call to a new inline clearXMLVersion()
        function.
        (WebCore::HTMLDocument::setCookie): Replaced use of m_policyBaseURL with
        policyBaseURL().
        (WebCore::HTMLDocument::createTokenizer): Replaced uses of m_frame with
        frame().
        (WebCore::HTMLDocument::determineParseMode): Replaced code that sets
        pMode and hMode directly with calls to setParseMode and setHTMLMode.
        Replaced use of m_styleSelector with styleSelector().

        * html/HTMLInputElement.h: Removed now-unneed override of focus().
        Removed default value of the boolean parameter to updateFocusAppareance.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::updateFocusAppearance):
        Pass the restorePreviousSelection boolean through -- while it's ignored,
        it no longer has a default value.

        * html/HTMLTextAreaElement.h: Removed now-unneed override of focus().
        Removed default value of the boolean parameter to updateFocusAppareance.
        * html/HTMLTextAreaElement.cpp: Ditto.

        * WebCore.exp: Removed the Document::frame() symbol, since it's now inline.

2007-08-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Fix <rdar://problem/5388936>
        Crash while setting display:none for a table cell with selection
        
        Super class destroy() could (through some selection code in removeChild()) trigger section recalc 
        in middle of RenderTableCell::destroy(), cleaning section dirty bit. This would later crash in 
        layout since cell grid would still have refence to the dead cell.
        
        Ensure table sections are dirty when leaving destroy method.
        
        I can't figure out tests for row and section changes but they look like
        they could crash in similar way as cell.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::destroy):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::destroy):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::destroy):

2007-08-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5389696> leak of 32-byte NSData object (and more?) in WebIconDatabase code path with each refresh of http://www.apple.com
        
        * platform/graphics/BitmapImage.h: Use RetainPtr for m_nsImage and m_tiffRep
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::initPlatformData): No need to do anything now
        (WebCore::BitmapImage::invalidatePlatformData): Simplify
        (WebCore::BitmapImage::getTIFFRepresentation): Use RetainPtr to avoid leaks
        (WebCore::BitmapImage::getNSImage): Use RetainPtr to avoid leaks

2007-08-15  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix <rdar://problem/5094895> REGRESSION (r19094): JavaScript timers don't
          work inside showModalDialog; caret also doesn't blink

        * platform/Timer.h: Added fireTimersInNestedEventLoop.
        * platform/Timer.cpp:
        (WebCore::TimerBase::fireTimers): Added code to exit if the timersReadyToFire
        is cleared. This indicates that someone fired the timers in the nested event
        loop, so we should not fire any more timers ourselves.
        (WebCore::TimerBase::fireTimersInNestedEventLoop): Added. Sets timersReadyToFire
        to 0 so we won't return early and do nothing if the shared timer first. Then
        calls updateSharedTimer() so the shared timer will get scheduled as needed based
        on any pending timers.

        * page/Chrome.cpp: (WebCore::Chrome::runModal): Call
        fireTimersInNestedEventLoop before calling runModal on the client.

        * manual-tests/modal-dialog.html: Added a test that uses a timeout.
        * manual-tests/show-modal-dialog-test.html: Fixed a typo.

2007-08-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=14971
        REGRESSION: cannot select reporter's e-mail in bugzilla

        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDragExtendSelect): Allow drag-selecting inside
        a -webkit-user-select:ignore region.

2007-08-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Rolling back in. I made a silly mistake in XMLTokenizer that caused 
        this patch to crash SVG tests. It's fixed now!

        Refactor of change for <rdar://problem/5404899> REGRESSION: Mail 
        crash in WebCore::FontFallbackList::fontDataAt() after dragging 
        image into text multiple times

        The original fix that I made last night prevents the pending style 
        sheet count from being incremented until the element is in the 
        document. This fix prevents the style sheet from loading at all 
        until it is in the document.

        Here is the fix.
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::insertedIntoDocument): Call process.
        (WebCore::StyleElement::removedFromDocument): This can be reverted 
        to its original state before my patch last night.
        (WebCore::StyleElement::process): childrenChanged is now called 
        process. Return early if your not in the document.
        (WebCore::StyleElement::createSheet): Revert change from last 
        night. The inDocument check is now in caller childrenChanged.
        * dom/StyleElement.h: insertedIntoDocument() must now accept an 
        element in addition to a document.

        This is an optimization to prevent calling updateStyleSelector() 
        too frequently.
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::finishedParsing):
        (WebCore::HTMLStyleElement::insertedIntoDocument):
        (WebCore::HTMLStyleElement::childrenChanged):
        (WebCore::HTMLStyleElement::sheetLoaded):
        * html/HTMLStyleElement.h:
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        (WebCore::SVGStyleElement::finishedParsing):
        (WebCore::SVGStyleElement::insertedIntoDocument):
        (WebCore::SVGStyleElement::childrenChanged):
        (WebCore::SVGStyleElement::sheetLoaded):
        * ksvg2/svg/SVGStyleElement.h:
        (WebCore::SVGStyleElement::setCreatedByParser):

        This is a name change. Document::stylesheetLoaded() 
        is now Document::removePendingSheet()
        * dom/Document.cpp:
        (WebCore::Document::removePendingSheet):
        * dom/Document.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::sheetLoaded):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::sheetLoaded):
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::~UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::setCSSStyleSheet):

        This is another name change. closeRenderer() is now 
        finishedParsing()
        * dom/Node.h:
        (WebCore::Node::finishedParsing):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::finishedParsing):
        * html/HTMLAppletElement.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLFormControlElementWithState::finishedParsing):
        * html/HTMLGenericFormElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::finishedParsing):
        * html/HTMLObjectElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::popOneBlockCommon):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::finishedParsing):
        * html/HTMLScriptElement.h:
        (WebCore::HTMLStyleElement::setCreatedByParser):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::finishedParsing):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::finishedParsing):
        * ksvg2/svg/SVGElement.h:

2007-08-15  David Harrison  <harrison@apple.com>

        Reviewed by Antti Koivisto.

        <rdar://problem/5411803> Bumpercar crashes when loading a partial URL (FrameLoader::receivedMainResourceError())

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        Nil check for the FrameLoader.

2007-08-14  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5411482> Windows user agent language always returns "en"
        
        Implement defaultLanguage().

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj: Added Language.cpp.
        * platform/win/Language.cpp: Added.
        (WebCore::localeInfo): Added.
        (WebCore::defaultLanguage): Added.
        * platform/win/TemporaryLinkStubs.cpp: Remove defaultLanguage stub.

2007-08-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff and Oliver.

        Fix for <rdar://problem/5267870>
        Mangleme: Reproducible assertion failure in -[WebCoreFrameBridge installInFrame:]

        - Change embed/plugin code path to detach the frame on willRemove instead of detach.
          This matches what frame and iframe do.

        Test: http/tests/misc/embedCrasher.html

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::willRemove):
        * html/HTMLPlugInElement.h:

2007-08-14  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5370059> REGRESSION: Cannot type into edit fields on a form (sccsheriff.org)

        This change makes -webkit-user-select an inherited css property.  For "user-select: none" we were already 
        acting like it was an inheritable property, where we let user-select:text on the children override its parent's user-select:none.
        By making user-select really inherited (instead of inherited for some values), we eliminate the need for crawling up the tree to see 
        if an ancestor has user-select ignore set.

        * page/EventHandler.cpp: (WebCore::EventHandler::canMouseDownStartSelect):
          Now that user-select is inherited, you don't need to walk up the render tree looking for ancestors with user-select:ignore set.

        * css/CSSStyleSelector.cpp: Eliminate SELECT_AUTO.
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSComputedStyleDeclaration.cpp: (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        * rendering/RenderStyle.h:
        (WebCore::): Eliminate SELECT_AUTO.  Make userSelect inherited.
        (WebCore::RenderStyle::userSelect):
        (WebCore::RenderStyle::setUserSelect):
        (WebCore::RenderStyle::initialUserSelect):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::RenderStyle::diff):

2007-08-15  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=14967 part 1 - Eliminate most implicit
        conversions of wtf::Vector<T> to T* by explicitly calling .data()

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::saveState):
        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        (WebCore::KURL::init):
        (WebCore::KURL::decode_string):
        (WebCore::KURL::parse):
        (WebCore::KURL::encode_string):
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis):

2007-08-14  Ricci Adams  <iccir@apple.com>

        Reviewed by Darin, Hyatt.

        - fix <rdar://problem/5407795> -apple-line-clamp should never display less than one line

        * rendering/RenderFlexibleBox.cpp:(WebCore::RenderFlexibleBox::layoutVerticalBox): Use
        max to make sure it never computes a minimum of less than one line.

2007-08-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin, John, Maciej, Oliver, and Tim

        <rdar://problem/5394708> - Crash on launch with corrupt icon database

        The main part of the fix is to not disable SQLite's default level of protection - to leave the sync options at their normal,
        mostly safe levels.  

        But in case lightning strikes at the exact right moment and someone ends up with a corrupt database, add some support code to
        detect that condition and recover from it.  

        This is mainly accomplished by exposing the "PRAGMA integrity_check;" facilities of sqlite through IconDatabase SPI as well as
        running that integrity check if a journal file is detected at launch (a strong indication that the last quit was not clean).
        There's also a method exposed to allow clients to tell the icon database "I suspect something bad happened, please check integrity"

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::checkIntegrityBeforeOpening): Allow clients to suggest an integrity check
        (WebCore::IconDatabase::open): Add a check to see if the journal file for the database exists.  If it does, run the integrity
          check.  Also run the check if a client has suggested it to be necessary.
          If the integrity-check fails, we sadly have to destroy the database and recreate from scratch.
          Also - quite importantly - do not adjust the default sync preferences for the SQLDatabase.  They were an optimization that 
          might have been valid at one time but no longer affects any benchmarks we care about.
        (WebCore::IconDatabase::checkIntegrity): Perform the SQLite integrity_check pragma
        * loader/icon/IconDatabase.h:

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::checkIntegrity): Keep IconDatabaseNone users building
        (WebCore::IconDatabase::checkIntegrityBeforeOpening): Ditto

        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::open): Make a copy of the path string so we don't accidentally mutate anyone else's string on ::close()

        * platform/FileSystem.h: Added. Begin a long-needed platform file system abstraction
        * platform/mac/FileSystemMac.mm: Added.
        (WebCore::fileExists): Check if a file exists
        (WebCore::deleteFile): Delete a file

        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::fileExists):
        (WebCore::deleteFile):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::fileExists):
        (WebCore::deleteFile):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::fileExists):
        (WebCore::deleteFile):

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

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

        Reviewed by Steve.

        Build fix for Windows.

        * html/HTMLFormElement.cpp:

2007-08-14  George Staikos  <staikos@kde.org>

        Only connect the menu signal once.

        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::insertItem):

2007-08-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tim.

        <rdar://problem/5408255> REGRESSION: In Mail, clicking the containing element's UI closebox doesn't delete element

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::show): Use -webkit-user-select:ignore for
        the deletion UI.

2007-08-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5143183>
        Air Mail postmark shows up wrong in Firefox due to use of CSS background-position-x/y
        
        Safari was using non-standard background-position-x/y properties when serializing style, both normal 
        and computed. As a result Safari generated CSS would not render correctly in Firefox. 
        
        Use standard background-position property instead.

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

2007-08-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady and Dr. Harrison.

        Fix typo.  'whitespace' property is spelled 'white-space'.

        * page/inspector/inspector.css:

2007-08-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5404899> REGRESSION: Mail crash in 
        WebCore::FontFallbackList::fontDataAt() after dragging image into 
        text multiple times

        We were crashing because style information was not up-to-date. This 
        patch fixes the problem in two ways:

        Style information was not up to date at the time of the crash 
        because the document thought there was still a pending style sheet. 
        The pending style sheet counter was incremented when a call to 
        cloneNode from Mail cloned a style node with an imported style 
        sheet. Because Mail disables the cache, the style sheet did not 
        load immediately for the cloned node, and we do not check again to 
        see if it has loaded in time to decrement the pending style sheet 
        counter before the crash point. The fix here is only to increment 
        the pending style sheet counter for elements that are already in 
        the document.
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::insertedIntoDocument): If we have a CSS 
        style sheet that is currently loading, increment the pending style 
        sheet counter. This should keep the counter accurate in the case 
        where a style node is cloned and then immediately inserted into the 
        document.
        (WebCore::StyleElement::removedFromDocument): If we have a CSS 
        style sheet that is currently loading, decrement the pending style 
        sheet count. This is required to keep the correct balance, given 
        the change above.
        (WebCore::StyleElement::createSheet): Only addPendingSheet() and 
        checkLoaded() if we are in the document.

        Here is Darin's original fix. It seems worth keeping this fix too. 
        Font style information should not cause a crash if there are still 
        pending style sheets. This is good belt-and-suspenders in case 
        there is another way to run into this bug with a wacky timing 
        issue.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement): Update the font.

2007-08-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14635
        rdar://problem/5340188
        Uploading file with non-ASCII character in path fails

        File upload cannot be tested in DumpRenderTree.

        * html/HTMLFormElement.cpp:
        (WebCore::pathGetFilename): A cross-platform helper that extracts a file name from a path.
        (WebCore::HTMLFormElement::formData): Use the above helper instead of code that doesn't
        work on Windows.

2007-08-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14951
        REGRESSION: page interpreted as UTF-8 because of stray <?xml> after <head>

        Test: fast/encoding/misplaced-xml-declaration.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Only honor XML declaration
        at the very beginning of the file.

2007-08-13  Oliver Hunt  <oliver@apple.com>

        rs=sam

        Correct accidentally modified code.

        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):

2007-08-13  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14746
        <rdar://problem/5401041> REGRESSION: Form state not saved for forms that submit via HTTPS even if they do not contain a password field

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::saveDocumentState): Restore our old behavior that will save form state for secure forms.
          This will also match Firefox behavior.

        * dom/Document.cpp: Removed secureFormAdded(), secureFormRemoved(), hasSecureForm() which are no longer used.
        * dom/Document.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::attach):
        (WebCore::HTMLFormElement::parseMappedAttribute):

2007-08-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5386183> REGRESSION (9A504-9A508): Underline of inline hole is too thin 
        on Japanese DotMac page
        
        Hack the line metrics for the Hiragino font families so that they always allow space for
        the marked text underline.
        
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):

2007-08-13  David Hyatt  <hyatt@apple.com>

        Reviewed by aroben
 
        <rdar://problem/5400446> messed up content on calendar.yahoo.com and my.yahoo.com

        Fix some more bad assumptions about <html> being the first child of the document now that we
        properly support HTML5's model (where a comment node preceding <html> will in fact be its sibling).

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::createHead):

2007-08-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5333725> -webkit-user-select: none makes selection difficult
        
        Let users create selections if they mouse down in a -webkit-user-select:none
        region, just (continue to) disallow selection endpoints in those regions, and
        don't paint those regions as selected if they are fully enclosed by a selection. 
        For example, in xxyyyxx where x is -webkit-user-select:none, a user can mouse down
        between the first two xs and drag across yyy to the second two xs to create a 
        selection xx^yyy^xx.
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectAll): Allow selectAll inside a root
        that has -webkit-user-select:none, because it may contain content that
        is selectable (VisiblePosition and Selection creation will keep Selection
        endpoints out of -webkit-user-select:none regions).
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent): Use canMouseDownStartSelect
        instead of the ambiguously named shouldSelect().
        (WebCore::EventHandler::handleMousePressEventTripleClick): Ditto.
        (WebCore::EventHandler::handleMousePressEventSingleClick): Ditto.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Use canMouseDragExtendSelect.
        (WebCore::EventHandler::selectCursor): Paint an ibeam in -webkit-user-select:none regions,
        because you can click in those regions to create a selection.
        (WebCore::EventHandler::canMouseDownStartSelect): Now fires the selectStart event, and
        returns true in -webkit-user-select: none regions.
        (WebCore::EventHandler::canMouseDragExtendSelect): This is identical to 
        canMouseDownStartSelect because of 12823, even though it seems strange that we would fire 
        the selectStart event here.
        * page/EventHandler.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::draggableNode): Only -webkit-user-select:ignore regions will
        prevent selection creation.
        * rendering/RenderObject.h:

2007-08-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5360748>
        REGRESSION (r21002-r21003): Flash widget sniffer doesn't work (affects iWeb)

        Don't check whether the document is being parsed or not, because the node list
        could be accessed after the document has finished parsing.
        
        * dom/Node.cpp:
        (WebCore::Node::registerNodeList):

2007-08-13  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        no need to update regions that are not visible on the webpage.

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

2007-08-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Sam.
        
        <rdar://problem/5395213> cross-domain access to individual components of location object should be denied.

        * bindings/js/kjs_window.cpp:
        (KJS::Location::put): Add the appropriate cross-domain access checks.

2007-08-12  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5403724> REGRESSION: text inputs are not scrolled to make inline input visible (14912)

        * editing/Editor.h: Made setIgnoreMarkedTextSelectionChange no longer inline.
        It now has a side effect of revealing the selection when you set it to false.
        Added private revealSelectionAfterEditingOperation helper.
        * editing/Editor.cpp:
        (WebCore::Editor::deleteRange): Calls revealSelectionAfterEditingOperation instead
        of calling m_frame->revealSelection directly.
        (WebCore::Editor::replaceSelectionWithFragment): Ditto.
        (WebCore::Editor::insertOrderedList): Ditto.
        (WebCore::Editor::insertUnorderedList): Ditto.
        (WebCore::Editor::increaseSelectionListLevel): Ditto.
        (WebCore::Editor::increaseSelectionListLevelOrdered): Ditto.
        (WebCore::Editor::increaseSelectionListLevelUnordered): Ditto.
        (WebCore::Editor::decreaseSelectionListLevel): Ditto.
        (WebCore::Editor::insertLineBreak): Ditto.
        (WebCore::Editor::insertParagraphSeparator): Ditto.
        (WebCore::Editor::replaceMarkedText): Ditto.
        (WebCore::Editor::revealSelectionAfterEditingOperation): Added. Calls revealSelection,
        unless we are in the ignoreMarkedTextSelectionChange state. If we are in that state,
        we're in the middle of a composite editing operation and we shouldn't try to scroll
        to reveal the selection until the operation is done.
        (WebCore::Editor::setIgnoreMarkedTextSelectionChange): Made no longer inline. If
        changing the state from true to false, then calls revealSelectionAfterEditingOperation.

        * WebCore.exp: Add new entry point for no-longer-inline setter function.

2007-08-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak, Dave Hyatt.
        
        Changed the dead resource LRU-SP algorithm to measure an object's
        total size, not just its encoded size. This will allow us to make 
        better decisions about what data to evict when the cache is small. For 
        example, the PLT can now run with a 16MB cache without fully evicting
        any resources.
        
        (Previously, we had assumed that decoded size would be an OK estimate
        of encoded size, but that is not true of GIF, whose decoded size can be 
        orders of magnitude greater than its encoded size.)
        
        Subtly, destroying a resource's decoded data now increases its recency 
        by moving it to the head of a smaller LRU list. This is slightly odd,
        but, since all resources get the same treatment, it shouldn't hurt 
        the eviction algorithm.

        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow): Make sure that a
        dead resource eviction doesn't happen until we've released all of our
        dead pages. Otherwise, the cache will make terrible decisions about 
        what to evict because all of our dead resources will seem live.

        * loader/Cache.cpp:
        (WebCore::Cache::Cache):
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources): Removed call to 
        removeFromLiveDecodedResourcesList because this happens automatically
        now as a part of the process of changing the resource's decoded size.
        (WebCore::Cache::lruListFor): *** The key change. *** Compute the 
        appropriate LRU list based on total size, not encoded size.
        (WebCore::Cache::dumpLRULists): Added debug logging function to help
        visualize the cache.

        * loader/Cache.h:
        (WebCore::Cache::setDeadResourcePruneEnabled):
        (WebCore::Cache::deadResourcePruneEnabled):

        * loader/CachedImage.cpp: Moved decoded size tracking code from here
        up into the base class. Currently, only CachedImage has a use for that
        functionality, but other subclasses might need it in the future, and
        the base class is already responsible for similar code related to 
        encoded size tracking.
        (WebCore::CachedImage::decodedSizeChanged):
        * loader/CachedImage.h:

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::setDecodedSize): Move us in the LRU-SP list
        just like setEncodedSize does, since decoded size counts now, too.
        (WebCore::CachedResource::setEncodedSize): Changed slightly to match
        the style of setDecodedSize.

        * loader/CachedResource.h:
        (WebCore::CachedResource::decodedSize):

2007-08-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13670
          <rdar://problem/5399619> Table misrender when one of the TDs has width=100%

        Tests: fast/table/100-percent-cell-width.html
               fast/table/percent-widths-stretch.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcPrefWidths): Changed the value used instead of
        0% to avoid division by zero from 1% to less than 0.01%. Removed code that
        added 0.5px to non-percent widths when calculating the scaling factor. The
        latter change is covered by the percent-widths-stretch test, where the new
        results match both WinIE 7 and Firefox 3.

2007-08-11  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - fix <rdar://problem/5266535> REGRESSION: <img> inside <map> no longer allowed in strict mode
          (breaks chemicalelements.com)

        Test: fast/parser/strict-img-in-map.html

        * html/HTMLMapElement.cpp: (WebCore::HTMLMapElement::checkDTD): Removed FIXME saying this
        code is strange, since this code matches the HTML 4 specification almost exactly. Made
        <img> elements allowed even in strict mode and added small comments to clarify what comes
        from the DTD and what is non-standard.

2007-08-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Implement passing events to a subframe. The code is copied from
        the windows port and passSubframeEventToSubframe was removed as it
        is not called and it is not avilable in the windows port as well.

        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):

2007-08-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Lars.

        GdkEventKey::string is not supposed to be used. The length
        of this string is zero for non ascii characters. Use the
        gdk_unicode_to_keyval to convert the keyval to a UChar and construct
        a String. This change makes it possible to input non ascii
        characters.

        * platform/gdk/KeyEventGdk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-08-11  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=14645
        getPropertyValue should be case insensitive
        
        When we get the propertyID for a given string we convert to lowercase.
        
        This also applies to setProperty, removeProperty and others.
        
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):

2007-08-11  Mark Rowe  <mrowe@apple.com>

        Build fix.  Change "#ifdef PLATFORM(GDK)" to "#if PLATFORM(GDK)".

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

2007-08-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Copy the WebFrame::layoutIfNeededRecursive method of the windows port
        to FrameView to be used by the Gtk+ port. Simplify the implementation due
        moving it to the FrameView class.

        Implement the ScrollView::children() method for the Gtk+ port and make it
        available to the FrameView as children() is used within the layoutIfNeededRecursive method.

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutIfNeededRecursive):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:

2007-08-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        To fix text selection make the PlatformMouseEvent set the pressed
        button even when moving the mouse.
        
        Add building of the WebKit::DragClient stubs as they are needed to
        make text selection work.

        * WebCore.pro:
        * platform/gdk/MouseEventGdk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-08-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Maciej.

        <rdar://problem/5360748>
        REGRESSION(r21002-r21003) Flash widget sniffer doesn't work
        
        Add a per-document NodeList counter. When parsing, only call notifyNodeListsChildrenChanged
        if the document has node lists. Also, make sure to reset the cache when the node list count has 
        been 0 and a new node list is registered to avoid any stale cache information.
        
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::addChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::addNodeList):
        (WebCore::Document::removeNodeList):
        (WebCore::Document::hasNodeLists):
        * dom/Node.cpp:
        (WebCore::Node::registerNodeList):
        (WebCore::Node::unregisterNodeList):

2007-08-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5394449> Stop using some Carbon UI APIs for 64 bit

        Disable NPObject use in 64-bit on Mac OS X.

        * Configurations/WebCore.xcconfig: Add a framework search path to the sub-framworks of Carbon.
        * WebCore.xcodeproj/project.pbxproj: Filter out the Frame::windowScriptNPObject() symbol in 64-bit.
        * bindings/objc/DOM.mm:
        (-[DOMElement _NPObject]): Return null in 64-bit.
        * config.h: Set WTF_USE_NPOBJECT to 0 in 64-bit Mac OS X.
        * page/Frame.cpp:
        (WebCore::Frame::cleanupScriptObjects): Add more #if USE(NPOBJECT) blocks where needed.
        * page/Frame.h: Ditto.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::createScriptInstanceForWidget): Ditto.
        * page/mac/WebCoreFrameBridge.h: Ditto.
        * page/mac/WebCoreFrameBridge.mm: Ditto.

2007-08-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Justin.

        - fix <rdar://problem/5397344> http://bugs.webkit.org/show_bug.cgi?id=14911
          REGRESSION: Clicking in pasted text doesn't position the insertion point correctly

        Test: editing/selection/inline-closest-leaf-child.html

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::closestLeafChildForXPos): Return the last leaf if
        it's the closest match, or if no other leaf matches (for example if all
        leaves are list markers or non-editable where editable is required).

2007-08-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5390568> 
        REGRESSION: -[WebFrame loadHTMLString:baseURL:] leaks the data source.
        
        Revert the fix for <rdar://problem/5133420> which caused us to not cancel 
        substitute data loads. It's better to remove the assertion in the WebKit layer.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didCancel):

2007-08-10  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Fix Windows, Qt and Gtk build.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2007-08-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Fix for <rdar://problem/5395618>

        Use checkNodeSecurity when setting the 'src' or 'location' attribute of an
        iframe or frame element.  

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAttrCustom.cpp: Added.
        (WebCore::JSAttr::setValue): Call checkNodeSecurity for attributes with a current iframe or frame
        ownerElement when setting src to a javascript: URL.
        * bindings/js/JSElementCustom.cpp: Added.
        (WebCore::allowSettingSrcToJavascriptURL):
        (WebCore::JSElement::setAttribute): Call checkNodeSecurity when element is a frame or iframe and 
        setting he src attribute to a javascript: URL.
        (WebCore::JSElement::setAttributeNode): Ditto.
        (WebCore::JSElement::setAttributeNS): Ditto.
        (WebCore::JSElement::setAttributeNodeNS): Ditto.
        * bindings/js/JSHTMLFrameElementCustom.cpp: Added.
        (WebCore::allowSettingJavascriptURL):
        (WebCore::JSHTMLFrameElement::setSrc): Call checkNodeSecurity when setting to a javascript: URL.
        (WebCore::JSHTMLFrameElement::setLocation): Ditto.
        * bindings/js/JSHTMLIFrameElementCustom.cpp: Added.
        (WebCore::JSHTMLIFrameElement::setSrc): Call checkNodeSecurity when setting to a javascript: URL.
        * bindings/scripts/CodeGeneratorJS.pm: Add support for [CustomGetter] and [CustomSetter]
        * dom/Attr.idl:
        * dom/Element.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Make the containingWindow a GtkContainer and make use of the
        GtkWidget::window instead of the GtkLayout::bin_window.

        * platform/Widget.h:
        * platform/gdk/PlatformScreenGdk.cpp:
        (WebCore::screenDepth):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::setContainingWindow):
        (WebCore::Widget::setCursor):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Revert r24699 as it broke timers. The precision of QTime::toTime_t() is just seconds, which is not good enough. Revert back
        to the old implementation and use the simple implementation of currentTime() from win/ for the Qt/Windows build (fingers crossed :)

        * WebCore.pro:
        * platform/qt/SystemTimeQt.cpp:
        (WebCore::currentTime):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Recognize .htm as valid extension for text/html.

        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::):

2007-08-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        remove an assertion that leads to crashes. The whole design of WidgetQt and ScrollViewQt needs to be reevaluated soon anyways.

        * platform/qt/ScrollViewQt.cpp:

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

        Fix the Mac build.

        * ForwardingHeaders/bindings/runtime_object.h: Added.

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make sure -fno-strict-aliasing is also added for mkspecs like linux-g++-64.

        * WebCore.pro:

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Enable JavaScript bindings for HTML Object/Applet elements in the Qt port.

        * WebCore.pro:
        * bindings/js/kjs_dom.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLEmbedElement.h:
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):

2007-08-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14798
          Incorrect bidi reordering of neutrals and digits after RTL embed
          and other bugs in the bidi algorithm.

        Test: fast/text/international/bidi-neutral-run.html

        Fixed several bugs in resolving the embedding level of runs of neutral
        characters. Changed the logic to rely on the eor direction only for
        the number types, and otherwise consider the last strong type.

        * platform/BidiContext.h:
        (WebCore::BidiContext::BidiContext): Added an ASSERT.
        * platform/BidiResolver.h:
        (WebCore::::embed):
        (WebCore::::createBidiRunsForLine):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextRunIterator::atEnd): Changed to return true instead of
        crashing when called on the empty iterator.

2007-08-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        <rdar://problem/5400709> Versioning in debug and release builds should include minor and tiny version before +

        * Configurations/Version.xcconfig:
        * WebCore.xcodeproj/project.pbxproj: Add a shell script phase to make to dependency between
        Version.xcconfig and Info.plist explicit to Xcode.

2007-08-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Justin Garcia.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14347
          REGRESSION (r21291): Initiating a drag near the edge of a selection deselects it

        Test: editing/selection/contains-boundaries.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Changed to return true for the
        selection boundaries too.

2007-08-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14742
          Document::recalcStyle(Force) called for every updateStyleIgnorePendingStylesheets while waiting for stylesheets
          <rdar://problem/5376306>

        updateStyleSelector() is normally called when something changes that factors
        into the style selector. However, updateLayoutIgnorePendingStylesheets() calls it for
        a different reason, namely to account for all the preceding changes that were ignored
        because of the early return in updateStyleSelector(). After that, the early return
        can no longer occur, so changes are accounted for as they happen, and
        updateLayoutIgnorePendingStylesheets() does not need to call updateStyleSelector()
        again.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets): Call updateStyleSelector()
        only before the first layout.

2007-08-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14362
          Opening a select list always highlights first element in list

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc): Track the mouse only inside the popup.

2007-08-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14875
          Textarea with nowrap - left/right nav, Up/down nav both hide text

        Test: fast/layers/scroll-rect-to-visible.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Account for borders and scroll bars.

2007-08-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Hyatt.
        
        Refactored live decoded resource eviction to be more modular / 
        encapsulated. 
        
        This fixes one known place where we forgot to hook into the live 
        decoded eviction mechanism -- canvas. There might be other, unknown 
        places. In a canvas test page, which I broke off from the Safari 
        pageout test, I saw an RPRVT reduction of ~10MB.
        
        A few renames:
        - "m_lastLiveAccessTime" => "m_lastDecodedAccessTime" because the data
        point we're recording is access to the resource in decoded form.
        
        - "liveResourceAccessed" => "didAccessDecodedData" for the same reason.

        - "pruneAllResources" => "pruneDeadResources" because this function 
        does not prune live resources.
        
        And the fix:
        Instead of updating cache metadata at the call site whenver drawing an 
        image, just have an image notify its observer whenever it draws. The 
        observer, which is a CachedResource, can then update the metadata.
        
        * loader/Cache.cpp: Renames
        * loader/Cache.h: Removed stale declarations, updated comments
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::didDraw): Implemented didDraw to update cache
        metadata whenever our image draws.
        * loader/CachedImage.h: Grouped parts of the ImageObserver interface.
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::deref):
        (WebCore::CachedResource::didAccessDecodedData): Made this function
        slightly more modular by allowing the caller to provide a time stamp.
        In theory, not all CachedResources will necessarily want to use the 
        current paint time stamp.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): Notify our observer that we drew.
        (WebCore::Image::drawPattern): ditto
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw): ditto
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::draw): ditto
        
        Removed old code at image drawing call sites:
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorderImage):

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Move the various *ClientGdk.{h,cpp} away from the WebCore directory as
        of http://bugs.webkit.org/show_bug.cgi?id=14727.

        * WebCore.pro:
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-08-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5400029> iframes with an image src rarely load image
        
        Don't try to shrink standalone images in subframes. The resize event is not 
        sent for subframes which screws up the shrink-to-fit logic.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::imageChanged):
        (WebCore::ImageDocument::shouldShrinkToFit):
        * loader/ImageDocument.h:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Implement FrameLoaderClientGdk::createFrame mostly by copying
        the windows implementation. A method similiar to WebFrame::loadURLIntoChild
        was not introduced instead we have a simplified version similiar to the
        one of the Qt port.

        Remove building of WebKit/gtk/webkitgtkframedata.{cpp,h}.

        * WebCore.pro:
        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::createFrame):

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Use the ScrollView/Widget design of the Windows port to only use one
        native window for the whole page. This will make it possible to implement
        FrameLoaderClientGdk::createFrame.

        In contrast to the windows port the ScrollBars are GtkWidgets. To paint them
        at the right position we need to position them correctly. To not scroll the
        ScrollBar's belonging to the ScrollView a ScrollViewScrollbar is introduced with
        a different geometryChanged method.

        To allow the Gtk+ way of scrolling the ScrollView allows to get GtkAdjustments
        set. In this case no ScrollViewScrollbar will be created.


        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/gdk/PlatformScreenGdk.cpp:
        (WebCore::screenDepth):
        * platform/gdk/PlatformScrollBar.h:
        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::setRect):
        (PlatformScrollbar::geometryChanged):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::~ScrollViewPrivate):
        (WebCore::ScrollViewScrollbar::ScrollViewScrollbar):
        (WebCore::ScrollViewScrollbar::geometryChanged):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollViewPrivate::adjustmentChanged):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::setGtkAdjustments):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::scroll):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::WidgetPrivate::gdkDrawable):
        (WebCore::Widget::Widget):
        (WebCore::Widget::setContainingWindow):
        (WebCore::Widget::containingWindow):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::setParent):
        (WebCore::Widget::parent):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::paint):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertChildToSelf):
        (WebCore::Widget::convertSelfToChild):
        (WebCore::Widget::suppressInvalidation):
        (WebCore::Widget::setSuppressInvalidation):

2007-08-09  Adele Peterson  <adele@apple.com>

        Fix by Brady, reviewed by me.

        Fix for <rdar://problem/5380697> connection:willSendRequest:redirectResponse: is called on every NSURLConnection

        * platform/network/mac/ResourceHandleMac.mm: (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
          Work around a behavior change in CFNetwork where willSendRequest gets called more often by returning early.

2007-08-09  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - fix <rdar://problem/4889753> REGRESSION: Selection doesn't continue with drag selecting
          when autoscrolling vertically (in Notes as well as Safari)

        The bug doesn't happen inside DumpRenderTree, so I was unable to make an automated
        regression test.

        * manual-tests/autoscroll-when-outside-window.html: Added.

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::autoscroll): Removed unneeded null
        check for the layer's renderer and the document, neither of which can be null. Call
        the new updateSelectionForMouseDrag instead of doing selection updating here.

        * page/EventHandler.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent): Refactored most of the logic
        about updating the selection into updateSelectionForMouseDrag.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Added. The public version of
        this function takes no parameters, and is for use from auto-scrolling code. The
        private version of this function takes node and point parameters and contains the
        shared code, including everything from updateSelectionForMouseDragOverPosition.
        Aside from the code motion, variable name changes, and sharing more code, this
        differs from the old code in RenderLayer::autoscroll in the following ways:

          1) The old code did hit testing only in the layer that was auto-scrolling,
             and the new code instead starts the hit testing at the root layer, which is
             better because it's the same thing we do for mouse moved events. Further,
             the code to do this by calling convertToLayerCoords had a bug  because the
             x and y variables were uninitialized.
          2) The old code passed false for active to HitTestRequest, which was wrong.
             The new code passes true. This flag needs to be true for hit testing done
             while the mouse is down and false for hit testing done while the mouse is up.
          3) The old code did not have the SVG-specific logic to match the mouse moved case.
          4) The old code wouldn't do any selection updating if the return value from hitTest
             was false, which is incorrect. The new code ignores the return value as it should.

2007-08-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff Garen.

        Fx for <rdar://problem/5286443>, http://bugs.webkit.org/
        show_bug.cgi?id=14268 REGRESSION: Radio buttons don't stay selected 
        due to unclosed <label> tags

        This patch maintains the behavior that allows <label> tags to nest. 
        This matches WinIE, and appears to match the spec, since the spec 
        does not explicitly say that they cannot nest. It fixes the bug 
        instead by calling setDefaultHandled() in two places it should have 
        been called anyway. This keeps the appropriate button checked as 
        the event bubbles.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::postDispatchEventHandler):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):

2007-08-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5387578> Crash at ReplaceSelectionCommand::doApply() when pasting just after table cell content
        
        ReplaceSelectionCommand::doApply() inserts a line break before insertion
        to prevent block nesting.  InsertLineBreakCommand::doApply was accidently
        destroying a text node when it removed insignificant whitespace and then
        setting a nil endingSelection().

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): If insignificant whitespace
        removal removes textNode from the document, insert a text node containing
        the non-breaking space we were attempting to insert and then insert it
        at the position that the removed textNode occupied.

2007-08-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added a thrash check to live decoded resource eviction.
        
        Here's the strategy: Stamp every image with its paint time. Don't evict 
        a live decoded resource until another resource paints with a reasonably
        (1 second) larger time stamp. 
        
        If no other resource paints, or another resource paints, but very soon 
        after the resource in question, the resource in question is very likely 
        to paint again soon. In fact, it's probably still on screen. So we 
        leave it alone. (Previously, we evicted it on a timer, but that would 
        evict a resource that was still on screen, hurting speed without 
        helping memory use.)

        In theory, this algorithm allows a single large resource or closely 
        related set of resources to linger in the live decoded cache even 
        though the cache is over its limit. However, that can only happen as 
        long as no other resource ever paints again, which guarantees an 
        absolute cap on cache memory usage from then on. Also, the resources 
        will only linger as long as they remain live. Upon going dead, they 
        will flush. Also, these circumstances are so rare that they are almost 
        impossible to encounter in the wild. So don't sweat it.
        
        Stop evicting if the next resource painted too recently:
        
        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::liveResourceAccessed):
        * loader/CachedResource.h:

        Track the paint time stamp in Frame. We do this to give a consistent
        stamp to all resources painted in a single paint operation (in case the
        operation takes a significant amount of time), and to avoid excessive 
        calls to system time functions, which hurt the PLT:

        * page/Frame.cpp:
        (WebCore::Frame::paint):
        * page/Frame.h:
        (WebCore::Frame::currentPaintTimeStamp):

2007-08-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Update project file to reflect the moving of character-sets.txt
        and make-charset-table.pl to platform/mac a while ago.

        * WebCore.xcodeproj/project.pbxproj:

2007-08-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5390681> WebKit asserts when deleting To Do content selected with a double-click
        
        * dom/Position.cpp:
        (WebCore::Position::trailingWhitespacePosition): Use VisiblePosition::characterAfter
        to look for a trailing space.  The old code would incorrectly return a position before
        a non-editable space if it had a collapsed space before it.

2007-08-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady.

        Make protocol and host compares case-insensitive.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityPolicyURL):
        * platform/DeprecatedString.cpp:
        (WebCore::equalIgnoringCase):
        * platform/DeprecatedString.h:
        (WebCore::equalIgnoringCase):

2007-08-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5390681> WebKit asserts when deleting To Do content selected with a double-click

        * dom/Position.cpp:
        (WebCore::Position::leadingWhitespacePosition): Added checks to prevent expansion across editable an boundary.
        (WebCore::Position::trailingWhitespacePosition): Ditto.

2007-08-08  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        Fix for <rdar://problem/5393798> 100% reproducible crash in WebCore::Scrollbar::setValue

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent):
          If the hit testing originally determined the event was in a scrollbar, 
          refetch the MouseEventWithHitTestResults in case the scrollbar widget was destroyed when the mouse event was handled.

2007-08-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Fix for <rdar://problem/5354635>

        Match Firefox's model for data: URLs by not allowing them script access
        to any frames other then itself.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityPolicyURL):

2007-08-08  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix for <rdar://problem/5390708> CrashTracer: [USER] 27 crashes in Safari at
          com.apple.WebCore: WTF::HashMap<etc>::set + 68, beneath pruneUnretainedIconsAtStartup

        * loader/icon/IconDatabase.cpp: (WebCore::IconDatabase::pruneUnretainedIconsOnStartup):
        Eliminate an unnecessary HashMap from the implementation; we can just use the
        m_pageURLToRetainCount map directly. This simplifies the code and allows us to handle
        the empty string, which otherwise poses a problem for HashMap.

2007-08-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix for <rdar://problem/5391576>
        Malformed table innerHTML causes Safari to crash in HTMLParser::handleError (14894)
        
        Add null checks to protect against 
        
        e.innerHTML = "<tr>text</tr>";
        
        type cases. Normal assumptions about document tree structure don't hold when parsing 
        fragments. Results don't match Firefox in all cases. It seems to have some sort of 
        anything-goes fragment parsing mode.
        
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2007-08-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej and Hyatt.

        - <rdar://problem/4976879> REGRESSION: Safari doesn't work with Zimbra enhanced login.
        - Reverting a previous change, and modifying how documents are created so that we better match other browsers behavior with respect to namespaceURIs.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createElement):
        * html/HTMLDocument.h:

2007-08-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed and landed by Brady

        Fixes <http://bugs.webkit.org/show_bug.cgi?id=13422>

        Bug 13422: REGRESSION: Page reload loses page position

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

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

        Reviewed by Niko.

        Be paranoid and disconnect from the signal before going away.

        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::~PlatformScrollbar):

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

        Reviewed by Niko.

        Use GraphicsContext::translatePoint in RenderThemeGdk to paint at the
        right position.
        This is needed as the Gtk+ theming code does not know about the translation
        of the GraphicsContext.

        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):

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

        Reviewed by Niko.

        Implement Widget::paint for the Gtk port. This is needed to paint
        Widgets in z-order. The original GdkEventExpose is stored within the
        GraphicsContext and then used to draw the children. This is similiar
        to gtk_container_propagate_expose but we try to honor the GraphicsConntext
        translation.

        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::paint):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setGdkExposeEvent):
        (WebCore::GraphicsContext::gdkExposeEvent):
        (WebCore::GraphicsContext::gdkDrawable):
        (WebCore::GraphicsContext::translatePoint):

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

        Reviewed by Oliver Hunt.

        Implement PlatformScrollbar by calling ScrollBar::setValue from 
        gtkValueChange connected to the value-changed signal of the
        GtkAdjustment.
        Update 'value' of the GtkAdjustment in updateThumbPosition and
        set upper, page-increment, step-increment and page_size in
        updateThumbProportion.

        This is from bug http://bugs.webkit.org/show_bug.cgi?id=14795.

        * platform/gdk/PlatformScrollBar.h:
        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::gtkValueChanged):

2007-08-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak. Based on earlier review from Dave Hyatt.

        First chunk of work for <rdar://problem/5326009> Make non-browser 
        WebKit clients have no memory cache, or a very tiny one
        
        Layout tests pass.
        
        Removed decodedSizeWillChange mechanism because my last patch to
        change the live resources list to a strict LRU model made that code
        vestigial.
        
        Renamed "liveResourcesList" and related stuff => 
        "liveDecodedResourcesList" because only live resources with decoded 
        data are kept in the list.

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::decodedSizeChanged): Only add ourselves to the
        list if we're live, our decoded size has grown, and we're not in the 
        list already. (Otherwise, either we're not live, we're not decoded,
        or we're already in the list.)

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::liveResourceAccessed): Only re-insert
        ourselves into the list if we're already there. (In theory, this should
        be always, but it's a little more clear to check.)

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

        Reviewed by Adam.

        Kill class FrameGdk and move the stubs to page/gdk/FrameGdk.cpp and the
        remainings into WebKitGtkFrame.
        The DRT functionality of class FrameGdk is currently lost.

        * WebCore.pro:
        * loader/gdk/FrameLoaderClientGdk.cpp:
        * loader/gdk/FrameLoaderClientGdk.h:
        * page/gdk/FrameGdk.cpp: Renamed from WebCore/platform/gdk/FrameGdk.cpp.
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::dragImageForSelection):
        (WebCore::Frame::dashboardRegionsChanged):
        * platform/gdk/FrameGdk.h: Removed.
        * platform/gdk/TemporaryLinkStubs.cpp: Removed Frame stub, added the loadResourceIntoArray stub
        * platform/gdk/WidgetGdk.cpp:

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

        Reviewed by Adam.

        Remove the event handling code and move it to WebKit/gtk/Api/webkitgtkpage.cpp

        * platform/gdk/FrameGdk.cpp:
        * platform/gdk/FrameGdk.h:

2007-08-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        Switch from the generic union GdkEvent to the specific struct GdkEvent*. This is needed
        to make WebKitGtkPage handle the events by reimplementing the default handlers in the near
        future.

        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/KeyEventGdk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gdk/MouseEventGdk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gdk/WheelEventGdk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-08-07  George Staikos  <staikos@kde.org>

        Some QStyles don't handle negative maximum well (crash)

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):

2007-08-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://problem/5102553>
        Mail spins trying to display or edit a specific long plain text message in WebCore::TimerBase::...

        Calling removeLeftoverAnonymousBoxes() from RenderBlock::addChildToFlow() made adding children
        O(n^2) in simple cases (repeated <div><div></div></div> for example).
        
        I couldn't find any limited fix so here is a more complete one. It removes iterating/recursing 
        removeLeftoverAnonymousBoxes() method altogether. Instead of hunting around wildly, just get 
        rid of anonymous boxes with block children when they occur.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToFlow):
        * rendering/RenderButton.h:
        (WebCore::RenderButton::removeLeftoverAnonymousBlock):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeLeftoverAnonymousBlock):
        * rendering/RenderContainer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::removeLeftoverAnonymousBlock):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::removeLeftoverAnonymousBlock):

2007-08-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Fix for <rdar://problem/5354689>

        - Use document variable to determine permissions instead
          of traversing the frame tree. 

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::initSecurityPolicyURL):
        * dom/Document.h:
        (WebCore::Document::securityPolicyURL):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOpener): We must re-initialize the
        safeScript URL when setting the opener because the opener was
        not known at Document construction.

2007-08-06  David Hyatt  <hyatt@apple.com>

        Make sure to clear out the parent of the ellipsis box so that it doesn't
        trigger the consistency check for line boxes.

        Reviewed by darin

        * ChangeLog:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::detachEllipsisBox):

2007-08-06  David Hyatt  <hyatt@apple.com>

        Back out fix for <rdar://problem/5366582> and replace it with the correct
        fix.  Make sure to delete the line box tree before splitting an inline flow
        into a continuation.  The added layout test for the original checkin covers
        the problem.

        Reviewed by beth

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline):
        Back out fix.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::destroy):
        Back out fix.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitFlow):
        Here's the new fix.

2007-08-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Touching a file to force a re-build.

2007-08-06  Darin Adler  <darin@apple.com>

        - fix release build

        * rendering/RenderText.h: (WebCore::RenderText::checkConsistency):
        Add missing const.

2007-08-06  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5366582> crash on it.eurosport.yahoo.com page

        Test: fast/dynamic/inline-to-block-crash.html

        I added some consistency checks for the line box tree, which helped me figure out
        what was going on with this bug pretty quickly.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::makeChildrenNonInline):
        This is the actual fix. If the block needs layout, then don't try to delete the line
        box tree because it's going to be rebuilt as part of layout. More importantly, the
        child list in the tree is no good, so we will crash if we try to delete here.

        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::destroy):
        Here's a second fix. We have the same issue in the code that handles anonymous
        blocks -- if it's already running as part of layout, we can't walk through the
        already partly destroyed line box tree. This crashed in one of the layout tests.

        * rendering/InlineBox.h: Made more fields private, since I wanted to do a bit more
        work in setters. Made setNextOnLine() and setPrevOnLine() assert that the box has a
        parent. Made parent() assert that the parent is good. Also removed the unused
        isChildOfParent() function.
        * rendering/InlineBox.cpp: (WebCore::InlineBox::~InlineBox): At destruction time, if
        we are still attached to a parent, tag that parent as having a "bad" child list.

        * rendering/InlineFlowBox.h: Added m_reasonForBadChildList, checkConsistency(),
        setHasBadChildList(), and hasBadChildList(). Also changed firstChild() and lastChild() so
        they call checkConsistency() and made all the fields private instead of protected.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine): Added consistency checks before and after adding a
        box to the line. Also checked that next and prev start out as 0. Changed manipulation of
        next and prev to use accessor functions.
        (WebCore::InlineFlowBox::removeChild): Added consistency checks before and after removing
        the box from the line.
        (WebCore::InlineFlowBox::deleteLine): Use firstChild() instead of getting at m_firstChild
        directly so we get a consistency check. Also set the parent to 0 before destroying so that
        the assertion in ~InlineBox will work properly.
        (WebCore::InlineFlowBox::extractLine): Ditto.
        (WebCore::InlineFlowBox::attachLine): Ditto.
        (WebCore::InlineFlowBox::adjustPosition): Ditto.
        (WebCore::InlineFlowBox::checkConsistency): Added. Checks consistency of the child list by
        looking at the parent, next, and prev pointers. Also asserts that we are not yet in the
        "bad" child list state, which happens if one of our children is destroyed without removing
        it from our list; that's normal, but once it happens we can't look at our child list again.

        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp: Remove unnneeded destroy/new/delete functions -- these are
        inherited from the InlineBox base class and don't need to be defined again.

        * rendering/RenderFlow.h:
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::~RenderFlow): Assert that there are no children to confirm that we
        didn't leak something.
        (WebCore::RenderFlow::extractLineBox): Added consistency checks before and after removing
        a run of boxes from the list.
        (WebCore::RenderFlow::attachLineBox): Added consistency checks before and after adding
        a box to the list.
        (WebCore::RenderFlow::removeLineBox): Added consistency checks before and after removing
        a box from the list.
        (WebCore::RenderFlow::createInlineBox): Added consistency checks before and after adding
        a box to the list.
        (WebCore::RenderFlow::checkConsistency): Added.

        * rendering/RenderText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::~RenderText): Assert that there are no children to confirm that we
        didn't leak something.
        (WebCore::RenderText::extractTextBox): Added consistency checks before and after removing
        a run of boxes from the list.
        (WebCore::RenderText::attachTextBox): Added consistency checks before and after adding
        a box to the list.
        (WebCore::RenderText::removeTextBox): Added consistency checks before and after removing
        a box from the list.
        (WebCore::RenderText::deleteTextBoxes): Added code to call setHasBadChildList since this
        destroys line boxes without informing the parent.
        (WebCore::RenderText::checkConsistency): Added.

2007-08-06  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5382483> REGRESSION: <select> element's text is clipped when a CSS line-height is specified

        Don't honor line-height for styled popup buttons.  We already don't honor line-height for unstyled popups
        and since IE and FF don't honor it at all for popups, we shouldn't either.

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):

2007-08-06  Antti  <antti@apple.com>

        Reviewed by Darin.

        Fix <rdar://problem/5378214>
        Mail crashes at RenderLayer::paintLayer() when dragging a selection over To Do text
        
        ObjC interface does not guarantee that Document::updateRendering() gets called after
        modification are made to document. This can lead to situation where paint()
        is invoked with document still dirty which can then crash in number of interesting ways.
        
        - add hasChangedChild() as needsLayout() condition. layout() will then call recalcStyle() 
          catching most cases and making sure document is not dirty when entering painting.
        - protect recalcStyle() and layout() from being executed during painting. There are some
          cases needsLayout() protection does not cover.
        
        No layout test, these states are very hard or impossible to reach using Javascript interface
        (which generally guarantees that updateRendering() is done right after execution).

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/Frame.cpp:
        (WebCore::Frame::paint):
        (WebCore::Frame::setPaintRestriction):
        (WebCore::Frame::isPainting):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::needsLayout):

2007-08-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/5369110> CrashTracer: [USER] reproducible crash opening particular mail messages

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): Make sure to retain
        self for the body of this method. Otherwise, the willSendRequest could trigger events which will
        cancel the connection, and we access ivars after this point.
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]): retain and release
        in the right order.

2007-08-04  Adam Roben  <aroben@apple.com>

        Another workaround for <rdar://problem/5386894>

        Reviewed by Sam.

        This fixed ~150 failing tests.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Hardcode the
        MIME type for .svg files as well.

2007-08-04  Adam Roben  <aroben@apple.com>

        Workaround for <rdar://problem/5386894> CFURLResponseGetMIMEType returns "text/html" for local .xhtml and .xml files

        Reviewed by Sam.

        This fixes ~350 failing tests.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Use a workaround
        identical to the one in ResourceResponseMac.mm, but include .xml files
        as well.

2007-08-04  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Oliver.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=14882
          <rdar://problem/5386550> REGRESSION (r24866): text/plain documents are always downloaded

        The supportedNonImageMimeTypes list is used to determine which MIME types may be viewed
        within the web browser (e.g., plug-ins add their own MIME types to the list during
        initialization), so we must add "text/plain" and "text/" back to the list.  Since
        this change would then break DOMImplementation::isTextMIMEType(), that method was reverted
        to its original form and MIMETypeRegistry::shouldTreatAsText() was removed.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isTextMIMEType): Revert to previous version.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedNonImageMimeTypes): Added back "text/plain" and "text/" to the list.
        (WebCore::MIMETypeRegistry::shouldTreatAsText): Removed.
        * platform/MIMETypeRegistry.h:

2007-08-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14824 and <rdar://problem/5372989>

        Two issues - 
        1 - The WebCore MIMEType registry was designed assuming the list of types would never change
            That is false, as WebKit has API and SPI calls which directly mutate the MIMETypeRegistry
        2 - DOMImplementation didn't consult the registry for any MIMEType that started with "text/", 
            instead maintaining it's own hard coded rules

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isTextMIMEType): For now, call through to the MIMETypeRegistry
          until we decided a different fate for this function

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initialiseSupportedNonImageMimeTypes):  "SupportedNonImageMIMETypes" is really a misnomer for 
          "MIMETypes we should show as HTML" but that line has slowly been blurred since Tiger.  In an attempt
          to start to unblur it, remove "text/" and "text/plain"
        (WebCore::MIMETypeRegistry::shouldTreatAsText):  The decision is very close to the old DOMImplementation 
          method, except we don't automatically hand off "text/" types as true if they are in the set of supported
          MIMETypes
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes): Non-const (can be changed!)
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes): Non-const (can be changed!)
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes): Non-const (can be changed!)
        * platform/MIMETypeRegistry.h:

2007-08-03  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5345862> CrashTracer: [USER] 4 crashes in Safari at com.apple.WebCore: WebCore::Frame::isContentEditable const + 10

        Couldn't reproduce the problem, but a nil check for the frame should fix this.

        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::adjustRenderStyle):

2007-08-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5383286>
        XMLHTTPRequest does not return 401 when user cancels authentication dialog (affects .Mac)
        
        * loader/ResourceLoader.h:
        Make receivedCancellation virtual.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::receivedCancellation):
        Call SubresourceLoaderClient::receivedCancellation.
        
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::receivedCancellation):
        Save the failure response.

2007-08-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5374393> 
        Image change on disk not noticed by WebView; -[WebCache setDisabled:] used to cause a reload every time
        
        This is essentially a better fix for the crash in <rdar://problem/5362783>.
        
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        If the resource already exists in the m_docResources map, remove it and disassociate it from the doc loader.

2007-08-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5375190> Mail crashed in WebCore::CachedImage::imageSize() const when viewing a particular message

        Fix the uncached load path to confirm that the type of resource being 
        returned actually matches the type that was requested.

        Also make sure we never create a resource in the Cache for invalid urls.

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):

2007-08-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14879
          REGRESSION: First item in select (pop-up menu) is displayed even if another item was selected via JavaScript

        Test: fast/forms/menulist-deselect-update.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelected): Reordered to allow setSelectedIndex() to call setChanged().

2007-08-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5286444>
        http://bugs.webkit.org/show_bug.cgi?id=14269
        REGRESSION: Gmail links stop working after computer sleep
        
        Add a PowerNotifier object that takes care of resetting and firing the shared timer when coming
        back from sleep.
        
        * platform/mac/SharedTimerMac.cpp:
        (-[PowerNotifier init]):
        (-[PowerNotifier didWake:]):
        (WebCore::setSharedTimerFireTime):

2007-08-04  Mark Rowe  <mrowe@apple.com>

        Windows build fix.

        * rendering/RenderTextControl.cpp: Don't use the same name for two arguments.

2007-08-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14653
          REGRESSION (r23994): No caret is drawn after clicking a search field's placeholder text
          <rdar://problem/5383841>

        Test: fast/forms/search-click-in-placeholder.html

        Defined a subclass of RenderBlock that never hit-tests children for use in
        text controls. This avoids returning placeholder text as the hit node.
        Since text controls cannot contain inline elements, there is no harm in
        doing that unconditionally, and not just in the case that the field is
        showing placeholder text.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        (WebCore::RenderTextControlInnerBlock::~RenderTextControlInnerBlock):
        (WebCore::RenderTextControlInnerBlock::nodeAtPoint):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):

2007-08-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff

        Fix for <rdar://problem/5369332> Xcode crashes while selecting a hyperlink within a AppleScript dictionary (WebCore::Font::drawGlyphBuffer)

        There were many places where we were not correctly retaining/releasing the
        NSFont object stored in the C++ PlatformFontData object, this resulted in
        the GC incorrectly collecting the NSFont.

        This patch fixes the problem by prevent direct modification of the PlatformFontData
        font pointer, allowing us to enforce correct CFRetain/Release behaviour.

        * platform/FontData.h:
        (WebCore::FontData::getNSFont):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/FontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::containsCharacters):
        (WebCore::FontData::determinePitch):
        (WebCore::FontData::platformWidthForGlyph):
        (WebCore::FontData::checkShapesArabic):
        * platform/mac/FontMac.mm:
        (WebCore::initializeATSUStyle):
        (WebCore::overrideLayoutOperation):
        (WebCore::Font::drawGlyphs):
        * platform/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::setFont):

2007-08-03  Antti Koivisto  <antti@apple.com>

        Oops, this change wasn't supposed to be commited.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setBaseBackgroundColor:]):

2007-08-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        <rdar://problem/5355951>
        plainText() fragments TCMalloc heap badly on large pages
        
        also likely fixes some cases of
        <rdar://problem/5335382>
        CrashTracer: [REGRESSION] 73 crashes in Safari at com.apple.WebCore: WebCore::DeprecatedStringData::increaseUnicodeSize + 52
        
        If you load http://dscoder.com/test.txt with WebKit build with TCMalloc and system malloc you see that
        Safari RPRVT with TCMalloc is 118.8MB
        Safari RPRVT with system malloc is 69.7MB
        
        Difference is almost entirely caused by heap fragmentation from a full document plainText() call (for indexing purposes).
        
        The patch helps in two ways:
        - construct plainText string in pieces to avoid O(n^2) reallocs
        - allocate buffers using system malloc so they can be returned back to OS and don't fragment and grow TCMalloc heap
    
        This shrinks http://dscoder.com/test.txt RPRVT to 79.0MB and makes full document plainText() take 50ms instead of 500ms.
        The benefits are not limited to extreme cases, web pages above ~200kB can show substantial improvement in RPRVT.

        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):
        (WebCore::plainText):
        * editing/TextIterator.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge selectedString]):
        (-[WebCoreFrameBridge stringForRange:]):

2007-08-02  David Hyatt  <hyatt@apple.com>

        Fix for 5374437, allow comment nodes to be the child of a document.
        Refine the check to always make a root element to check documentElement()
        rather than firstChild(), since a comment node could be present as the
        firstChild() now.

        Reviewed by Tim Hatcher

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::childAllowed):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::finished):

2007-08-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5228138>
        REGRESSION(Leopard): test failures: tests that test Georgian numbering

        Fix to Georgian number tables to get CSS2.1 test results right. Font has relevant characters now 
        which revealed that results were actually wrong. 

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

2007-08-02  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        <rdar://problem/5079175> Added parameters headerHeight and footerHeight to 
        computePageRectsForFrame() so we can account for the header and footer when
        calculating page heights for this frame.

        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * bridge/win/FrameWin.h:

2007-08-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Kevin McCullough.

        fixed <rdar://problem/5310312> REGRESSION: javascript is mis-escaped at http://labs.zarate.org/passwd causing bookmarklet to break
        
        * WebCore.exp:
        expose some calls for WebKit to call. 
        * manual-tests/JavaScript-bookmarklets.html: Added.

2007-08-01  Adam Treat  <treat@kde.org>

        Reviewed by George Staikos.

        Add an interface to manage global history for clients

        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp:

2007-08-01  Adam Treat  <treat@kde.org>

        Reviewed by George Staikos.

        Do not call update or paint from inside a paint event.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::updateContents):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidateRect):

2007-08-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        <rdar://problem/5376156> Mail crash in DeleteButtonController::hide() when dropping selected image on DIV's border

        Add the container element back so the selection can not touch the deletion UI nodes. The container
        has style to prevent user selection, user drag and user modification.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::show): Make the container node, and append the button and outline elements.
        (WebCore::DeleteButtonController::hide): Remove the container elements and null out the other nodes.
        * editing/DeleteButtonController.h:

2007-08-01  Steve Falkenburg  <sfalken@apple.com>

        Build mod: Fix sln to match configs in vcproj.
        
        Reviewed by Adam.

        * WebCore.vcproj/WebCore.make:

2007-07-31  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/5362659> CrashTracer: [USER] 11 crashes in Mail at WebCore::InsertLineBreakCommand::doApply()

        The problem was that deleting with the X control leaves the selection inside the fragment that was deleted.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::deleteTarget):
        Because the deletion UI only appears when the selection is entirely
        within the target, we unconditionally update the selection to be
        a caret where the target had been.

2007-07-31  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

         Fix for <rdar://problem/5339395> REGRESSION:http://sudokucraving.com does not render grid correctly

        * rendering/RenderTextControl.h: (WebCore::RenderTextControl::hasControlClip): Clip for search fields.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::controlClipRect): Added a control clip so the search field's cancel button and magnifier glass
         never draw outside the control's bounds.
        (WebCore::RenderTextControl::calcPrefWidths): Only include the inner box's padding when calculating the min/max width without using calcContentBoxWidth.
         Our old behavior was causing that inner padding to get counted twice.  Also, no need to add in the border
         for an inner box that can't be controlled from outside this class.
        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::calcPrefWidths): ditto.

2007-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Speculative fix for <rdar://problem/5359695> 
        REGRESSION (Tiger Beta): Multiple crashes in WebCore::Widget::getView() const + 6
                
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        Null check the frame view.

2007-07-31  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Oliver and Beth.

        <rdar://problem/5211271> ADOBE Leopard 9A410: At the first Launching InDesign after deactivate, EULA page gets blanked.

        Rename needsAcrobatFrameReloadingQuirk to needsAdobeFrameReloadingQuirk, since this now applies to more Adobe applications.

        * WebCore.exp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setNeedsAdobeFrameReloadingQuirk):
        * page/Settings.h:
        (WebCore::Settings::needsAcrobatFrameReloadingQuirk):

2007-07-31  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Brady and Darin, tweaked by Brady, landed by Brady

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14757 and <rdar://problem/5364692>
        HTMLTokenizer::processingData implementation is incorrect

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processingData): Made it also return true if the HTMLTokenizer was inside the write() call.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::checkLoadCompleteTimerFired):
        (WebCore::FrameLoader::scheduleCheckLoadComplete):
        (WebCore::FrameLoader::stopForUserCancel): Changed a call to checkLoadComplete to be asynchronous, since
        stopForUserCancel can be called while parsing.
        * loader/FrameLoader.h:

2007-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5371582>
        REGRESSION: PLT .5% slower due to r24451 (copying HTMLCollection objects)
        
        Make the hash maps store CollectionInfo pointers to reduce amount of copying when
        inserting/rehashing etc.
        
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::nameCollectionInfo):
        * dom/Document.h:

2007-07-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14825
        Non-integer hsl() colours are ignored

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseHSLParameters): Parse hue as a Number,
        not an Integer. 

2007-07-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.

        <rdar://problem/5369009> Crash due to infinite recursion in moveParagraphs on delete
        
        After the delete, we moved content into the previous block, and a style
        rule turned a style span in the moved content into a block, throwing
        moveParagraphs into infinite recursion, as it continually tried and failed
        to get the style span into the same paragraph as the content just before it.
        
        Added a method to ReplaceSelectionCommand to keep inserted style spans 
        from turning into blocks because of style rules.  Will add code to prevent
        other kinds of content from changing appearance because of style rules,
        post-Leopard (5371536). Also added a bool to ReplaceSelectionCommand's 
        constructor to guard against infinite recursion.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/JSEditor.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::negateStyleRulesThatEffectAppearance):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

2007-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        <rdar://problem/5371515>
        BitmapImage::getTIFFRepresentation() bug results in favicons not working at many sites

        Don't bail out if a single frame is invalid.
        
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::getTIFFRepresentation):

2007-07-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5274937> Safari 3 breaks Missing Sync's WebKit code by crashing

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::continueAfterContentPolicy): Nil check for the FrameLoader.

2007-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5370710> 
        REGRESSION: After switching from Bookmark view, the Find Banner won't appear while displaying a PDF file

        Add a hasHTMLView to FrameLoaderClient. This is only useful for clients who can show different views for different
        MIME types and URL schemes.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        Call delegate methods here if the current view is not a HTML view.
        
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::hasHTMLView):

2007-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Fix for <rdar://problem/5363896>
        REGRESSION: Setting document.domain does not override port-based cross-frame security checks -- breaks SAP NetWeaver

        Updates the results for:
            http/tests/security/cross-frame-access-port-explicit-domain.html
            http/tests/security/cross-frame-access-protocol-explicit-domain.html

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow): Use the new setDomainInternal method.
        (KJS::Window::isSafeScript): Don't set check the port or protocol 
        if both documents have explicitly set document.domain in the DOM
        and the those domains are equal.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setDomain): Remove force parameter and change 
        all calls that relied on it use the new setDomainInternal method
        which does the same thing.
        (WebCore::Document::setDomainInternal): 
        * dom/Document.h: Add new m_domainWasSetInDOM variable and accessor.
        (WebCore::Document::domainWasSetInDOM):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCallImplicitClose): Use the new setDomainInternal method. 

2007-07-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tristan.
        
        <rdar://problem/5098931> Attachments are lost when they are moved into a ToDo after a delete
        
        Added an editor client method for asking whether or not it is
        OK to merge content after a delete.

        * bridge/EditorClient.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Ask if the 
        merge is allowed.
        * platform/gdk/EditorClientGdk.cpp: 
        (WebCore::EditorClientGdk::shouldMoveRangeAfterDelete): Added a method stub.
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h: 
        (WebCore::SVGEmptyEditorClient::shouldMoveRangeAfterDelete): Ditto.

2007-07-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders.

        <rdar://problem/5352526>
        http://bugs.webkit.org/show_bug.cgi?id=14704
        REGRESSION: sync XMLHttpRequest.send() raises an exception for failed authentication

        Test: http/tests/xmlhttprequest/failed-auth.html

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously): Make the fake response better match the real one
        in case of failed authentication. Unfortunately, NSURLConnection doesn't give us the real response.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): If the response has an HTTP code in it, then the error wasn't
        a network one, and an exception shouldn't be raised.

2007-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/4942372> REGRESSION: Anchor links in Mail don't work anymore
        
        Make it possible for KURL to handle addig fragments to non-hierarchical URLs
        such as mailto: and cid:.
    
        * platform/KURL.cpp:
        (WebCore::KURL::init):
        If the base URL is not hierarchical but the relative URL is a fragment, then 
        allow parsing it.
        
        (WebCore::KURL::parse):
        If the URL is not hierarchical, set the fragment start and end positions correctly.

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        On Windows make sure the dll also ends up in $$OUTPUT_DIR/bin, so that QtLauncher can find it.

        * WebCore.pro:

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Removed the __BUILDING_QT ifdef in JSStringRef.h and changed UChar for the Qt build to use wchar_t on Windows.

        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Don't link against libxml/libxslt unless we really need it.

        * WebCore.pro:

2007-07-29  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5369282> REGRESSION: DOMHTMLInput throwing exception due to missing _isEdited method

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        * bindings/objc/DOMPrivate.h:
        Renamed _isUserEdited to _isEdited.

2007-07-29  Adam Treat  <treat@kde.org>

        Reviewed by George Staikos.

        Correctly set the update rect for the scrollbars when they are invalidated.
        Do not paint entire page for each scroll delta.  Cache the dirty regions
        when webkit calls ScrollView::updateContents as webkit expects the paint
        routine to use the dirty regions bounding rect.

        These changes greatly reduce the cpu load as we are no longer painting the
        entire page for each 1px scroll :P

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::paint):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidateRect):

2007-07-29  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        WebCore part of fix for <rdar://problem/5102522> REGRESSION: Can't tab to webview that doesn't have editable content (affects Safari, preview pane in Mail)

        * WebCore.exp:
        * page/FocusController.cpp:
        (WebCore::FocusController::setInitialFocus): Added.
        (WebCore::FocusController::advanceFocus): Don't give the focus back to the chrome if this is the initial focus.
        * page/FocusController.h:

2007-07-29  Adam Treat  <treat@kde.org>

        Reviewed by Alexey Proskuryakov.

        WebCore::Widget::setParent should be virtual.
        It is reimplemented in ScrollViewQt for instance.

        * platform/Widget.h:

2007-07-29  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by bdash.

        http://bugs.webkit.org/show_bug.cgi?id=14711 (revisited)
        RenderThemeGdk's buttons are state-agnostic (pressed, hovered)

        Generalize shadow state into a function.
        use a GtkHBox to work around a theme bug (thanks to Nigel Tao).

        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::determineShadow):
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):
        (WebCore::RenderThemeGdk::gtkWindowContainer):
        * platform/gdk/RenderThemeGdk.h:

2007-07-27  Adele Peterson  <adele@apple.com>

        Reviewed by Darin. 

        Temporary fix for Windows to prevent crashing on all frame pages.  Darin
        is working on a more permanent fix.

        * loader/FrameLoader.cpp:

2007-07-27  Adam Treat  <treat@kde.org>

        Reviewed by David Hyatt.

        Fix crash when using QtWebKit canvas support.

        * ChangeLog:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):

2007-07-27  Darin Adler  <darin@apple.com>

        * rendering/RenderLayer.cpp: Rolled out accidentally-checked-in code.

2007-07-27  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5261393> In Mail the plain text alternatives to messages with attachments show weird little OBJ thingies

        The "weird little thingies" are U+FFFC characters. It's good to render them as zero-width, the way we do
        with control characters -- helps Mail and doesn't hurt web browsing.

        Test: fast/text/zero-width-characters.html

        * platform/CharacterNames.h: Add names for leftToRightMark, rightToLeftMark, and objectReplacementCharacter.
        * platform/GlyphPageTreeNode.cpp: (WebCore::GlyphPageTreeNode::initializePage): Give objectReplacementCharacter
        zero width in the same way we do it for the various other characters.

2007-07-27  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Enable XSLT support for the gtk port.

        * WebCore.pro:

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Premature end after finishing parsing is a fatal error.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::end):

2007-07-27  Lars Knoll  <lars@trolltech.com>

        Reviewed by Zack and Lars.

        Simplify conversions that go from a QStringRef to a WebCore::String to not use a temporary QString.

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

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Fix entity handling in the main document content (attributes still broken)

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

2007-07-27  Lars Knoll  <lars@trolltech.com>

        Reviewed by Zack and Lars.

        Correctly convert a null QString into a null WebCore::String. Add a String(const QStringRef&) constructor so that we can avoid converting QStringRef via QString to WebCore::String.

        * dom/XMLTokenizer.cpp:
        (WebCore::):
        * platform/PlatformString.h:
        * platform/qt/StringQt.cpp:
        (WebCore::String::String):

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Parse version and encoding of the xml document.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Correctly or semi-correctly parse the public and system id.

        Patch from Lars.

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

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Fix uri parsing for attributes.

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

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Fixing qualified name parsing - from Lars.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        (WebCore::):

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Parse dtd's

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::resumeParsing):
        (WebCore::):
        * dom/XMLTokenizer.h:

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Implement error handling.

        Add our copyrights

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::handleError):
        (WebCore::XMLTokenizer::end):
        (WebCore::):
        * dom/XMLTokenizer.h:

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Making the stylesheets work (plus everything else basically)

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        (WebCore::):
        * dom/XMLTokenizer.h:

2007-07-27  Zack Rusin  <zack@kde.org>

        Reviewed by Zack and Lars.

        Remove the libxml dependency when not compiling with XSLT.

        Just ifdefing, displaying xml doesn't work.

        * WebCore.pro:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::enterText):
        (WebCore::XMLTokenizer::exitText):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::end):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::XMLTokenizer::resumeParsing):
        (WebCore::):
        * dom/XMLTokenizer.h:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Work around bug in the moc when used as preprocessor for generating the bindings. -DFOO=1 is needed instead of -DFOO
        to make the <hash>if FOO conditional match.

        * WebCore.pro:

2007-07-27  Patrick Hanna  <phanna@email.unc.edu>

        Reviewed by Darin Adler.

        Change PluginBase::refresh to be static and update PluginsFunc::callAsFunction accordingly. Now we no longer
        allocate an instance of a JSObject subclass on the stack which could lead to a crash during garbage collection.

        * bindings/js/kjs_navigator.cpp:
        (KJS::PluginsFunc::callAsFunction):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix snprintf hack for the Qt/Windows build with mingw-gcc. MingW has snprintf, so we don't need this helper function.

        * page/FrameTree.cpp:
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::format):
        * platform/String.cpp:
        (WebCore::String::format):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Make the DocTypeStrings.cpp generation work with MingW. Cleaned it up to be a regular extra compiler at the same time.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        MingW build fixes: Do the "OBJECTS_TRAILING_SLASH" trick not only for win32-msvc but for all win32 mkspecs. Added LIB/INCLUDE hack from Qt to make us pick up 3rdparty libraries such as libxml from these environment variables.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Use $(MOVE) instead of mv to eliminated the shell dependency and replaced the long shell line to call bison and modify the css grammar file with a few lines of portable perl code.

        * WebCore.pro:
        * css/makegrammar.pl: Added.

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        On make install on Windows copy the dll into the bin dir.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Link in libxml and libxslt on Windows.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Temporarily disable the ICO support for the Qt build on Windows.

        * WebCore.pro:
        * platform/graphics/qt/ImageDecoderQt.cpp:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix evaluation with ActiveState Perl 5.6. Somehow it tried to treat nameEntries as array.

        * bindings/scripts/CodeGeneratorJS.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix compilation with MSVC in the Qt build (missing header files).

        * loader/icon/IconDatabaseNone.cpp:
        * platform/graphics/svg/SVGImage.cpp:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Disable the favicon database on Windows for now, to eliminate the sqlite dependency.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Added custom preprocessor support to make_names.pl and use the moc for it in the Qt build.

        * WebCore.pro:
        * ksvg2/scripts/make_names.pl:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Disable the batch mode for nmake to work around the clash of Node.c and Node.cpp both mapping to Node.obj

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix compilation under Windows (removed sys/time.h dependency, use Qt instead).

        * platform/qt/SystemTimeQt.cpp:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix compilation on Windows.

        * platform/graphics/qt/PathQt.cpp:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix generation of ColorData.c on Windows.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix compilation under Qt/Windows.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Changed extendedAttributes to be a variable instead of a hash directly. Required to work with ActiveState perl.

        * bindings/scripts/IDLStructure.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix header guard generation for CSSGrammar.h under Windows

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix build with moc as preprocessor. Don't rely the preprocessor preserving whitespace at the beginning of lines.

        * bindings/scripts/IDLParser.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Make make-css-file-arrays.pl work on Windows by not calling /usr/bin/gcc as preprocessor for the Qt build.

        * WebCore.pro:
        * css/make-css-file-arrays.pl:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        More gperf commandline fixes for Windows.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        More quoting fixes for perl under Windows.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix command quoting under Windows

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix cssmakeprops and cssmakevalue scripts to work on Windows without cygwin perl. Avoid inplace substitutions and direct invocation of /bin/sh. Also call gperf with arguments that GnuWin32's gperf understands.

        * ksvg2/scripts/cssmakeprops:
        * ksvg2/scripts/cssmakevalues:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Beautiful hacks to make more of the extra compiler magic work under Windows outside of cygwin.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Correctly propagate the custom preprocessor option through the idl parser and the codegenerator.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/generate-bindings.pl:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        When constructing the absolute path when searching for IDL files in the list of search paths don't prepend a slash if $SOURCEROOT as environment variable is not set. In the Qt build we pass absolute search paths already and we don't set SOURCEROOT. Under Unix that gives a double slash for the directory which works fine, under Windows we get /c:\webkit\foo which of course does not work.

        * bindings/scripts/CodeGenerator.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Relax the regular expression that tries to find constant declarations in the IDL source to not require leading whitespace. This makes it work with preprocessors that happen to eliminate leading whitespace.

        * bindings/scripts/IDLParser.pm:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Try to use the moc as preprocessor for the IDL bindings generator

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Make it possible to specify the preprocessor the bindings generator uses instead of hardcoding /usr/bin/gcc (which is of course no option on Windows). Also try to use a more portable and Windows friendly way of opening the reading pipe to the preprocessor.

        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/generate-bindings.pl:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Don't use stdout redirection for make_names.pl as it doesn't work under Windows perl (outside cygwin).

        * ksvg2/scripts/make_names.pl:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix DocTypeStrings.cpp generation to work on Windows with cmd.exe

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Work around aliasing bugs in WebCore by compiling with -fno-strict-aliasing for gcc builds for now.

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Use -Wreturn-type only when compiling with g++

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Don't use pkg-config on Windows for the Qt build

        * WebCore.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix compilation with MSVC.

        * platform/graphics/qt/ImageDecoderQt.cpp:

2007-07-26  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/5350019> REGRESSION: Pages on milliyet.com are added to Back list when visited, causing Back button to just reload

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        If the policy action is FrameLoadTypeRedirectLockHistory, don't add the frame load url to the history.

2007-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Add a FIXME about caching pages with plug-ins that have outstanding NPObjects.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):

2007-07-26  David Hyatt  <hyatt@apple.com>

        FIx for <rdar://problem/5289721> CrashTracer: [REGRESSION] 2658 crashes in Safari at com.apple.WebCore: WebCore::RenderInline::height const + 16

        Adding a null check for now and an assert.  We don't know how/why this
        bug happens, but hopefully the assert will help people to reproduce.

        Reviewed by kevin

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::height):

2007-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5362783>
        In Mail, a crash occurs at WTF::fastMalloc() when attempting to create a new HTML message from http://nytimes.com/
        
        If the cache is disabled and there is already a resource with the given URL, return it instead of creating a new one.
        
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):

2007-07-26  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff. 

        Build fix.

        * platform/network/cf/ResourceRequest.h:

2007-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5349389> 
        Some frame load delegate methods not called when loading a page from the BF cache
        
        These calls were moved to FrameLoader::begin, which is never called for pages loaded
        from the BF cache. This happened in revision 24490.
         
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        Call delegate methods if the load is from the BF cache.

2007-07-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin, Geoff and Sam.

        - <rdar://problem/5150461> Resizing the window larger than the screen causes no resize.
        - We now better match the behavior of other browsers.

        * bindings/js/kjs_window.cpp:
        (KJS::constrainToVisible):
        (KJS::WindowFunc::callAsFunction):

2007-07-26  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Adele Peterson.
        
        <rdar://problem/5359921> WebCore should maintain a dirty flag for confirmation on unsaved changes

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isUserEdited]):
        (-[DOMHTMLTextAreaElement _isUserEdited]):
        Renamed _isEdited to _isUserEdited since the functionality is now different
        
        * bindings/objc/DOMPrivate.h:
        Renamed _isEdited to _isUserEdited.
        
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        Defaulted m_userEdited to false
        
        (WebCore::RenderTextControl::updateFromElement):
        Set m_userEdited to false, since the change wasn't triggered first by an edit
        
        (WebCore::RenderTextControl::subtreeHasChanged):
        Set m_userEdited to true, since it has been touched by the user
        
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::isUserEdited):
        (WebCore::RenderTextControl::setUserEdited):
        Added two new methods to set/return the userEdited boolean value.
        
2007-07-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed NULL-dereference crash seen on buildbot.
        
        No bug filed because this is a part of <rdar://problem/5241167>.

        * history/PageCache.h:
        (WebCore::PageCache::get): NULL-check HistoryItems passed to get()
        and remove(), to match the old semantics of HashMap. For clarity,
        ASSERT that add() is not called with NULL arguments.

2007-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5361106> Crash in user style sheet when loading webpage

        Null check m_frame.
        
        * dom/Document.cpp:
        (WebCore::Document::stylesheetLoaded):

2007-07-26  Geoffrey Garen  <ggaren@apple.com>

        Used `svn merge -r24646:24645' to revert project changes I accidentally
        checked in.

        * WebCore.xcodeproj/project.pbxproj:

2007-07-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/5241167> REGRESSION: PLT 1% slower due to r21793 
        (global page cache cap)
        
        I just measured a .1%-.2% regression in PLT average, but a .4% win in 
        PLT fastest run, so I think this regression is licked.

        Surprisingly, the combination of wtf data structures I originally used 
        for PageCache turned out to be too slow, so I reworked PageCache to use
        a hand-crafted linked list for LRU tracking (instead of ListHashSet), 
        to store its CachedPages in the HistoryItems to which they corresponded 
        (instead of using a HashMap), and to ref/deref HistoryItems manually
        (instead of using RefPtr, which would ref once for every reference in 
        the linked list).

        * history/HistoryItem.h: Added data members for PageCache data. Made
        PageCache a friend so it could access them. Ideally (from an 
        encapsulation perspective), we would store this data an independent 
        structure, but that's just too slow.

        * history/PageCache.cpp: Added a hand-crafted linked list for LRU 
        tracking.
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::add): Adopt the HistoryItem's ref when it's added.
        (WebCore::PageCache::remove): deref() the Historyitem when it's 
        removed.
        (WebCore::PageCache::prune):
        (WebCore::PageCache::addToLRUList):
        (WebCore::PageCache::removeFromLRUList):

        * history/PageCache.h:
        (WebCore::PageCache::get): Inlined just in case.

2007-07-26  Adam Treat  <treat@kde.org>

        Reviewed by George Staikos.

        Launch the context menu in the right place.

        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::setPlatformDescription):

2007-07-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - follow-up to previous change to avoid assertion failures in debug
        
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseText): hold JSLock when needed
        (WebCore::XMLHttpRequest::open): ditto
        (WebCore::XMLHttpRequest::didFinishLoading): ditto
        (WebCore::XMLHttpRequest::didReceiveData): ditto
        * xml/XMLHttpRequest.h:

2007-07-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5327912> 
        iDisk: Web iDisk & main iDisk appear blank
        
        Prepend any remaining text that scripts might have written.
        
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):

2007-07-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim, Darin, Oliver.

        - <rdar://problem/5329440> REGRESSION: Clicking links with the feed:// protocol in Safari 3 does nothing
        - Check for file:// urls when clicking links, not block all schemes that are treated as local.

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

2007-07-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed <rdar://problem/5300291> Optimize GC to reclaim big, temporary objects (like XMLHttpRequest.responseXML) quickly
        
        With this plus related JavaScriptCore changes, a number of XMLHttpRequest situations that
        result in huge data sets are addressed, including a single huge responseXML on an XMR done
        repeatedly, or accessing responseText repeatedly during loading of a single large XHR.
        
        In addition to the GC changes in JavaScriptCore, I changed responseText to be stored as a
        KJS::UString instead of a WebCore::String so that the JavaScript responseText value can
        share the buffer (indeed multiple intermediate responseTexts can share its buffer).

        
        First of all, here's some manual test cases that will each blow out the process VM without this fix,
        but will settle into decent steady state with.
        
        * manual-tests/memory: Added.
        * manual-tests/memory/MessageUidsAlreadyDownloaded2: Added.
        * manual-tests/memory/string-growth.html: Added.
        * manual-tests/memory/xhr-multiple-requests-responseText.html: Added.
        * manual-tests/memory/xhr-multiple-requests-responseXML.html: Added.
        * manual-tests/memory/xhr-multiple-requests.html: Added.
        * manual-tests/memory/xhr-repeated-string-access.xml: Added.

        And here's the actual code changes:
        
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): Record extra cost if the document is frameless (counting the nodes
        doesn't make a measurable performance difference here in any case I could find)
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::getValueProperty): Adjust for the fact that ressponseText
        is now stored as a UString.
        * bindings/js/kjs_binding.cpp:
        (KJS::jsOwnedStringOrNull): New helper.
        * bindings/js/kjs_binding.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseText): It's a UString!
        (WebCore::XMLHttpRequest::getResponseXML): handle the fact that m_responseText
        is a UString.
        (WebCore::XMLHttpRequest::XMLHttpRequest): ditto.
        (WebCore::XMLHttpRequest::abort): call dropProtection
        (WebCore::XMLHttpRequest::didFinishLoading): call dropProtection
        (WebCore::XMLHttpRequest::dropProtection): after removing our GC protection,
        report extra cost of this XHR's responseText buffer.
        * xml/XMLHttpRequest.h:

2007-07-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady.

        <rdar://problem/4796657> table deletion outline does not always follow the table size as editing occurs inside

        Change the outline element to position itself automaticlly using the top, left, bottom and right CSS properties.
        This made the container element redundant, so it has been removed. Now the outline element and the delete button
        both get appended to the target element and positioned based on that container element. This removes the need
        to update the width and height when the target contents changed.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::show): Change the style properties and remove the container element.
        (WebCore::DeleteButtonController::hide): Remove the button and outline from the target element.
        * editing/DeleteButtonController.h: Removed updateOutlineStyle, respondToChangedContents and m_containerElement.
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents): Remove the call to DeleteButtonController respondToChangedContents.

2007-07-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5344471>
        CrashTracer: [USER] 1 crash in Mail at WebCore::PluginTokenizer::writeRawData(char const*, int)
        
        Make sure to layout so we'll have a renderer. Also null-check the renderer for extra safety.
        
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):

2007-07-25  Brett Wilson  <brettw@chromium.org>

        Reviewed by Maciej, Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=14030

        Add ResourceHandle::setClient to resolve some messiness with handle
        releasing. Clear the client when ResourceLoader is going to release
        the handle to prevent crashes in the case where somebody still holds a
        reference (this doesn't seem to currently happen in practice). Add
        NULL-checking for ResourceHandle implementations using the client.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::fireBlockedFailure):
        (WebCore::ResourceHandle::setClient):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCancellation):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCancellation):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2007-07-25  Maxime Britto  <mbritto@pleyo.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11756
          REGRESSION: link targeting a frame in another window does not work
          <rdar://problem/5286420>

        Test: http/tests/navigation/target-frame-from-window.html

        Fix a typo error to really compare the present domain to the domain of the parent of the targeted frame.

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

2007-07-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14758
          REGRESSION: Repeated text after line break on facebook.com

        Test: fast/text/reset-emptyRun.html

        * platform/BidiResolver.h:
        (WebCore::::deleteRuns): Re-add a line that was removed for no reason at all
        during refactoring in r24485.
        * rendering/bidi.cpp:
        (WebCore::BidiState::deleteRuns): Ditto.

2007-07-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam and Justin.

        <rdar://problem/5141779> WebView editableDOMRangeForPoint: & moveDragCaretToPoint: returns last position in DOMText range

        Remove bridge implementation for editableDOMRangeForPoint: and moveDragCaretToPoint:. 
        Now use cross-platform code Editor::rangeForPoint and DragController::placeDragCaret instead.
        This required lifting local code from DragController.cpp into the shared methods
        Frame::visiblePositionForPoint and Frame::documentAtPoint.

        * WebCore.exp:
        * editing/Editor.cpp:
        (WebCore::Editor::rangeForPoint):
        * editing/Editor.h:
        * page/DragController.cpp:
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeDrag):
        (WebCore::DragController::placeDragCaret):
        * page/DragController.h:
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        (WebCore::Frame::documentAtPoint):
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:

2007-07-24  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Remove unused .strip files.

        * WebCore.xcodeproj/project.pbxproj:

2007-07-24  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5308492> Computed width for elements with box-sizing: border-box is not equal to the width set in the CSS

        Test: fast/css/getComputedStyle-border-box.html

        * css/CSSComputedStyleDeclaration.cpp: (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
          For the width and height properties, when you get the value from the renderer, use the renderer's box sizing value to determine the size.

2007-07-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/5355781>
        REGRESSION: reproducible crash in CoreFoundation!CFRunLoopFinished on Flash pages
        
        Null check the loader.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::start):

2007-07-24  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt and Adam.

        Fix for <rdar://problem/5130590> REGRESSION: style="width:1px" on <select> element no longer hides the element

        Removed hack that forced large padding on popup buttons.  Now we put that padding in the inner block, so that
        the specified width will be honored.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Set the padding on the inner block based on the metrics provided by the theme.
        (WebCore::RenderMenuList::controlClipRect): Clip to the intersection of the inner content box and the outer content box.
         This will leave room for the arrows which sit in the inner box padding, and if the inner box ever spills out of the outer box, 
         that will get clipped too.
        (WebCore::RenderMenuList::calcPrefWidths):  Add in the inner box's padding and border to the pref widths.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList): Only inflate the rect for the shadow if the rect is big enough to fit the whole control.
         Also, on Leopard, the NSCell will draw outside of a small rect, so add a clip for that case.
        (WebCore::RenderThemeMac::paintMenuListButton): Restrict font scale to make sure the arrows will actually fit in the bounds vertically.
         Don't draw the arrows if they won't fit horizontally.  Reset padding.  Since WinIE doesn't honor padding for popups, its not critical to
         support padding at this time.
        (WebCore::RenderThemeMac::adjustMenuListStyle): Don't set the padding here.  Instead, we're going to set the padding on the inner block of the select.
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle): ditto.
        (WebCore::RenderThemeMac::popupInternalPaddingLeft): Added.  Provides internal padding values for RenderMenuList.
        (WebCore::RenderThemeMac::popupInternalPaddingRight): ditto.
        (WebCore::RenderThemeMac::popupInternalPaddingTop): ditto.
        (WebCore::RenderThemeMac::popupInternalPaddingBottom): ditto.
        * rendering/RenderThemeMac.h:

        * rendering/RenderThemeSafari.cpp:  The same changes that were made to RenderThemeMac were made here, with variations for the arrow differences.
          This code should be refactored and shared, but now did not seem like the right time to do that refactoring.
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::RenderThemeSafari::paintMenuListButton):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::popupInternalPaddingLeft):
        (WebCore::RenderThemeSafari::popupInternalPaddingRight):
        (WebCore::RenderThemeSafari::popupInternalPaddingTop):
        (WebCore::RenderThemeSafari::popupInternalPaddingBottom):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        * rendering/RenderThemeSafari.h:

        * rendering/RenderTheme.h: Added to provide internal padding values for RenderMenuList.
        (WebCore::RenderTheme::popupInternalPaddingLeft):
        (WebCore::RenderTheme::popupInternalPaddingRight):
        (WebCore::RenderTheme::popupInternalPaddingTop):
        (WebCore::RenderTheme::popupInternalPaddingBottom):

2007-07-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Adam Roben & David Kilzer.

        replace the makeprop and makevalues shell scripts by equivalent perl versions. This is required to remove the last shell dependency when building QtWebKit on Windows.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * css/makeprop: Added.
        * css/makeprop.pl: Removed.
        * css/makevalues: Added.
        * css/makevalues.pl: Removed.

2007-07-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14714 REGRESSION: 
        ASSERTION FAILED: i < size() in Vector.h:401 on negative -webkit-
        column-width
        - and -
        http://bugs.webkit.org/show_bug.cgi?id=14718 REGRESSION: ASSERTION 
        FAILED: i < size() in Vector.h:401 on zero -webkit-column-count

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcColumnWidth): Make 1 the minimum value 
        for column-width and column-count. Since the spec does not address 
        what to do with negative values for these properties, we are 
        patching the rendering code instead of the parser.

2007-07-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.
        
        <rdar://problem/5355403>
        REGRESSION: 303A2 does not display pdf files with AdobeReader 8.1
        
        Close the file before handing off the file name to the plug-in.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::destroyStream):

2007-07-24  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14711
        RenderThemeGdk's buttons are state-agnostic (pressed, hovered)

        Remove unnecessary label from widget instances.
        Render check and radio widgets correctly.
        Determine the widget state and render it appropriately.

        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::determineState):
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):
        (WebCore::RenderThemeGdk::gtkButton):
        (WebCore::RenderThemeGdk::gtkCheckbox):
        (WebCore::RenderThemeGdk::gtkRadioButton):
        * platform/gdk/RenderThemeGdk.h:

2007-07-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        <rdar://problem/5356666> NSMenuItem's seen leaking on buildbot

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::releasePlatformDescription): Transfer ownership from the RetainPtr's CF-based retain
        count to the Foundation retain count so that callers of releasePlatformDescription can use -[NSObject release]
        to dispose of it in a manner that won't leak under Obj-C GC.
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::appendItem): Release platformItem as we were transferred its ownership by releasePlatformDescription.
        (WebCore::ContextMenu::insertItem): ditto.

2007-07-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14684
          Hebrew text in Safari chrome is reversed (LTR instead of RTL)

        Test: fast/text/drawBidiText.html

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * manual-tests/chrome-bidi-text.html: Added.
        * manual-tests/resources/chrome-bidi-text-window.html: Added.
        * platform/BidiReorderCharacters.cpp: Removed.
        * platform/BidiReorderCharacters.h: Removed.
        * platform/BidiResolver.h:
        (WebCore::BidiCharacterRun::start): Added accessor method.
        (WebCore::BidiCharacterRun::stop): Ditto.
        (WebCore::BidiCharacterRun::level): Ditto.
        (WebCore::BidiCharacterRun::next): Ditto.
        (WebCore::::appendRun): Added default implementation.
        * platform/TextStyle.h:
        (WebCore::TextStyle::setDirectionalOverride): Added accessor method.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::TextRunIterator::TextRunIterator): Added. A BidiResolver-
        compliant iterator over the characters in a TextRun.
        (WebCore::TextRunIterator::offset):
        (WebCore::TextRunIterator::increment):
        (WebCore::TextRunIterator::atEnd):
        (WebCore::TextRunIterator::current):
        (WebCore::TextRunIterator::direction):
        (WebCore::TextRunIterator::operator==):
        (WebCore::TextRunIterator::operator!=):
        (WebCore::GraphicsContext::drawBidiText): Added. Applies the Unicode
        Bidi Algorithm to the text and draws the resulting unidirectional runs
        in the right order and with the right directionality.
        * platform/graphics/GraphicsContext.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint): Replaced the use of a character buffer
        and BidiReorderCharacters with calling to drawBidiText(). Removed special
        handling of '-webkit-rtl-ordering:visual' because that CSS property is an
        implementation detail of WebCore's visual Hebrew support, and the UA stylesheet
        sets it to 'logical' for this form control. Authors can specify the ordering
        using the 'direction' and 'unicode-bidi' properties.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::isOneLeftToRightRun): Added. Checks if the text consists of
        a single left-to-right run, in which case it requires no bidi processing.
        (WebCore::doDrawTextAtPoint): Changed to call drawBidiText if the text
        is not entirely left-to-right.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject): Replaced the use of a
        character buffer in BidiReorderCharacters with calling to drawBidiText().
        Removed special handling of '-webkit-rtl-ordering:visual' for the same reason
        stated above.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground): Ditto. Also changed the
        run-rounding modes used when drawing to match those used when measuring.

2007-07-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Windows build fix, remove superfluous !

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

2007-07-23  Adam Roben  <aroben@apple.com>

        Add an assignment operator for BString that takes a BSTR

        Reviewed by Geoff and Oliver.

        * platform/win/BString.cpp:
        (WebCore::BString::operator=):
        * platform/win/BString.h:

2007-07-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Geoff.
        
        <rdar://problem/5354455> Word selection when right-clicking can be confusing (14728)

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): In non-editable content,
        only do word selection over text.  In editable content, we will continue
        to select images, line breaks and other elements on right-clicks, to match 
        TextEdit.  For now, in editable content, we'll live with the cases where 
        positionForPoint creates selections that aren't underneath the mouse.  These
        aren't regressions because we've always done word selection on right clicks
        in editable content.

2007-07-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5335354>
        REGRESSION(r21359-r21368): Can't edit inside RTEF editable region
        
        If Document::open is called and there's a pending load that has not yet started,
        that load should be cancelled.
        
        * dom/Document.cpp:
        (WebCore::Document::open):

2007-07-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/5242145> REGRESSION: Clicking on symbol in documentation often doesn't scroll to symbol

        A renderer for the anchor wasn't always available at the time parsing finished. So we need
        to bail out of gotoAnchor if stylesheets are pending and remember to call gotoAnchor later
        once all of the pending stylesheets load.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_gotoAnchorNeededAfterStylesheetsLoad to false.
        (WebCore::Document::stylesheetLoaded): If we have no more pending stylesheets, call gotoAnchor if needed.
        * dom/Document.h:
        (WebCore::Document::gotoAnchorNeededAfterStylesheetsLoad): New method.
        (WebCore::Document::setGotoAnchorNeededAfterStylesheetsLoad): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor): Bail early if the document still has pending stylesheets.
        * loader/FrameLoader.h: Make gotoAnchor() public.

2007-07-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/5327887> Printing Mail note (or Safari page) with misspelled word prints red underline

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        When printing, bail out without doing any work. Also moved a couple of lines down below another early
        bailout since they were pointless above it.

2007-07-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5353577> WebKit key event behaviour needs to better match other browsers keyevent behaviour
        <rdar://problem/5352152> REGRESSION (24399-24479): Pressing Enter in a search field at apple.com no longer starts a search with Korean IM
        <rdar://problem/5352649> WebKit should send keyDown event on autorepeat keyDowns
        http://bugs.webkit.org/show_bug.cgi?id=14690

        Perform Input Method call first so that our behaviour is determined by whether or not 
        the input method has actually handle the event, rather than by making guesses based 
        on the existences of marked text.  This fixes issues with IMs that have side effects
        even on events they do not handle.

        Refactored the code in order to improve clarity given the hoisting required by performing
        the IM call earlier.

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

2007-07-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5045711> 
        http://bugs.webkit.org/show_bug.cgi?id=12938
        Google calendar settings page crashes
        
        Move handling of checked radio buttons to a new class, HTMLFormElement::CheckedRadioButtons. 
        Each <form> element has an instance of this class. For radio buttons without a containing 
        form, the document has an instance of HTMLFormElement::CheckedRadioButtons where the
        state of those radio buttons will be stored.
        be stored.
        
        This also fixes another bug where removing a checked radio button that does not have a
        containing form would not remove the radio button from the checked radio buttons map,
        which could lead to a crash due to a dangling pointer.
        
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Document::checkedRadioButtons):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::removeFormElement):
        (WebCore::HTMLFormElement::CheckedRadioButtons::didCheckButton):
        (WebCore::HTMLFormElement::CheckedRadioButtons::checkedButtonForGroup):
        (WebCore::HTMLFormElement::CheckedRadioButtons::removeButtonIfChecked):
        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::checkedRadioButtons):
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::insertedIntoTree):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::checkedRadioButtons):
        (WebCore::HTMLInputElement::isKeyboardFocusable):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        * manual-tests/remove-form-node-with-radio-buttons-crash.html: Added.

2007-07-23  David Hyatt  <hyatt@apple.com>

        Fix for 5350587, hang in iExploder text 8101.  The code that painted outlines for continuations was buggy
        in that it assumed the chain was always inline-block-inline, but this is only true for the innermost chained
        continuation.  To make this more robust, we always just use the inline's containing block's containing block,
        which should be guaranteed to enclose all renderers in the continuation chain.  In addition, there is now a
        null check (to guarantee no more hangs) and an assert (to check if we hit this situation again where the block
        used to paint does not properly enclose the continuation chain).

        Reviewed by beth

        fast/inline/outline-continuation.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContinuationOutlines):
        * rendering/InlineFlowBox.cpp:
        (WebCore::RenderInline::paint):

2007-07-22  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        WARNING: NO TEST CASES ADDED OR CHANGED

        Add the WebKit/Gtk API to the buildsystem, ask qmake to create a
        pkg-config file and install headers and libraries.

        Start to emit signals from FrameLoaderClientGdk, hide the kit Frame
        inside the the FrameLoaderClientGdk.

        Move ChromeClientGdk to WebKit/gtk/WebCoreSupport

        * WebCore.pro:
        * loader/gdk/FrameLoaderClientGdk.cpp:
        * loader/gdk/FrameLoaderClientGdk.h:
        * platform/gdk/ChromeClientGdk.h: Removed.
        * platform/gdk/FrameGdk.cpp: Remove code not belonging here
        * platform/gdk/FrameGdk.h:
        * platform/gdk/ScrollViewGdk.cpp: The gdkDrawable won't exist at that time and it is fine
        * platform/gdk/TemporaryLinkStubs.cpp: Removed ChromeClientGdk stubs

2007-07-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        <rdar://problem/5353174> REGRESSION: 1% JavaScript performance regression fro Window refactoring (14717)
        http://bugs.webkit.org/show_bug.cgi?id=14717
        
        * bindings/js/kjs_window.cpp:
        * bindings/js/kjs_window.h:
        (KJS::Window::impl): inlined
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        (WebCore::DOMWindow::frame): inlined

2007-07-22  Darin Adler  <darin@apple.com>

        * platform/ContextMenu.cpp: Added missing include.

2007-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14682
        REGRESSION(24285-24399): alerts do not appear at W3C RTL test page

        Test: fast/dom/Window/window-function-name-getter-precedence.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Make sure to return functions
        before the custom name getter.

2007-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/5353263> ContextMenuItem and ContextMenu objects leaking (seen on buildbot)

        * platform/ContextMenu.cpp:
        (WebCore::separatorItem): Return an auto_ptr instead of a raw pointer, since this function
        creates an object that's the caller's responsibility to delete.
        (WebCore::createAndAppendFontSubMenu): Create the context menu on the stack, not the heap,
        since setSubMenu does not take ownership, and hence the objects were leaking.
        (WebCore::createAndAppendSpellingAndGrammarSubMenu): Ditto.
        (WebCore::createAndAppendSpellingSubMenu): Ditto.
        (WebCore::createAndAppendSpeechSubMenu): Ditto.
        (WebCore::createAndAppendWritingDirectionSubMenu): Ditto.

2007-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix <rdar://problem/5126394> REGRESSION: Crash after clicking back button in test application (13250)
          http://bugs.webkit.org/show_bug.cgi?id=13250

        * bindings/objc/WebScriptObject.mm:
        (_didExecute): Removed unnecessary check for isValid() since the _rootObject method already
        takes care of that check.
        (-[WebScriptObject _imp]): Made this return 0 if there is not a valid rootObject.
        (-[WebScriptObject _isSafeScript]): Made this always return false if there is not a valid
        rootObject, eliminating the need to check _rootObject for nil if the code is checking _isSafeScript.
        (-[WebScriptObject callWebScriptMethod:withArguments:]): Removed check of _rootObject, since it's
        immediately followed by a check of _isSafeScript. Removed awkward conversion of name from NSString *
        to KJS::Identifier and did it using WebCore::String instead -- makes it clear that there's no
        arbitrary JavaScript execution after _isSafeScript and before _imp, so we don't need to null-check
        the _imp pointer. Added a second check of _isSafeScript after calling get to get the function
        object, since arbitrary changes could occur in there, including navigation to a new frame.
        This also takes care of null checking the second call to _imp.
        (-[WebScriptObject evaluateWebScript:]): Removed check of _rootObject, since it's
        immediately followed by a check of _isSafeScript. Removed awkward conversion of script from NSString *
        to KJS::Identifier and did it using WebCore::String instead -- makes it clear that there's no
        arbitrary JavaScript execution after _isSafeScript and before _imp, so we don't need to null-check
        the _imp pointer.
        (-[WebScriptObject setValue:forKey:]): Removed check of _rootObject, since it's
        immediately followed by a check of _isSafeScript. Removed awkward conversion of key from NSString *
        to KJS::Identifier and did it using WebCore::String instead -- makes it clear that there's no
        arbitrary JavaScript execution after _isSafeScript and before _imp, so we don't need to null-check
        the _imp pointer.
        (-[WebScriptObject valueForKey:]): Ditto.
        (-[WebScriptObject removeWebScriptKey:]): Ditto.
        (-[WebScriptObject stringRepresentation]): Removed check of _rootObject, since it's
        immediately followed by a check of _isSafeScript. Removed unnecessary local variable
        and const_cast from the call to the _imp method.
        (-[WebScriptObject webScriptValueAtIndex:]): Removed check of _rootObject, since it's
        immediately followed by a check of _isSafeScript.
        (-[WebScriptObject setWebScriptValueAtIndex:value:]): Ditto.
        (-[WebScriptObject JSObject]): Ditto.

2007-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson and John Sullivan.

        - speculative fix for <rdar://problem/5337500> CrashTracer: [USER] 4 crashes in Mail
          at WebCore::HTMLImageElement::isURLAttribute(WebCore::Attribute*) const

        * editing/markup.cpp: Added AttributeChange class.
        (WebCore::completeURLs): Changed function so that all the URL completion is done in
        a separate pass after finding all the URL attributes. This is safer, since actually
        applying an attribute change could have any arbitrary effect on the document; it's
        tricky to iterate a document while it's being modified and we don't have the checks
        here that would be needed to make that work in pathological cases.

2007-07-18  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/5350604> REGRESSION: Crash in inspector controller code after
          clicking back button in test application (14337)

        * page/InspectorController.cpp: (WebCore::InspectorController::addScriptResource):
        Replace an assertion that was firing with some code that at least doesn't immediately crash.

2007-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - improve the fix for <rdar://problem/5298816> Crash redirecting message,
          in -[SharedBufferData initWithSharedBuffer:]; fixes a crash seen on the buildbot

        * loader/DocLoader.cpp: (WebCore::DocLoader::~DocLoader): Call setDocLoader(0) on all
        the resources so they don't try to use a stale DocLoader pointer later.

2007-07-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig.

        - fixed typos and markup in the following manual tests

        * manual-tests/accidental-strict-mode.html:
        * manual-tests/caretScrolling.html:
        * manual-tests/close-on-closedWindow.html:

2007-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for <rdar://problem/5352013>
        The computed style for background-position is wrong for the initial value

        - Set the initial value for background-position-x and background-position-y (and
          therefore background-position) to 0% instead of 0px.

        * rendering/RenderStyle.cpp:
        (WebCore::BackgroundLayer::BackgroundLayer):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::initialBackgroundXPosition):
        (WebCore::RenderStyle::initialBackgroundYPosition):

2007-07-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele and Andersca

        <rdar://problem/5336105> - WebBackForwardList created from scratch is unusable (always leads to crash)

        * WebCore.exp: Export the BackForwardList c'tor so WebKit can create one explicitly

2007-07-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Fix for <rdar://problem/5351901>
        Computed value of border-position should return a CSSValueList, not a CSSPrimitiveValue

        - Return a space separated CSSValueList for background-position
          instead of a CSSPrimitiveValue (string type).
        - Remove the "else if (renderer)" case as it never returns a different
          value than just calling length.value().
        - Make background-position-x and background-position-y behave like
          background-position.  Fix case of initial value return 'auto' instead
          of 0.

        Test: fast/css/getComputedStyle-background-position.html

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

2007-07-20  Geoffrey Garen  <ggaren@apple.com>

        Build fix for non-Mac platforms.
        
        * bindings/js/GCController.cpp:

2007-07-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        If the style sheet requested is a user style sheet, don't store it in the DocLoader's resource map;
        user style sheets can outlive their doc loaders.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet):

2007-07-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.

        <rdar://problem/5109817> Ctrl-click on word in non-editable text doesn't select it
        
        * bridge/EditorClient.h: Removed a client method for enabling/disabling
        word selection on right clicks.
        * editing/Editor.cpp: Ditto.
        * editing/Editor.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Select the
        word underneath the mouse regardless of whether its editable.

2007-07-20  Ada Chan  <adachan@apple.com>

        Reviewed by Darin and Adam.

        <rdar://problem/5338385> Fixed infinite loop in ScrollView::scrollRectIntoViewRecursively().
        Also removed an unused local variable.

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

2007-07-21  Antti  <antti@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5305788>
        REGRESSION: Safari sometimes loads IE-specific stylesheet on www.apaema.org
        
        Pick the preferred style sheet set based on document order even if the sheet is still loading. Previously 
        the set was chosen based on which stylesheet happened to arrive first. Just fix the problem at hand 
        and resist urge to start refactoring this function.

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

2007-07-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fix for <rdar://problem/5351252>
        Computed value for -webkit-background-size and border-spacing
        should be space separated CSSValueLists.

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

2007-07-20  Geoffrey Garen  <ggaren@apple.com>

        Suggested by Darin Adler.
        
        Slight tweak to my last commit: changed gcController() to return a 
        reference instead of a pointer.

2007-07-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=12900 Page tear-down 
        forces garbage collection once per frame

        Also fixed <rdar://problem/5286989> GC on window close does not always 
        bring the JS object count down to 0
        
        Implemented a 0-delay GC timer in WebCore. Instead of forcing GC
        immediately, code that thinks it has created a lot of garbage starts
        the timer. This has two advantages: 

        1) Multiple GCs can coalesce. In my pathological test case, this 
        improves performance by an order of magnitude. 
        
        2) Conservative marking is less likely to keep alive important dead
        objects, like the window object, because the stack is small and free of
        JS processing when the timer fires.

        Added GCController.h/.cpp, sometimes blindly:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        Added singleton that implements GC on a 0-delay timer:
        * bindings/js/GCController.h: Added.
        * bindings/js/GCController.cpp: Added.
        
        Changed Collector::collect() calls below to call to the singleton:
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::clear):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::clear):
        
        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Removed previous slightly hackish attempt to
        avoid conservative marking of the window object.

2007-07-20  Anders Carlsson  <andersca@apple.com>
    
        Reviewed by Darin.

        <rdar://problem/5298816> Crash redirecting message, in -[SharedBufferData initWithSharedBuffer:]
        
        Have cached resources keep track of what DocLoader they belong to. This is so that they can remove themselves
        from the DocLoader's resource map when they're destroyed when the cache is disabled.
        
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::setDocLoader):

2007-07-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5153021> and http://bugs.webkit.org/show_bug.cgi?id=13364

        The issue here was that if a document in a subframe was loaded from a URL, but then a script did 
        document.open or document.write during parsing, we would overwrite the document's url and baseurl 
        with the parent frame's url.  WRONG!

        * dom/Document.cpp:
        (WebCore::Document::open): Only set the url and baseURL in document.open if they are still empty or about:blank

2007-07-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5326303> REGRESSION: blur event fires upon navigating away from a page with focused element


        
        The proximate cause was the recent change to keep focus on the
        WebHTMLView when switching views. But the reason this happend was
        that didCommitLoadForFrame got called at a time when the new view
        was in place, but the old document was still there. This was a
        longstanding problem with the delegate, and fixing it cleans it
        up.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): Don't send dispatchWindowObjectAvailable if
        caller asked not to (this is to allow order of delegates to be the same).
        (WebCore::FrameLoader::transitionToCommitted): Don't emit didCommitLoadForFrame here.
        (WebCore::FrameLoader::receivedFirstData): Instead do it here, after calling begin(),
        so the new document is set up.
        * loader/FrameLoader.h: Add new optional parameter to begin().

2007-07-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Update for fix for http://bugs.webkit.org/show_bug.cgi?id=14646
        <rdar://problem/5340449>

        - Return a CSSValueList instead of CSSValue (with a Pair type) for
          computed values of border radii.
        - Add ability to CSSValueList to print out a space separated list
          instead of a comma.
        - Add border radii to list of computed styles that we create and can
          iterate over.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::getBorderRadiusCornerValue):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList):
        (WebCore::CSSValueList::cssText):
        * css/CSSValueList.h:

2007-07-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=14626
          Make bidiReorderCharacters independent of RenderBlock

        No layout test possible because there is no change in functionality.

        This patch generalizes RenderBlock's implementation of the Unicode Bidi Algorithm
        in the form of the BidiResolver class template. An instance of a BidiResolver class
        can generate a sequence of runs with corresponding level and override attributes,
        given a range specified by start and end iterators. The iterators can optionally
        call back to the BidiResolver instance to push or pop explicit embedding levels.

        The patch replaces BidiState with a specialization of BidiResolver that uses
        BidiIterators and generates BidiRuns. It also eliminates some of the file statics
        in bidi.cpp, instead relying on BidiResolver data members.

        The patch makes the BidiContext part of BidiStatus, thus making BidiStatus the
        entire state that needs to be saved and restored in order to restart the bidi
        algorithm at a given point. Previously, you had to keep and pass around two
        separate structures, namely the BidiContext and the BidiStatus.

        bidiReorderCharacters is implemented without relying on render objects, using
        a BidiResolver specialization that uses simple character buffer iterators and
        simple run structures.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/BidiContext.cpp: Added.
        (WebCore::operator==):
        * platform/BidiContext.h: Added.
        (WebCore::BidiContext::BidiContext):
        (WebCore::BidiContext::ref):
        (WebCore::BidiContext::deref):
        (WebCore::BidiContext::parent):
        (WebCore::BidiContext::level):
        (WebCore::BidiContext::dir):
        (WebCore::BidiContext::override):
        * platform/BidiReorderCharacters.cpp: Added.
        (WebCore::CharacterBufferIterator::CharacterBufferIterator):
        (WebCore::CharacterBufferIterator::offset):
        (WebCore::CharacterBufferIterator::increment):
        (WebCore::CharacterBufferIterator::atEnd):
        (WebCore::CharacterBufferIterator::current):
        (WebCore::CharacterBufferIterator::direction):
        (WebCore::CharacterBufferIterator::operator==):
        (WebCore::CharacterBufferIterator::operator!=):
        (WebCore::::appendRun):
        (WebCore::bidiReorderCharacters):
        * platform/BidiReorderCharacters.h: Added.
        * platform/BidiResolver.h: Added.
        (WebCore::BidiStatus::BidiStatus):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::BidiCharacterRun::BidiCharacterRun):
        (WebCore::BidiCharacterRun::reversed):
        (WebCore::BidiCharacterRun::dirOverride):
        (WebCore::BidiCharacterRun::next):
        (WebCore::BidiResolver::):
        (WebCore::BidiResolver::context):
        (WebCore::BidiResolver::setContext):
        (WebCore::BidiResolver::setLastDir):
        (WebCore::BidiResolver::setLastStrongDir):
        (WebCore::BidiResolver::setEorDir):
        (WebCore::BidiResolver::dir):
        (WebCore::BidiResolver::setDir):
        (WebCore::BidiResolver::status):
        (WebCore::BidiResolver::setStatus):
        (WebCore::BidiResolver::adjustEmbedding):
        (WebCore::BidiResolver::setAdjustEmbedding):
        (WebCore::BidiResolver::firstRun):
        (WebCore::BidiResolver::lastRun):
        (WebCore::BidiResolver::runCount):
        (WebCore::::embed):
        (WebCore::::deleteRuns):
        (WebCore::::reverseRuns):
        (WebCore::::createBidiRunsForLine):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * rendering/RenderBlock.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::childRemoved):
        (WebCore::RootInlineBox::lineBreakBidiStatus):
        (WebCore::RootInlineBox::setLineBreakInfo):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/bidi.cpp:
        (WebCore::BidiIterator::BidiIterator):
        (WebCore::BidiState::deleteRuns):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::BidiState::addRun):
        (WebCore::appendRunsForObject):
        (WebCore::BidiState::appendRun):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::buildCompactRuns):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::skipWhitespace):
        * rendering/bidi.h:
        (WebCore::BidiRun::BidiRun):
        (WebCore::BidiRun::next):

2007-07-20  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix for <rdar://problem/5331723> <rdar://problem/5331723> Safari gives error
          103 for URLs that Adobe Lightroom's Preview feature produces, with ":1" in the hostname

        Test: fast/loader/file-URL-with-port-number.html

        * platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::portAllowed):
        Don't do any port blocking for file URLs.

2007-07-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14689
          REGRESSION (3.0.2-TOT): <select> menu items have incorrect background color

        * manual-tests/item-background.html: Added.
        * platform/PopupMenuClient.h:
        * platform/graphics/Color.cpp:
        (WebCore::blendComponent): Renamed the static method blend() to this.
        (WebCore::Color::blend): Added. Compositing (in "normal" or "source over"
        blend mode) B.blend(C) over A is equivalent to compositing C over the
        result of compositing B over A.
        (WebCore::Color::blendWithWhite): Changed for the above rename.
        * platform/graphics/Color.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint): Changed to use itemBackgroundColor().
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemBackgroundColor): Added. Returns the color
        that would result from overlaying the item's background color over the
        menu's background color over solid white. Note that clientStyle() cannot
        be used for the menu's background color, since background color is not
        inherited by the inner block (the regression resulted from changing
        clientStyle() to return the inner block's style), and that the color
        returned from this method is guaranteed to be opaque.
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::itemBackgroundColor): Added.
        * rendering/RenderTextControl.h:

2007-07-20  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14642
        REGRESSION(r24064-24096): Reflection type effect in canvas tag broke

        Do not stop the fill/stroke operation when encountering an empty path.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Remove some files that are not used anymore.

        * platform/qt/FontCacheQt.cpp: Removed.
        * platform/qt/FontDataQt.cpp: Removed.
        * platform/qt/FontPlatformData.h: Removed.
        * platform/qt/FontPlatformDataQt.cpp: Removed.
        * platform/qt/GlyphPageTreeNodeQt.cpp: Removed.

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        use the correct font for spaces.

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        spaces where not correctly taken into account for both offsetForPosition and selectionRectForText. Because of that selections sort of worked in LTR text, but completely failed in RTL.

        * platform/qt/FontQt.cpp:
        (WebCore::TextRunComponent::isSpace):
        (WebCore::TextRunComponent::TextRunComponent):
        (WebCore::generateComponents):
        (WebCore::Font::drawText):
        (WebCore::Font::offsetForPosition):
        (WebCore::Font::selectionRectForText):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix up some smaller issues in selection handling. It's still not perfect and selections in mixed rtl/ltr text are still broken, but it's getting there.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::offsetForPosition):
        (WebCore::cursorToX):
        (WebCore::Font::selectionRectForText):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make offsetForPosition and selectionRectForText work correctly with small caps.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::offsetForPosition):
        (WebCore::cursorToX):
        (WebCore::Font::selectionRectForText):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        clip the drawn text correctly when needed.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Fix offsetForPosition and selectionRectForText methods.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::offsetForPosition):
        (WebCore::cursorToX):
        (WebCore::Font::selectionRectForText):

2007-07-20  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix BiDi text rendering.

        * platform/qt/FontQt.cpp:
        (WebCore::TextRunComponent::TextRunComponent):
        (WebCore::generateComponents):
        (WebCore::Font::drawText):

2007-07-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Move FTPDirectoryTokenizer::m_templateDocumentData to be a function-scoped static
        to avoid creating a global initializer.  This fixes the build for x86_64.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::loadDocumentTemplate):

2007-07-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/5347849> Cache eviction of live decoded data is 
        thrash-y
        
        The solution here is to evict live decoded data based on a strict LRU
        model. This should work well as a "scrolling window."

        With this patch, I see a substantial reduction in CPU while scrolling
        through a page with large images on a low memory system. Layout tests
        pass.

        * loader/Cache.h: Changed from a size-based vector of LRU lists to a
        single LRU list in order to implement strict LRU.
        
        * loader/CachedResource.h: Removed tracking of access count, since that
        was the old cache eviction model.

2007-07-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5076807> REGRESSION: Can't undo conversion of inline text (by hitting ESC)
        <rdar://problem/5346167> DOM key events triggered during IME composition differ in webkit/mac vs all windows browsers

        We now basically match the behaviour of IE/Windows. This means that during composition keydown and autorepeat
        keys generate keydown events with a keyCode of 229, which correlates to the windows VK_PROCESSKEY message.
        keyup events are generated with the keyCode of the actual key that was pressed.

        The only difference is on the first keydown of a composition, in which IE will use keyCode == 229, and we will
        send an event with the keyCode for the actual key that was pressed.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::setWindowsKeyCode):

2007-07-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        <rdar://problem/5134929> REGRESSION: Colon detected as delimiting an empty port is stripped

        The fix for this was in KURL::parse() which had a slightly changed rule that would strip the colon if there
        was no port.

        An additional canonicalization fix was made in window.location.host to match the expected behavior of leaving
        the colon in place - before this fix, if the colon was there but no port was there, we'd see the port as 0.

        * bindings/js/kjs_window.cpp:
        (KJS::Location::put): Call setHostAndPort instead of setHost and setPort seperately

        * manual-tests/location-host-canonicalization.html: Added.

        * platform/KURL.cpp:
        (WebCore::KURL::setHostAndPort): Set the host and port as one string component then reparse the URL
        (WebCore::KURL::parse): Change one line to consider the empty colon as part of the host name
        * platform/KURL.h:

2007-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5288617>
        Crash playing a very large QuickTime movie in Safari
        
        <rdar://problem/5271174>
        http://bugs.webkit.org/show_bug.cgi?id=14148
        LEAK: Serious memory consumption and leak when loading QT movies.
        
        Don't keep plugin stream data in memory since some plugin resources (like QT movies)
        can be really big. If a plug-in wants data in a file, create a file and write data to it 
        as it's coming from the wire, instead of using a big buffer.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setShouldBufferData):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:

2007-07-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed <rdar://problem/5348384> Restore old return value behavior of 
        stringByEvaluatingJavaScriptFromString
        
        Return an empty string unless you have a string, boolean, or number
        result.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):

2007-07-19  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14666
          remove unused xxx-encodings.txt for all platforms other than Mac

        * platform/gdk/gdk-encodings.txt: Removed.
        * platform/win/win-encodings.txt: Removed.
        * platform/wx/wx-encodings.txt: Removed.

        * platform/character-sets.txt: Moved into mac subdirectory since it's only used for Mac; at some
        point I hope to remove it completely.
        * platform/make-charset-table.pl: Ditto.
        * platform/mac/character-sets.txt: Copied from platform/character-sets.txt.
        * platform/mac/make-charset-table.pl: Copied from platform/make-charset-table.pl.

        * DerivedSources.make: Moved CharsetData.cpp into the MACOS section.
        Changed the build rule to use Mac-specific paths for everything and got rid of
        make variables.

        * WebCore.vcproj/build-generated-files.sh: Removed code to set ENCODINGS_FILE and ENCODINGS_PREFIX.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * make-generated-sources.sh: Ditto.

        * Projects/gdk/webcore-gdk.bkl: Removed code to pass gdk-encodings.txt to make-generated-sources.sh.
        * Projects/wx/webcore-wx.bkl: Ditto, but for wx-encodings.txt.

2007-07-19  Antti  <antti@apple.com>

        Reviewed by Darin.

        Fix <rdar://problem/5257371>
        Dashcode Client crash when clicking on placemarks in Maps widget in WebCore::DeprecatedPtrListImpl::addIterator
        
        FlexibleBoxes should never have inline children. Don't move children out from last remaining anonymous block.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): real fix
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox): just to be sure, this is checked elsewhere too

2007-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5322268>
        Safari Crash at http://www.exlibrisgroup.com/sfx_openurl.htm
        
        Add a real copy constructor and assignment operator for CollectionInfo
        so that the vectors in the cache maps will be copied correctly.
        
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::CollectionInfo::CollectionInfo):
        (WebCore::HTMLCollection::CollectionInfo::swap):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::CollectionInfo::operator=):
        (WebCore::HTMLCollection::CollectionInfo::copyCacheMap):

2007-07-19  David Hyatt  <hyatt@apple.com>

        Fix for 5237574, Colloquy main view does not size correctly.  Make
        sure to reset the baseilne when calculating a row's height/baseline, so
        that old values don't stick around.

        Reviewed by Tim Hatcher

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

2007-07-19  Antti  <antti@apple.com>

        Reviewed by John.
        
        Fix <rdar://problem/5346697>
        REGRESSION(r23773): Visibile children on invisible layer are not painted (fast/layers/layer-visibility.html fails)
        
        Test m_hasVisibleContent instead of renderer()->style()->visibility(). 
        This takes children into account too.

        Regression spotted by Mitz.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2007-07-18  Oliver Hunt  <oliver@apple.com>

        Rubber stamped by maciej

        Rollout patch from r24437.

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

2007-07-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Kevin M.

        Fix for <rdar://problem/5346167> DOM key events triggered during
                IME composition differ in webkit/mac vs all windows browsers

        We no longer send DOM key events during IME composition.  This behaviour 
        matches the behaviour of WebKit/Win.

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

2007-07-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14646
        WebKit border radius properties are unavailable via JavaScript

        Test: fast/dom/getComputedStyle-borderRadius.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusCornerValue): Helper function that returns a single value if
        width and the height of the corner radius are equal, and otherwise a pair.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2007-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5262136> Double form repost alert going forward on britishairways.com
        
        When checking if the request has changed and a new policy callback needs to be sent, 
        ignore the request headers. NSURLConnection in Leopard will always call willSendRequest,
        with a request that was different from the one passed to -[NSURLConnection connectionWithRequest:]
        (a few Accept headers are added).

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkNavigationPolicy):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::equalIgnoringHeaderFields):
        (WebCore::operator==):
        * platform/network/ResourceRequestBase.h:

2007-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5340098>
        http://bugs.webkit.org/show_bug.cgi?id=13366
        REGRESSION (r10935): AOL beta music player doesn't play

        The AOL beta music player has a typo, causing it to create an <embed"> element inside of
        an <object> element
        Because of this, it will not be treated as an embed tag, so its name will not be added
        to the document's named item map. Furthermore, since the <object> contains a child that
        is not a <param>, the object's name won't be added either.
        
        The (somewhat ugly) fix is to add <object> to the named map only if it has <param> or
        unknown elements as children.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5343767> Should have a way to disable the Web Inspector

        This change facilitates the ability to turn the Web Inspector on and off.

        Makes the InspectorClient be required to create a new Page. This also means that
        InspectorController will never be NULL. Adds a new function on Page to test
        if the inspector is enabled.

        * WebCore.exp: New symbol for the Page constructor.
        * WebCore.pro: Add InspectorClientGdk.cpp.
        * WebCoreSources.bkl: ditto.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent): Don't null check the InspectorCOntroller.
        (WebCore::FrameLoader::dispatchDidCommitLoad): Ditto.
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest): Ditto.
        (WebCore::FrameLoader::dispatchWillSendRequest): Ditto.
        (WebCore::FrameLoader::dispatchDidReceiveResponse): Ditto.
        (WebCore::FrameLoader::dispatchDidReceiveContentLength): Ditto.
        (WebCore::FrameLoader::dispatchDidFinishLoading): Ditto.
        (WebCore::FrameLoader::dispatchDidLoadResourceFromMemoryCache): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Ask the InspectorController if it is enabled.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::enabled): Ask the Page's settings if developer extras are enabled.
        (WebCore::InspectorController::inspect): Check if the InspectorController is enabled.
        (WebCore::InspectorController::focusNode): Ditto.
        (WebCore::InspectorController::highlight): Ditto.
        (WebCore::InspectorController::hideHighlight): Ditto.
        (WebCore::InspectorController::addMessageToConsole): Ditto.
        (WebCore::InspectorController::attachWindow): Ditto.
        (WebCore::InspectorController::detachWindow): Ditto.
        (WebCore::InspectorController::windowScriptObjectAvailable): Ditto.
        (WebCore::InspectorController::didCommitLoad): Ditto.
        (WebCore::InspectorController::frameDetachedFromParent): Ditto.
        (WebCore::InspectorController::didLoadResourceFromMemoryCache): Ditto.
        (WebCore::InspectorController::identifierForInitialRequest): Ditto.
        (WebCore::InspectorController::willSendRequest): Ditto.
        (WebCore::InspectorController::didReceiveResponse): Ditto.
        (WebCore::InspectorController::didReceiveContentLength): Ditto.
        (WebCore::InspectorController::didFinishLoading): Ditto.
        (WebCore::InspectorController::didFailLoading): Ditto.
        * page/InspectorController.h:
        * page/Page.cpp:
        (WebCore::Page::Page): Require an InspectorClient.
        (WebCore::Page::~Page): Always call pageDestroyed on the InspectorController.
        (WebCore::Page::inspectorEnabled): Check the WebCore settings if the developer extras are enabled.
        * page/Page.h:
        * page/gdk/InspectorClientGdk.cpp: Added.
        (WebCore::InspectorClientGdk::inspectorDestroyed): Empty stub calling notImplemented.
        (WebCore::InspectorClientGdk::createPage): Ditto.
        (WebCore::InspectorClientGdk::showWindow): Ditto.
        (WebCore::InspectorClientGdk::closeWindow): Ditto.
        (WebCore::InspectorClientGdk::attachWindow): Ditto.
        (WebCore::InspectorClientGdk::detachWindow): Ditto.
        (WebCore::InspectorClientGdk::highlight): Ditto.
        (WebCore::InspectorClientGdk::hideHighlight): Ditto.
        (WebCore::InspectorClientGdk::inspectedURLChanged): Ditto.
        * page/gdk/InspectorClientGdk.h: Added.
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Pass in a dummy InspectorClient.
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyInspectorClient::~SVGEmptyInspectorClient): Empty dummy implementation.
        (WebCore::SVGEmptyInspectorClient::inspectorDestroyed): Ditto.
        (WebCore::SVGEmptyInspectorClient::createPage): Ditto.
        (WebCore::SVGEmptyInspectorClient::showWindow): Ditto.
        (WebCore::SVGEmptyInspectorClient::closeWindow): Ditto.
        (WebCore::SVGEmptyInspectorClient::attachWindow): Ditto.
        (WebCore::SVGEmptyInspectorClient::detachWindow): Ditto.
        (WebCore::SVGEmptyInspectorClient::highlight): Ditto.
        (WebCore::SVGEmptyInspectorClient::hideHighlight): Ditto.
        (WebCore::SVGEmptyInspectorClient::inspectedURLChanged): Ditto.

2007-07-18  Anders Carlsson  <andersca@apple.com>

        Make some headers private instead of project.
        
        * WebCore.xcodeproj/project.pbxproj:

2007-07-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej and Kevin Decker

        - fixed <rdar://problem/5315926> REGRESSION: ~.4% PLT regression from r23949 (canonicalization change)

        * loader/mac/LoaderNSURLExtras.m:
        (canonicalURL):
        Rolled out the fix for 5249730 that caused this regression. 5249730 is addressed a different way now.

2007-07-18  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::objectContentType):
        * platform/graphics/win/ImageWin.cpp:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor):

2007-07-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Rename MimeTypeRegistry to MIMETypeRegistry and xmlhttprequest to XMLHttpRequest

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_dom.cpp:
        * dom/Document.cpp:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        * loader/mac/LoaderNSURLExtras.m:
        (suggestedFilenameWithMIMEType):
        * platform/MIMETypeRegistry.cpp: Copied from platform/MimeTypeRegistry.cpp.
        (WebCore::initialiseSupportedImageMIMETypes):
        (WebCore::initialiseMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isJavaAppletMIMEType):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes):
        * platform/MIMETypeRegistry.h: Copied from platform/MimeTypeRegistry.h.
        * platform/MimeTypeRegistry.cpp: Removed.
        * platform/MimeTypeRegistry.h: Removed.
        * platform/gdk/MIMETypeRegistryGdk.cpp: Copied from platform/gdk/MimeTypeRegistryGdk.cpp.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/gdk/MimeTypeRegistryGdk.cpp: Removed.
        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/Image.cpp:
        (WebCore::Image::supportsType):
        * platform/mac/DragDataMac.mm:
        * platform/mac/MIMETypeRegistryMac.mm: Copied from platform/mac/MimeTypeRegistryMac.mm.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/mac/MimeTypeRegistryMac.mm: Removed.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage):
        * platform/qt/MIMETypeRegistryQt.cpp: Copied from platform/qt/MimeTypeRegistryQt.cpp.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/qt/MimeTypeRegistryQt.cpp: Removed.
        * platform/win/MIMETypeRegistryWin.cpp: Copied from platform/win/MimeTypeRegistryWin.cpp.
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/win/MimeTypeRegistryWin.cpp: Removed.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        * xml/xmlhttprequest.cpp: Removed.
        * xml/xmlhttprequest.h: Removed.
        * xml/XMLHttpRequest.cpp: Copied from xml/xmlhttprequest.cpp.
        * xml/XMLHttpRequest.h: Copied from xml/xmlhttprequest.h.

2007-07-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Rename csshelper.h, csshelper.cpp, cssparser.h, cssparser.cpp,
        cssstyleselector.h, and cssstyleselector.cpp to be CamelCase.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMHTML.mm:
        * css/CSSGrammar.y:
        * css/CSSMediaRule.cpp:
        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSStyleSheet.cpp:
        * css/MediaList.cpp:
        * css/MediaQueryExp.cpp:
        * css/csshelper.cpp: Removed.
        * css/csshelper.h: Removed.
        * css/CSSHelper.cpp: Copied from css/csshelper.cpp.
        * css/CSSHelper.h: Copied from css/csshelper.h.
        * css/cssparser.cpp: Removed.
        * css/cssparser.h: Removed.
        * css/CSSParser.cpp: Copied from css/cssparser.cpp.
        * css/CSSParser.h: Copied from css/cssparser.h.
        * css/cssstyleselector.cpp: Removed.
        * css/cssstyleselector.h: Removed.
        * css/CSSStyleSelector.cpp: Copied from css/cssstyleselector.cpp.
        * css/CSSStyleSelector.h: Copied from css/cssstyleselector.h.
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/StyledElement.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/markup.cpp:
        * html/CanvasGradient.cpp:
        * html/CanvasRenderingContext2D.cpp:
        * html/CanvasStyle.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLBaseElement.cpp:
        * html/HTMLBodyElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageLoader.cpp:
        * html/HTMLLinkElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLOptGroupElement.cpp:
        * html/HTMLOptionElement.cpp:
        * html/HTMLSelectElement.cpp:
        * html/HTMLTableElement.cpp:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTokenizer.cpp:
        * ksvg2/css/SVGCSSParser.cpp:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGUseElement.cpp:
        * page/DOMWindow.cpp:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        * rendering/HitTestResult.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderStyle.cpp:
        * rendering/RenderThemeMac.mm:

2007-07-18  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Adam

        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile): Correct license on this newly checked in file from yesterday

2007-07-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - fixed <rdar://problem/5340603> REGRESSION: javascript being written to the screen in Safari

        Test Case: fast/tokenizer/badscript.html
        
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Don't apply our self-closing
        <script> quirk in cases where the / appears in a mangled attribtue
        value.

2007-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=13618
        Don't set link targets to "_blank" on middle-click; rely on the policy
        delegate to do the right thing.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):

2007-07-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4799967> Safari and other WebKit 
        apps sometimes crash in WebCore::FontData::platformInit

        Always retain/release our font handle, instead of only retaining
        in the presence of GC.

        * platform/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):

2007-07-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Fix for <rdar://problem/5333957>
                http://bugs.webkit.org/show_bug.cgi?id=14610

        Original patch by Feng Qian.

        - Clear the selection object when disconnecting a frame.

        Test: http/tests/security/cross-frame-access-selection.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::clear):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::clearScriptProxy):
        (WebCore::Frame::clearDOMWindow):
        * page/Frame.h:

2007-07-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5154518> REGRESSION: Hitting return does
        nothing in ruby terminal at http://tryruby.hobix.com/

        Calling event.preventDefault() during a keydown event should not 
        prevent the keypress event from firing.

        * WebCore.xcodeproj/project.pbxproj:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::defaultKeyboardEventHandler):

2007-07-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4993463> 
        http://bugs.webkit.org/show_bug.cgi?id=12732
        REGRESSION: Comments fields on ircimages not showing up in nightly

        Postpone setting the frame name to just right before we request the frame. Otherwise, 
        two calls to FrameTree::uniqueChildName will return the same frame name and in that case only
        one Frame object will actually be created and multiple iframe elements will refer to it.
        
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::setNameAndOpenURLCallback):
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        (WebCore::HTMLFrameElementBase::attach):
        * html/HTMLFrameElementBase.h:

2007-07-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        Required for <rdar://problem/4516185> - FTP Directory Listings

        * WebCore.vcproj/WebCore.vcproj: Added SharedBufferWin
        
        * platform/SharedBuffer.cpp: Windows doesn't get the default empty resource anymore
        * platform/win/SharedBufferWin.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):

2007-07-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Tweak the class names we give to the icon table cell to make it easier to style

        * loader/FTPDirectoryDocument.cpp:
          (WebCore::FTPDirectoryTokenizer::appendEntry): The the table cell a "IconCell" class name and
          either a "FileType" or "DirectoryType" class name depending on the type

2007-07-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by NOBODY.

        Build fix after r24366 add an additional ResourceRequest parameter to
        the download method.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::download):
        * loader/gdk/FrameLoaderClientGdk.h:

2007-07-17  Adam Roben  <aroben@apple.com>

        Fix Bug 14324: Cannot remove/customize the "Inspect Element" contextual menu item
        http://bugs.webkit.org/show_bug.cgi?id=14324

        Reviewed by Tim.

        No regression test possible.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Add the
        Inspect Element item to the menu before passing it to the
        ContextMenuClient so that the UI delegate has a chance to
        modify/remove the item.

2007-07-17  Adam Roben  <aroben@apple.com>

        Remove ContextMenuClient::shouldIncludeInspectElementItem

        Reviewed by Tim.

        No regression test possible.

        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Use Settings
        to determine whether to include the Inspect Element item.
        * page/gdk/ContextMenuClientGdk.cpp:
        * page/gdk/ContextMenuClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:

2007-07-17  Adam Roben  <aroben@apple.com>

        Initialize ContextMenuController::m_page

        Somehow this variable had never been initialized before.

        Reviewed by Tim.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController):
        * page/ContextMenuController.h:
        * page/Page.cpp:
        (WebCore::Page::Page):

2007-07-17  Adam Roben  <aroben@apple.com>

        Add Settings::developerExtrasEnabled

        Reviewed by Tim.

        * WebCore.exp:
        * page/Settings.cpp:
        * page/Settings.h:

2007-07-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Antti.

        <rdar://problem/5206311> 
        Whitespace can't be removed when editing text pasted into from web page
        
        The whitespace comes from table rows that aren't being removed after they are
        emptied out during a deletion.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableCell):
        (WebCore::isTableRow):
        (WebCore::isTableCellEmpty):
        (WebCore::isTableRowEmpty):
        (WebCore::DeleteSelectionCommand::initializePositionData): Remember the table
        rows that contained the start and end of the selection.
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        Remove table rows that come before the end of the selection
        that was removed (except for the row that contained the start of the selection
        and any before that).
        Remove table rows that are come after the start of the selection
        that was removed (except for the row that contained the end of the selection
        and any after that).
        (WebCore::DeleteSelectionCommand::doApply): Call the new function.
        * editing/DeleteSelectionCommand.h:

2007-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin Decker.

        Removed ASSERT that was breaking the pageout test. It's trivial to
        reproduce this ASSERT when navigating between pages that change their
        names, but nothing bad seems to happen.

        * page/Page.cpp:
        (WebCore::Page::goToItem):

2007-07-17  Geoffrey Garen  <ggaren@apple.com>

        Build fix.
        
        * plugins/win/PluginViewWin.cpp: Pass false for lockHistory like we
        do elsewhere.

2007-07-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Implement the callback responsible for handling HTTP headers. This
        callback gets called for every header.
        We will add these headers to our ResourceResponse and on the 'end-of-header'
        indicator we will update the ResourceResponse and dispatch it.

        This patch adds various set methods to ResourceResponse. This improves
        the readability of the headerCallback and avoids storing a CURL handle inside
        the ResourceResponse which would be needed to implement ResourceResponse::doUpdateResourceResponse

        Add a destructor for ResourceHandleManager which would free the resources and remove
        a unused variable.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/ResourceResponse.cpp:
        (WebCore::ResourceResponse::setUrl):
        (WebCore::ResourceResponse::setMimeType):
        (WebCore::ResourceResponse::setExpectedContentLength):
        (WebCore::ResourceResponse::setTextEncodingName):
        (WebCore::ResourceResponse::setSuggestedFilename):
        * platform/network/ResourceResponse.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::sharedInstance):
        (WebCore::headerCallback):
        * platform/network/curl/ResourceHandleManager.h:

2007-07-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Convert JS undefined to the empty string when calling alert, confirm, and prompt. 

        Test: fast/dom/Window/alert-undefined.html

        * page/DOMWindow.idl:

2007-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin McCulough.

        Fixed failing layout test.
        
        Renamed "FrameLoadTypeInternal" to "FrameLoadTypeRedirectWithLockedHistory".
        This is almost certainly not a correct name for the original intent
        of this load type, but it's a correct name for its current behavior.
        
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory):
        When history is supposed to be locked, and no current history item
        exists, only add a new history item if you're the top-level frame.
        
        This rule, combined with the rule that setting iframe.src should not
        create a history item, is pretty hackish. On the other hand, it
        matches WinIE and doesn't cause any test regressions. So I'm OK with
        it as a short-term solution until the solution described in 
        <rdar://problem/5339292> can be implemented.

2007-07-17  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/5294691> Source of file is misrepresented if downloaded by typing in URL in Safari address bar

        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:        
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        Added an extra request parameter, initialRequest, to the download() method
        by passing up the resource handle's request.
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::download):
        Added an extra parameter to the empty SVG download method.
        
2007-07-17  Antti  <antti@apple.com>

        Reviewed by home-bradee.

        <rdar://problem/5336372>
        Icon database uses too much memory
        
        XRaying Safari startup memory consumption revealed that icon database is eating quite
        a bit of RAM if Icon.db is large (which it probably is if it has been in use for a while, 
        mine used for getting figures below was 2.6MB). 
        
        Note that the wins are less impressive with smaller Icon.db.
        
        This patch addresses three separate issues
        
        - SQLite fails to free the memory used by temporary tables. Icon database uses a temporary table
          on startup for pruning unused page urls. This wastes around 1MB. Addressed by rewriting
          pruning so it does not need a temporary table. The new method is also quite a bit faster speeding
          up Safari launch time by around 100ms
        - SQLite has it's own memory cache limited by default to 3MB. Icon database does not really need that much.
          Dropped the cache size to 300kB saving ~1MB on startup. 
          Smaller cache slows down startup by ~30ms (more than compensated by faster pruning above)
        - Don't populate m_pageURLToIconURLMap with all urls from database on startup, instead let it get populated
          when urls are accessed (user opens history menu for example). This shouldn't have any real performance impact 
          as the accesses are icon loads that need to hit the database anyway. This saves ~700kB.
          
        All in all with this Icon.db these changes reduce allocated memory by around 2.7MB on startup. Release build
        Safari RPRVT (empty start page) goes from 12.4MB to 10.4MB (TCMalloc pooling probably explaining why the win 
        looks bit smaller here).

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::deleteAllPreparedStatements):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::establishIconIDForIconURL):
        (WebCore::IconDatabase::pruneUnretainedIconsOnStartup):
        * loader/icon/IconDatabase.h:

2007-07-17  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14569
          Repro crash due to saved state not being cleared when select and textarea elements
          are adopted by another document

        Test: fast/forms/saved-state-adoptNode-crash.html

        * dom/Document.h:
        (WebCore::Document::registerFormElementWithState): Updated parameter type to be
        HTMLFormControlElementWithState.
        (WebCore::Document::unregisterFormElementWithState): Ditto.
        Also removed isFormElementRegistered function and changed the type of the
        m_formElementsWithState ListHashSet.
        * dom/Document.cpp: (WebCore::Document::formElementsState): Updated to use new type,
        for set contents and to use new saveState() function and only save state for elements
        that return true.

        * html/HTMLGenericFormElement.h: Added HTMLFormControlElementWithState class,
        derived from HTMLGenericFormElement, and moved down all the behavior related to
        saving form control element state. Also removed the unnecessary default parameter
        to the HTMLGenericFormElement constructor.
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLFormControlElementWithState::HTMLFormControlElementWithState): Added.
        Calls registerFormElementWithState.
        (WebCore::HTMLFormControlElementWithState::~HTMLFormControlElementWithState): Added.
        Calls unregisterFormElementWithState.
        (WebCore::HTMLFormControlElementWithState::willMoveToNewOwnerDocument): Added.
        Calls unregisterFormElementWithState.
        (WebCore::HTMLFormControlElementWithState::didMoveToNewOwnerDocument): Added.
        Calls registerFormElementWithState.
        (WebCore::HTMLFormControlElementWithState::closeRenderer): Moved to this class from
        the base class.

        * html/HTMLInputElement.h: Updated the base class name and overrode saveState instead
        of stateValue.
        * html/HTMLInputElement.cpp: Updated the base class name.
        (WebCore::HTMLInputElement::init): Removed the call to registerFormElementWithState.
        (WebCore::HTMLInputElement::~HTMLInputElement): Removed the call to
        unregisterFormElementWithState. Also changed the code to only call the
        unregisterForDidRestoreFromCacheCallback function for type PASSWORD (consistency
        and efficiency).
        (WebCore::HTMLInputElement::setInputType): Removed calls to registerFormElementWithState
        and unregisterFormElementWithState; we now let the element stay registered and simply
        don't save or restore state for password fields.
        (WebCore::HTMLInputElement::saveState): Updated function name and signature to replace
        the old stateValue function. Returns false for password fields.
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument): Removed the call to
        unregisterFormElementWithState.
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument): Removed the call to
        registerFormElementWithState.

        * html/HTMLSelectElement.h: Updated the base class name and overrode saveState instead
        of stateValue.
        * html/HTMLSelectElement.cpp: Updated the base class name.
        (WebCore::HTMLSelectElement::HTMLSelectElement): Removed the call to
        registerFormElementWithState.
        (WebCore::HTMLSelectElement::~HTMLSelectElement): Removed the call to
        unregisterFormElementWithState.
        (WebCore::HTMLSelectElement::saveState): Updated function name and signature to
        replace the old stateValue function.
        (WebCore::HTMLSelectElement::setLength): Updated to use document() instead of
        ownerDocument(); the latter is just a slower virtual-function way of doing the
        same thing in all cases except for Document and XPathNamespace.

        * html/HTMLTextAreaElement.h: Update the base class name, overrode saveState instead
        of stateValue, and removed the now-unnecessary explicit destructor.
        * html/HTMLTextAreaElement.cpp: Updated the base class name.
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Removed the call to
        registerFormElementWithState.
        (WebCore::HTMLTextAreaElement::saveState): Updated function name and signature to replace
        the old stateValue function.

2007-07-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        - Make HTMLFrameOwnerElement::contentWindow() return a DOMWindow instead of a Frame
        - Remove the unnecessary hack in HTMLFrameElement.idl and HTMLIFrameElement.idl that
          converted from Frame to Window now that it is not necessary.
        - Remove now unused [NullCheck] extended attribute from CodeGeneratorJS.pm.

        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLDocument.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::contentWindow):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLIFrameElement.idl:

2007-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Move self, opener, parent, top, window, and frames from kjs_window
        to DOMWindow and auto-generate the bindings for them.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::self):
        (WebCore::DOMWindow::opener):
        (WebCore::DOMWindow::parent):
        (WebCore::DOMWindow::top):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::window):
        (WebCore::DOMWindow::frames):
        * page/DOMWindow.idl:

2007-07-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed <rdar://problem/5334483> REGRESSION: JavaScript-induced 
        window.open loads not added to back/forward list
        
        I did an audit of our history rules in loading and tried to establish
        some sane uniformity.
        
        The uniform rule is:
            - HTTP redirects and HTTP redirects simulated by <meta http-equiv>
            add a history item if and only if the redirect takes > 1 second.
            - Other navigations, including JavaScript navigations, always
            add a history item, except for location.replace navigations.

        In the future, we'll want to refine the second case to be more like the
        first. I've filed <rdar://problem/5339292> about that.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setLocation): Don't pass 'true' for 
        userGesture unconditionally. userGesture is used to determine popup 
        blocking, not history item creation.

        * bindings/js/kjs_window.cpp: Pass 'false' for lockHistory in all loads
        except location.replace, which intends to lock history.

        * loader/FrameLoader.cpp: Distinguish between lockHistory and 
        userGesture. The former determines whether a new history item gets
        created. The latter determines whether JavaScript can open popup
        windows. Start passing these variables in functions that used to
        swallow or conflate them.
        
        (WebCore::FrameLoader::requestFrame): Pass 'true' for lockHistory here
        because that's usually correct when setting the 'src' attribute of a
        child frame, and we want to avoid regressing <rdar://problem/4921797>.

        (WebCore::FrameLoader::load): Use the lockHistory variable to determine
        whether to start a history-creating load. Using userGesture for this
        purpose is wrong, as explained above.

        * loader/FrameLoader.h: Renamed one variant of scheduleRedirection to
        scheduleHTTPRedirection because the behavior there of measuring elapsed
        time is specific to the HTTP redirection case.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): lockHistory
        can always be false here because this navigation is never the result of
        a redirection.

2007-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam and Maciej.

        Move the frameElement attribute from kjs_window to DOMWindow and
        auto-generate the bindings for it. 

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::frameElement):
        (WebCore::DOMWindow::devicePixelRatio):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Move more functions from kjs_window to DOMWindow and auto-generate
        the bindings for them.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::stop):
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirm):
        (WebCore::DOMWindow::prompt):
        (WebCore::DOMWindow::find):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-07-17  Mark Rowe  <mrowe@apple.com>

        Gdk build fix.

        * platform/gdk/ChromeClientGdk.h:

2007-07-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Begin the arduous task of localizing FTP directory listings while removing a global initializer!

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::processFilesizeString):

        * page/mac/WebCoreViewFactory.h:

        * platform/LocalizedStrings.h:

        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::unknownFileSizeText):

        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::unknownFileSizeText):

        * platform/qt/Localizations.cpp:
        (WebCore::unknownFileSizeText):

2007-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Remove more redundant isSafeScript checks.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):

2007-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Turn off -Wshorten-64-to-32 warning for 64-bit builds.

        * Configurations/Base.xcconfig:

2007-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5336276>
        ASSERT(cs->accessCount() > 0) when instantiating widget templates in DashCode

        If the cache is disabled, accessCount will always be 0. Account for this in the assert.
        
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):

2007-07-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin.

        Append FTP row entries to the first TBODY instead of the TABLE element itself, 
        as many TABLE elements end up with an implicit TBODY and that's where most people would
        expect it to be added.

        * html/HTMLTableElement.h:
        (WebCore::HTMLTableElement::firstTBody): Added this accessor

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::appendEntry): Add to the first tbody if it exists

2007-07-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele.

        <rdar://problem/5240265> 
        REGRESSION: Clicking a <button> clears the selection in contenteditable areas

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded): Don't clear the selection if
        the mouse press that caused the focus shift occurred in 
        a -webkit-user-select: ignore region.

2007-07-16  David Hyatt  <hyatt@apple.com>

        Fix for 5335829, avoid creating a pathological # of FontData objects
        on Windows.  The MLang service actually caches and reuses HFONTs, which
        means it is safe to use our FontPlatformData -> FontData cache.

        Reviewed by olliej

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2007-07-16  Adam Roben  <aroben@apple.com>

        Added a manual test to test calling window.print on a subframe.

        Reviewed by Darin.

        * manual-tests/resources/print-subframe.html: Added.
        * manual-tests/window-print-subframe.html: Added.

2007-07-16  Adam Roben  <aroben@apple.com>

        Replace Frame::print with Chrome::print

        This also adds a Frame* parameter to Chrome::print and
        ChromeClient::print so that it knows which Frame to print.

        Reviewed by Darin.

        All tests pass.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): Call Chrome::print.
        * editing/JSEditor.cpp: Ditto.

        * bridge/win/FrameWin.cpp: Removed Frame::print.
        * page/Frame.h: Ditto.
        * page/mac/FrameMac.mm: Ditto.
        * page/qt/FrameQt.cpp: Ditto.
        * platform/gdk/FrameGdk.cpp: Ditto.
        * page/mac/WebCoreFrameBridge.h: Removed -print.

        * page/Chrome.cpp: Added Frame* parameter to Chrome::print and pass it
        up to the ChromeClient.
        * page/Chrome.h: Ditto.
        * page/ChromeClient.h: Ditto.
        * platform/gdk/TemporaryLinkStubs.cpp: Ditto.
        * platform/graphics/svg/SVGImageEmptyClients.h: Ditto.

2007-07-16  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/5321490> REGRESSION: visibility:hidden property doesn't hide parts of file input element and listbox
        http://bugs.webkit.org/show_bug.cgi?id=14565

        Tests:
        fast/forms/hidden-input-file.html
        fast/forms/hidden-listbox.html

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject):
        Only paint if the control is supposed to be visible.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintObject):
        ditto.  We already had checks to prevent drawing the text that considered the option's style too, but if visibility: hidden
        was just set on the listbox then a lot of extra work was being done, and the scrollbar was drawing too.  This change fixes that.

2007-07-16  David Hyatt  <hyatt@apple.com>

        Fix for Radar 5338081, text-shadow should be reset on form controls so that
        it doesn't inherit in when set e.g., on the <body>.

        Reviewed by beth

        * css/html4.css:

2007-07-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        FrameView, PlatformScrollbar and changes to the way we draw

        Fix the lifetime of PlatformScrollbar, use a default width and
        height and fix drawing of the PlatformScrollbar and other widgets
        the following way: FrameGdk handles the expose events of the Frame
        and will make the frame redraw and now it will draw the childrent of
        the FrameView as well. This approach has the issue of honoring the
        z-order of elements inside the RenderTree. Honoring the z-order will
        be a bit more work

        Widget can now handle Widget::setGtkWidget call where the GtkWidget
        has not yet a GdkWindow allocated. We will lazily set the GdkDrawable.

        In preparation of honoring the z-order of the RenderTree for RenderWidgets
        it is started to store native objects inside the GraphicsContext. Doing this
        nicely eliminates the need of RenderThemeGdk to do any drawing to a temporary
        GdkPixmap. This should fix themes with rounded buttons.

        ScrollView implement add- and removeChild to get a working PlatformScrollbar


        * platform/Widget.h:
        * platform/gdk/FrameGdk.cpp:
        (frame_gdk_expose_child): Will send the expose to all children
        (WebCore::FrameGdk::handleGdkEvent): Painting changes, move to mouseMoved
        * platform/gdk/PlatformScreenGdk.cpp:
        (WebCore::screenDepth): gdkDrawable
        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::PlatformScrollbar): Fix ownership
        (PlatformScrollbar::~PlatformScrollbar): Fix ownership
        (PlatformScrollbar::paint): Widget::paint will do the right thing soon
        * platform/gdk/RenderThemeGdk.cpp: No need for using a GdkPixmap, draw directly
        (WebCore::RenderThemeGdk::paintCheckbox): No need for using a GdkPixmap, draw directly
        (WebCore::RenderThemeGdk::paintRadio): No need for using a GdkPixmap, draw directly
        (WebCore::RenderThemeGdk::paintButton): No need for using a GdkPixmap, draw directly
        * platform/gdk/RenderThemeGdk.h: remove the copyContext call
        * platform/gdk/ScrollViewGdk.cpp: gdkDrawable
        (WebCore::ScrollView::updateView): gdkDrawable
        (WebCore::ScrollView::update): clear the area to fix repainting issues
        (WebCore::ScrollView::setGtkWidget): gdkDrawable
        (WebCore::ScrollView::addChild): implement
        (WebCore::ScrollView::removeChild): implement
        * platform/gdk/TemporaryLinkStubs.cpp: Not needed header removed
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::gdkDrawable): Renamed from drawable
        (WebCore::Widget::setGtkWidget): use gdkDrawable
        (WebCore::Widget::setCursor): gdkDrawable
        (WebCore::Widget::show): gdkDrawable
        (WebCore::Widget::hide): gdkDrawable
        * platform/graphics/GraphicsContext.h: Allow to set the GdkDrawable, e.g. used inside a expose event
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setGdkDrawable):
        (WebCore::GraphicsContext::gdkDrawable):

2007-07-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Lazily update the scrollbars (e.g. on loading a page) to
        generate less expose events, which will lead to laying out less often
         and will fix http://bugs.webkit.org/show_bug.cgi?id=14020.

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::updateScrollbars):

2007-07-16  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14462
        non empty <style> element doesn't work

        Return an empty sheet for empty <style> elements
        instead of a null sheet. Clean up StyleElement a bit.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::StyleElement):
        (WebCore::StyleElement::sheet):
        (WebCore::StyleElement::childrenChanged):
        (WebCore::StyleElement::createSheet):
        * dom/StyleElement.h:
        (WebCore::StyleElement::setLoading):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::sheet):
        * html/HTMLStyleElement.h:
        (WebCore::HTMLStyleElement::setLoading):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::sheet):
        (WebCore::SVGStyleElement::sheetLoaded):
        * ksvg2/svg/SVGStyleElement.h:

2007-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for fix for <rdar://problem/5336602> REGRESSION: tab characters
                        cannot be entered into text fields
                        http://bugs.webkit.org/show_bug.cgi?id=14032

        Need to use UChar not char.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::constrainValue):

2007-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Remove redundant calls to isSafeScript()

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):

2007-07-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Removed incorrect error log, seen while running layout tests.
        
        Perhaps at some point FrameLoadTypeInteral had a specific meaning
        that prevented it from being used in non-child frame, non-redirect
        situations. However, that meaning has been lost and nobody remembers
        how to get it back.
        
        We currently use FrameLoadTypeInternal for any load that is not
        initiated by a user gesture, so it's trivial to produce this error
        log, even though nothing has gone wrong.

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

2007-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej

        Fix for <rdar://problem/5336602> REGRESSION: tab characters cannot be entered into text fields
                http://bugs.webkit.org/show_bug.cgi?id=14032

        constrainValue attempted to block control characters from being inserted 
        by a simple less than ' ' check, which prevent tab characters from being
        inserted.  This patch adds an additional check to allow the tab character 
        again

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::constrainValue):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Third shot at blind Qt/GDK build fix

        * platform/gdk/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::createTokenizer):
        * platform/qt/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::createTokenizer):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-07-14  Sam Weinig  <sam@webkit.org>

        Fix Tiger build.

        * config.h:

2007-07-14  Brady Eidson  <beidson@apple.com>

        Blind attempt at (hopefully) fixing the Qt and GDK builds

        * platform/gdk/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::FTPDirectoryDocument):
        * platform/qt/TemporaryLinkStubs.cpp:
        (FTPDirectoryDocument::FTPDirectoryDocument):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Initial check-in for <rdar://problem/3154486> - Supporting FTP directory listings in the browser

        Development has taken place on both Leopard and Windows (windows enabling patch will follow shortly)
        Support will only exist on platforms whose network layers (ie, ResourceHandle) support piping the raw
        FTP Directory data into the engine.  

        This is known to include Leopard, Windows, and CURL based platforms - probably others
        Known incompatible platforms include Tiger.

        The FTP listing page is built in HTML.  An external HTML document can be provided as a template for the 
        directory listing.  This document is parsed, and expected to have a <table> with a certain class in it.
        As FTP directory listings come in, each entry is added to this table as a row.

        If no HTML template is provided to work with, a very basic empty document is hard coded that contains only 
        this special table.

        Upgrades to the look and feel of the directory listings can take place largely in this HTML template which,
        admittedly, is conspicuously absent in this initial checkin

        * WebCore.exp: New Settings symbols for WebKit
        * WebCore.xcodeproj/project.pbxproj:

        * config.h: If BUILDING_ON_TIGER, disable FTP directory listing support

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Create an FTPDirectoryDocument if the mime type is 
          "application/x-ftp-directory"

        * loader/FTPDirectoryDocument.cpp: Added.
        (WebCore::FTPDirectoryTokenizer::isWaitingForScripts):
        (WebCore::FTPDirectoryTokenizer::checkBuffer):
        (WebCore::FTPDirectoryTokenizer::FTPDirectoryTokenizer): Building on HTML tokenizer, this facilitates 
          parsing FTP Directory listings in the engine
        (WebCore::FTPDirectoryTokenizer::appendEntry): Add a table row for a directory listing to the document
        (WebCore::FTPDirectoryTokenizer::createTDForFilename): Create the TD for the filename with the anchor in it

        (WebCore::processFilesizeString): Prettify the filesize
        (WebCore::wasLastDayOfMonth):
        (WebCore::processFileDateString): Prettify the date
        (WebCore::FTPDirectoryTokenizer::parseAndAppendOneLine):
        (WebCore::FTPDirectoryTokenizer::loadDocumentTemplate): Loads the HTML template that FTP directory listings
          can build on top of
        (WebCore::FTPDirectoryTokenizer::createBasicDocument): Creates a most basic document (body and one table) to
          append the rows to in case the document template is not loaded and parsed
        (WebCore::FTPDirectoryTokenizer::write): Add the FTP listing to the buffer and parse entries out of it
        (WebCore::FTPDirectoryTokenizer::finish): 

        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument): Special document-type for FTP directory listings
        (WebCore::FTPDirectoryDocument::createTokenizer):
        * loader/FTPDirectoryDocument.h: Added.
        (WebCore::FTPDirectoryDocument::isImageDocument):
        
        * loader/FTPDirectoryParser.cpp: Added.
        (WebCore::parseOneFTPLine): Adapted from ParseFTPList.cpp from Firefox - parses most known
          FTP directory listing styles into discrete FTP directory entries
        * loader/FTPDirectoryParser.h: Added.
        (WebCore::ListState::ListState): Maintains FTP Parser state
        (WebCore::ListResult::ListResult): Represents one FTP directory listing
        (WebCore::ListResult::clear):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy): If the Settings say to bypass the policy check for 
          "application/x-ftp-directory", skip it.  This will allow people to test this feature even if their 
          browser/WebKit app would otherwise not allow it

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFTPDirectoryTemplatePath): Set the path to the FTP listing document template
        (WebCore::Settings::setForceFTPDirectoryListings): Set to bypass the policy delegate check for mime type
          "application/x-ftp-directory"
        * page/Settings.h:
        (WebCore::Settings::ftpDirectoryTemplatePath):
        (WebCore::Settings::forceFTPDirectoryListings):

        * platform/Logging.cpp: Add an "LogFTP" logging channel
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):

        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedNonImageMimeTypes): Add "application/x-ftp-directory"

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile): Stub for now
        * platform/SharedBuffer.h:

        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createWithContentsOfFile): Load contents of the file into an NSData, then
          wrap that NSData

2007-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14618
        REGRESSION(13464): drivehq.com login form doesn't work

        Test: http/tests/misc/post-submit-button.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData): Append a submit even if its value is empty.

2007-07-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for 
            <rdar://problem/5335265> REGRESSION: WebCore::DragController crashes if WebDragSourceActionDHTML cleared
            http://bugs.webkit.org/show_bug.cgi?id=13652

        Reorder logic for drag initiation: we can always preflight the clipboard, regardless as to whether 
        we are performing any dhtml drag handling    

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

2007-07-13  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed by Tim Hatcher.

        Bug 14401: Semi-regression: Can no longer copy anything from the inspector
        http://bugs.webkit.org/show_bug.cgi?id=14401

        * page/inspector/inspector.css:

2007-07-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5304742> A hang occurs when attempting to 
        display web clip banner at http://www.signonsandiego.com/sports/
        chargers/index.html

        Here is the actual fix. 
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects): Set topLevel to 
        false when we recurse to get our children's absoluteRects.
        * rendering/RenderInline.h: New boolean parameter 
        topLevel that defaults to true.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteRects):
        * rendering/RenderObject.h:

        And these are just other implementations/declarations of this 
        (virtual) function that have to add the parameter. No behavior 
        change here.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::absoluteRects):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::absoluteRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteRects):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::absoluteRects):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::absoluteRects):
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/RenderSVGText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteRects):
        * rendering/RenderView.h:

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13438 <rdar://problem/5153030>
              Run rounding makes word-break:break-all/word not functional

        Test: fast/text/word-break-run-rounding.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcPrefWidths): Update the maximum width only on word
        boundaries to avoid rounding errors.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Integrated breakAll with the
        midWordBreak/wrapW mechanism. Also made the wrapW upper bound more accurate
        by resetting it when tmpW is committed.

2007-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Patch for <rdar://problem/5318394>
        http site can read/write content of https site in same domain

        Add protocol and port checks in isSafeScript.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript):

2007-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz Pettel.

        <rdar://problem/5298870> 
        REGRESSION: In Yahoo Mail modal dialog, OK and Cancel buttons do not work, and descriptive text is missing (14327)
        
        http://bugs.webkit.org/show_bug.cgi?id=14327
        REGRESSION (r21367): dialogArguments not set in window generated by showModalDialog

        When creating popup windows/dialogs, prevent the window properties from being cleared by the initial frame load.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setShouldClearWindowProperties):
        * manual-tests/modal-dialog-arguments.html: Added.

2007-07-13  Steve Falkenburg  <sfalken@apple.com>

        Update ResourceError related code to account for changes in CF interfaces.

        Reviewed by Darin, Ada.

        * platform/network/ResourceError.h: Change Mac conditionals to CF to share more code.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Modified based on CFErrorRef changes
        (WebCore::ResourceError::unpackPlatformError): Ported from ResourceErrorMac.mm.
        (WebCore::ResourceError::operator CFErrorRef): Ported from ResourceErrorMac.mm.
        (WebCore::ResourceError::operator CFStreamError): Modified based on CFErrorRef changes.

2007-07-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Fix <rdar://problem/5192256>
        click() in onchange handler causes another change event (causes hang at http://forums.whirlpool.net.au/)
        
        Guard against generating a simulated event from within a simulated event in the same node. Try to
        match Firefox behavior.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchSimulatedMouseEvent):
        (WebCore::EventTargetNode::dispatchSimulatedClick):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:

2007-07-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5333387>
        Combination of selection and click() on checkbox crashes
        
        Ensure there is no pending style update before doing synchronous paint. Under certain
        circumstances this ends up doing style recalc in middle of paint() which may
        for example tear down the rendering tree being painted, with bad results.

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

2007-07-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.
        
        Fix <rdar://problem/5333365>
        Calling click() is very slow
        
        There is a 100ms delay in ContainerNode::setActive() to do an activation effect. It is used for
        simulated mouse activations (using keyboard for example). However, it shouldn't be done when calling from javascript 
        (through click() interface) since it hangs script execution.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::click):

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13873
          Incomplete repaint of replaced element's box shadow

        Tests: fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Added a call to adjustOverflowForBoxShadow().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout): Ditto.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced): Initialize m_hasOverflow.
        (WebCore::RenderReplaced::~RenderReplaced): Added. Removes this object from the
        overflow rect map if it has overflow.
        (WebCore::RenderReplaced::shouldPaint): Account for overflow.
        (WebCore::RenderReplaced::adjustOverflowForBoxShadow): Added. Creates or
        removes an entry for this object in the global overflow rect map.
        (WebCore::RenderReplaced::overflowHeight): Added.
        (WebCore::RenderReplaced::overflowWidth): Added.
        (WebCore::RenderReplaced::overflowLeft): Added.
        (WebCore::RenderReplaced::overflowTop): Added.
        (WebCore::RenderReplaced::overflowRect): Added.
        * rendering/RenderReplaced.h:

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14395
          When a <p> is inside <li> two <BR>s are rendered

        Test: fast/lists/marker-before-empty-inline.html

        * rendering/RenderBlock.h:
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox): Changed to skip empty inline flows that
        do not actually generate any line boxes. Limited the nested lists quirk to
        the case where the list is a child of the list item, to match Firefox.
        * rendering/bidi.cpp:
        (WebCore::requiresLineBox): Added. Factored out of skipWhitespace.
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild): Added. Checkes
        whether the child or any of its siblings following it will generate a line
        box in the flow.
        (WebCore::RenderBlock::skipWhitespace):

2007-07-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alexey.

        Move HTTP methods to parse Content-Type from xmlhttprequest.cpp
        which is LGPL to HTTPParsers.cpp. As both files were written by the
        same author and the advice to move them came from him I think this move
        is what is meant to be done.

        Move filenameFromHTTPContentDisposition to HTTPParsers as well. This parse
        function uses Vector<String>::split and doesn't honor quoting. This needs
        to be fixed in later versions.

        http://bugs.webkit.org/show_bug.cgi?id=5954 and http://bugs.webkit.org/show_bug.cgi?id=14059
        benefit from this change.

        * platform/network/HTTPParsers.cpp:
        (WebCore::filenameFromHTTPContentDisposition):
        (WebCore::extractMIMETypeFromMediaType):
        (WebCore::extractCharsetFromMediaType):
        * platform/network/HTTPParsers.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType):
        (WebCore::XMLHttpRequest::didReceiveResponse):

2007-07-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Build fix.  Stub out ChromeClientGdk::print and SVGEmptyChromeClient::print.

        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::print):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::print):

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

        Reviewed by Maciej and Steve.

        fixed <rdar://4982432> window.print() needs to be implemented

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::print):
        * page/Chrome.cpp:
        (WebCore::Chrome::print):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/win/TemporaryLinkStubs.cpp:

2007-07-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.
        
        <rdar://problem/5300379> Mail hung on option-delete
        
        We were starting backward iteration at [container, 0] and
        emitting for container over and over.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::advance): Don't 
        emit characters for a node if we're starting iteration at 
        [container, 0].  Don't emit characters for exiting containers
        if we've already done so.

2007-07-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/5039463> find a good gray that works well for full frame plug-ins; consistent look for plugins

        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure): Changed values to a darker gray, per request from the HI team.

2007-07-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Patch for <rdar://problem/5329841>
        Calling window.closed on a closed window causes Safari to crash

        - Replaces the Frame member variable in KJS::Window for more appropriate DOMWindow
        - Adds additional new null checks as necessary
        - Removes bogus toBoolean method
        - Removes unused scheduleClose method

        Test: fast/dom/Window/window-closed-crash.html

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):
        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::Window):
        (KJS::Window::impl):
        (KJS::Window::interpreter):
        (KJS::Window::location):
        (KJS::Window::find):
        (KJS::allowPopUp):
        (KJS::createWindow):
        (KJS::canShowModalDialog):
        (KJS::canShowModalDialogNow):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::Window::childFrameGetter):
        (KJS::Window::indexGetter):
        (KJS::Window::namedItemGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::Window::isSafeScript):
        (KJS::Window::setListener):
        (KJS::Window::getListener):
        (KJS::Window::clear):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::updateLayout):
        (KJS::ScheduledAction::execute):
        (KJS::Window::disconnectFrame):
        (KJS::Location::put):
        (KJS::LocationFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        * page/mac/WebCoreFrameBridge.mm:
        (updateRenderingForBindings):

2007-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Ada.

        <rdar://problem/5329877> REGRESSION: Document::setTransformSource leaks an xmlDocPtr if called more than once per document

        * dom/Document.cpp:
        (WebCore::Document::setTransformSource): Free any existing m_transformSource before overwriting it, rather than simply leaking it.
        * dom/Document.h:

2007-07-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Fix compilation of the CURL backend after the removing of accessors from ResourceHandle in r24202

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPOST):
        (WebCore::ResourceHandleManager::startJob):

2007-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        <rdar://problem/5327189> Logic error in DeprecatedString::to{,U}Int{,64} can lead to reading past end of buffer

        The fix for reading past the end of the buffer is to verify we are not at the end of the string before checking
        for a leading '+' character.  Rather than fixing the logic error in four nearly-identical functions I chose to
        extract the common functionality into the toIntegralType helper function which the four functions call through to.

        * platform/DeprecatedString.cpp:
        (WebCore::isCharacterAllowedInBase):
        (WebCore::toIntegralType):
        (WebCore::DeprecatedString::toInt):
        (WebCore::DeprecatedString::toInt64):
        (WebCore::DeprecatedString::toUInt):
        (WebCore::DeprecatedString::toUInt64):

2007-07-12  George Staikos  <staikos@kde.org>

        Reviewed by Alexey.

        Remove unused variables and fix rendering of comoboxes.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMenuList):

2007-07-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej

        Fix for <rdar://problem/5329712> GMail crash when trying to compose new message

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):

2007-07-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14584
        XMLHttpRequest treats null login/password incorrectly

        Test: http/tests/xmlhttprequest/null-auth.php

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open):
        * xml/xmlhttprequest.h:
        Split the open() method into three to distinguish between missing and null credentials.

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction): Call the appropriate open().

2007-07-11  Oliver Hunt  <oliver@apple.com>

        Build fix for windows

        * page/Frame.cpp:
        (WebCore::Frame::firstRectForRange):

2007-07-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5329481> Character range rect code for IME support needs to be crossplatform

        Move -[WebCoreFrameBridge firstRectForDOMRange:] to Frame::firstRectForRange

        * page/Frame.cpp:
        (WebCore::Frame::firstRectForRange):
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge firstRectForDOMRange:]):

2007-07-11  Steve Falkenburg  <sfalken@apple.com>

        Static analysis build fix.
        
        Only specify /analyze (PREfast) if it is available.
        Prevents entire project from rebuilding each time.        

        Reviewed by Hyatt.

        * WebCore.vcproj/WebCore.vcproj:

2007-07-11  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        Make comboboxes update when the current item is changed.

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::updateFromElement):
        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::activeChanged):

2007-07-11  George Staikos  <staikos@kde.org>

        Reviewed by Brady.

        Add a destructor to cleanup the SQL handle.

        * loader/icon/SQLDatabase.h:
        (WebCore::SQLDatabase::~SQLDatabase):

2007-07-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        As of http://bugs.webkit.org/show_bug.cgi?id=14527 move the
        WebCore/ForwardingHeader/JavaScriptCore to JavaScriptCore

        * ForwardingHeaders/JavaScriptCore: Removed.
        * ForwardingHeaders/JavaScriptCore/APICast.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSBase.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Removed.
        * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Removed.

2007-07-11  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::didReceiveChallenge):

2007-07-11  George Staikos  <staikos@kde.org>

        Repair the build.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):

2007-07-11  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5230188> REGRESSION: Active/inactive marked text is not distinguished in textfields and textareas

        We were previously trying to leave room for 1px of space between the text and the underline.
        This change removes that requirement so that if we don't have room for the extra space, we still draw the thick underline
        touching the text.

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

2007-07-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5313508>
        REGRESSION (Leopard): http/tests/xmlhttprequest/basic-auth.html hangs
        
        Leopard Foundation now ignores credentials passed in as part of the URL so we need to pass them ourselves.
        
        For the asynchronous case, we simply keep track of the URL and if it has a user name and password, we
        pass those if we're asked to authenticate.
                
        For the synchronous case, implement a new connection delegate and run it in a separate mode so 
        no other sources will fire.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (-[WebCoreResourceHandleAsDelegate dealloc]):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreSynchronousLoader _isDone]):
        (-[WebCoreSynchronousLoader dealloc]):
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]):
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreSynchronousLoader connection:didReceiveResponse:]):
        (-[WebCoreSynchronousLoader connection:didReceiveData:]):
        (-[WebCoreSynchronousLoader connectionDidFinishLoading:]):
        (-[WebCoreSynchronousLoader connection:didFailWithError:]):
        (-[WebCoreSynchronousLoader _data]):
        (-[WebCoreSynchronousLoader _response]):
        (-[WebCoreSynchronousLoader _error]):
        (+[WebCoreSynchronousLoader loadRequest:returningResponse:error:]):

2007-07-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5315265> REGRESSION: Leopard launch time -
          there are about 190 stats of icudt36b files during launch

        * platform/TextEncodingRegistry.cpp: (WebCore::atomicCanonicalTextEncodingName):
        Add a special case for the empty string so we don't load the extended text
        encodings just so we can return 0 for that case.

2007-07-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Remove a bunch of unneeded accessors from ResourceHandle.
        
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::didFinishLoading):
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:

2007-07-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5234383> REGRESSION: Sentence breaker method returning entire document length
        
        The functions for moving the caret to the next/previous sentence boundary
        were in many cases moving to the beginning/end of the document.  The functions that 
        should move the caret to an equivalent position in the next/previous sentence behaved
        like the aforementioned functions ought to.  Put the code from the second two functions
        in the first and made sure that the second two are properly FIXMEd.  They're rarely 
        used (filed 5323691).
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added an option for sentenceBoundary granularity,
        so that we can test the functions that were broken from JS.
        * editing/visible_units.cpp:
        (WebCore::startOfSentence): Removed the FIXME about 5234383.
        (WebCore::endSentenceBoundary): Make this function do what nextSentencePositionBoundary
        current does.
        (WebCore::endOfSentence): Removed the FIXME about 5234383.
        (WebCore::previousSentencePosition): Removed an incorrect FIXME.
        (WebCore::nextSentencePositionBoundary): Tweaked FIXME.  This function is
        identical, not close to endSentenceBoundary.
        (WebCore::nextSentencePosition): Removed an incorrect FIXME.

2007-07-11  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14453
        REGRESSION: www.nzherald.co.nz almost all the formating is gone
 
        Be less strict for the hex color definition.

        * css/CSSGrammar.y:
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/tokenizer.flex:

2007-07-11  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        Forgot to commit this as part of commit r24146. Now we are sure
        createElement creates elements in the xhtml namespace only.

        * ksvg2/svg/SVGDocument.cpp:
        * ksvg2/svg/SVGDocument.h:

2007-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Move more attributes from the pure JS bindings in KJS::Window
        to the implementation in DOMWindow and autogenerate the new bindings

        Test: fast/dom/Window/get-set-properties.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Change to use propHashTable in
        JSDOMWindow instead of KJS::Window
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm: Cleanup getValueProperty and put generation
        to reduce code duplication. 
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::closed):
        (WebCore::DOMWindow::length):
        (WebCore::DOMWindow::name):
        (WebCore::DOMWindow::setName):
        (WebCore::DOMWindow::status):
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::defaultStatus):
        (WebCore::DOMWindow::setDefaultStatus):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::defaultstatus):
        (WebCore::DOMWindow::setDefaultstatus):
        * page/DOMWindow.idl:

2007-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Fix for <rdar://problem/5326791> XSS vulnerability: ability to set window.defaultStatus,
        window.defaultstatus and window.status cross domains

        Test: http/tests/security/cross-frame-access-put.html

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put): Adds isSafeScript check for defaultStatus,
        defaultstatus and status cases.

2007-07-10  Sam Weinig  <sam@webkit.org>

        Fix build for BuildBot.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::outerHeight):
        (WebCore::DOMWindow::outerWidth):
        (WebCore::DOMWindow::screenX):
        (WebCore::DOMWindow::screenY):

2007-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        <rdar://problem/5326653> - REGRESSION: [WebBackForwardList forwardListCount] might return incorrect result

        No layout test because this is an API issue that can't be tested in DRT or the browser

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::forwardListCount): If the index is NoCurrentItemIndex, return 0

2007-07-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Move more readonly attributes from pure JS bindings in KJS::Window
        to the implementation in DOMWindow and autogenerate the new bindings.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):  Sort the hashmap comment into categories
        to make further migration easier.
        * bindings/js/kjs_window.h: Sort the enum into categories to make further
        migration easier.
        (KJS::Window::):
        * page/DOMWindow.cpp: Add new methods.
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::blur):
        (WebCore::DOMWindow::offscreenBuffering):
        (WebCore::DOMWindow::outerHeight):
        (WebCore::DOMWindow::outerWidth):
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::screenX):
        (WebCore::DOMWindow::screenY):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::getComputedStyle):
        (WebCore::DOMWindow::getMatchedCSSRules): Add null Document assertion.
        (WebCore::DOMWindow::devicePixelRatio): Add null Frame and Page checks.
        * page/DOMWindow.h:
        (WebCore::DOMWindow::screenLeft):
        (WebCore::DOMWindow::screenTop):
        (WebCore::DOMWindow::pageXOffset):
        (WebCore::DOMWindow::pageYOffset):
        * page/DOMWindow.idl:

2007-07-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5326417> Editor::unmarkText needs to be crossplatform

        Missed this in earlier patch to make text marking platform independent.

        * editing/Editor.cpp:
        (WebCore::Editor::unmarkText):
           Add platform independent impl
        * editing/mac/EditorMac.mm:
           Remove the old mac path.

2007-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        Added a Page counter. This helped me while investigating 
        <rdar://problem/5314463> 40MB of WebKit memory still allocated after 
        closing large email in Mail

        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::):
        (WebCore::PageCounter::~PageCounter):
        (WebCore::Page::Page):
        (WebCore::Page::~Page):

2007-07-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5326126> InspectorResource holds onto more data than it needs

        Reduces the fixed size of InspectorResource from 630 bytes to 224 bytes. Now
        selectively pick out parts of the ResourceRequest and ResourceResponse objects
        for the info needed and store that directly in InspectorResource.

        The ResourceRequest and ResourceResponse objects hold a reference to the original
        NSURL object, so almost double the data was being kept around. So the struct size
        reduction is just the tip of the ice burg on what this really saves.

        In a test of 100,000 XMLHTTPRequests using a 85 byte long data URL, I see ~21 MB less
        RSIZE compared to Safari running without this change.

        * page/InspectorController.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::type):
        (WebCore::addSourceToFrame):
        (WebCore::scriptObjectForRequest):
        (WebCore::scriptObjectForResponse):
        (WebCore::InspectorController::addScriptResource):
        (WebCore::InspectorController::addAndUpdateScriptResource):
        (WebCore::updateResourceRequest):
        (WebCore::updateResourceResponse):
        (WebCore::InspectorController::updateScriptResourceRequest):
        (WebCore::InspectorController::updateScriptResourceResponse):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * page/InspectorController.h:

2007-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix crash introduced by my patch for 5318732, only seen in release builds

        * page/Page.cpp: (WebCore::Page::~Page): Added a missing null check.

2007-07-10  Andrea Cavalli  <amc82@cam.ac.uk>

        Reviewed by George Staikos.

        Fixed render theme for text field.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintTextField):

2007-07-10  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Draw focus rings for nodes that are not rendered by QStyle.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::focusRingColor):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::supportsFocus):

2007-07-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Geoff.

        Fix 'unsigned int' overflow in CodeGeneratorJS.pm.
        This fixes hashing of "SVG_FEBLEND_MODE_NORMAL". Its hashvalue exceeded 2^32, which
        is no problem in perl but in the cpp code. Emulate C/C++ behaviour by using "% 2^32" in
        the perl code. Testcase available in feature-branch soon (js-svg-constructors.svg).

        * bindings/scripts/CodeGeneratorJS.pm:

2007-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Disabled Arena recycling in RenderArena. PLT shows no regression 
        (possibly a small speedup), and this can reduce allocated memory in 
        WebKit clients by about 120K (4K per Arena * 30 Arenas).
        
        I happened upon this optimization while investigating 
        <rdar://problem/5314463> WebKit hangs on to 40MB RAM after closing 
        large email in Mail (appears to be render tree arena allocator), 
        although I don't think it will come close to fixing that bug 
        completely.

        * rendering/RenderArena.cpp:
        (WebCore::RenderArena::~RenderArena): Use FinishArenaPool, which frees
        the ArenaPool's Arenas immediately.

2007-07-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14449
          REGRESSION (r14345-r14375): Absolutely positioned image does not scale to containing element's height

        Test: fast/replaced/absolute-position-percentage-height.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedHeightUsing): For positioned elements, evaluate
        the percentage with respect to the container's final height.

2007-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Add 64-bit integer converters to our string classes for future work

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::toInt64):
        (WebCore::DeprecatedString::toUInt64):
        * platform/DeprecatedString.h:

        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::toInt64):
        (WebCore::String::toUInt64):

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toInt64):
        (WebCore::StringImpl::toUInt64):
        * platform/StringImpl.h:

2007-07-10  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix <rdar://problem/5318732> REGRESSION: In Mail, a crash occurs when attempting to send
          a HTML based message (nytimes.com, washingtonpost.com, latimes.com)

        Did an audit of calls to get the inspector and most other uses of Page* and added null
        checks since Frame* can outlast its Page*.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): Added null check.
        (WebCore::FrameLoader::loadSubframe): Ditto.
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::transitionToCommitted): Ditto.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Ditto.
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Ditto.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Ditto.
        (WebCore::FrameLoader::loadResourceSynchronously): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Ditto.
        (WebCore::FrameLoader::requestFromDelegate): Ditto.
        (WebCore::FrameLoader::canGoBackOrForward): Ditto.
        (WebCore::FrameLoader::getHistoryLength): Ditto.
        (WebCore::FrameLoader::historyURL): Ditto.
        (WebCore::FrameLoader::cachePageForHistoryItem): Ditto.
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget): Ditto.
        (WebCore::FrameLoader::goToItem): Ditto.
        (WebCore::FrameLoader::dispatchWindowObjectAvailable): Ditto.
        (WebCore::FrameLoader::dispatchDidCommitLoad): Ditto.
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest): Ditto.
        (WebCore::FrameLoader::dispatchWillSendRequest): Ditto.
        (WebCore::FrameLoader::dispatchDidReceiveResponse): Ditto.
        (WebCore::FrameLoader::dispatchDidReceiveContentLength): Ditto.
        (WebCore::FrameLoader::dispatchDidFinishLoading): Ditto.
        (WebCore::FrameLoader::dispatchDidLoadResourceFromMemoryCache): Ditto.

        * page/ContextMenuController.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController): Removed unneeded and
        unused Page* parameter.
        (WebCore::openNewWindow): Added null check.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.

        * page/InspectorController.h:
        (WebCore::InspectorController::pageDestroyed): Added. Since this object is
        owned by the Page and has a back-pointer to it, it needs an explicit disconnect.
        There's already a higher-level one, but this is more reliable than that.
        * page/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable): Added null check.
        (WebCore::InspectorController::windowUnloading): Ditto.

        * page/Page.cpp:
        (WebCore::Page::Page): Updated for change in parameters of ContextMenuController 
        constructor.
        (WebCore::Page::~Page): Added call to InspectorController pageDestroyed().

        * page/Chrome.cpp: Updated includes.
        * page/DragController.cpp: Ditto.

2007-07-10  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Bring scroll wheel out of Ludicrous Speed.

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-07-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=13241 | <rdar://problem/5126396>
        onload fires before content is finished loading (woot.com)
        
        * dom/Document.cpp:
        (WebCore::Document::close): Try to go through the normal "Am I done loading?"
        machinery before dispatching the load event. As the comment indicates, 
        we can't do this in all cases, so the fix isn't perfect. However, a perfect 
        solution would require much riskier sweeping changes to the loader, which 
        are best left for later, I think.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Removed a slightly
        worse solution to the same problem.

2007-07-10  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8007
        createElement() and XHTML (A dynamically created table not rendered as such)

        Follow the HTML5 rules of making the name lowercase and then
        creating the element in the xhtml namespace.

        * dom/Document.cpp:
        (WebCore::Document::createElement):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:

2007-07-09  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Add qt context menu support.

        * WebCore.pro:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescriptionType::PlatformMenuItemDescriptionType):
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):
        (WebCore::ContextMenuItem::enabled):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::platformDescription):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Get rid of the node argument in our various script execution functions.
        
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::evaluateScript):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::replaceContentsWithScriptResult):
        (WebCore::FrameLoader::executeScript):
        * loader/FrameLoader.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):

2007-07-09  Justin Garcia  <justin.garcia@apple.com>

        Rolling the fix for 5290534 back in now that 5310404 has been fixed in Mail.

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

2007-07-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        A little more FrameLoader cleanup while working on <rdar://problem/5126396>.
        
        Rename: "checkEmitLoadEvent" => "checkCallImplicitClose" because the function
        doesn't emit the load event; it just calls implicitClose.
        
        Rename: "m_wasLoadEventEmitted" => "m_didCallImplicitClose" because the variable
        tracks whether implicitClose was called.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Turned 12 lines of code into 6, adding ASSERT.
        * loader/FrameLoader.h: Removed bogus declaration of non-existent emitLoadEvent().

2007-07-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.
        
        REGRESSION: Crash when deleting table content in Leopard Mail

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Use a RefPtr
        for the next node to delete, in case it is destroyed when the
        current node is deleted.  In the crash reported in the radar, we
        crash because the next node is the div that holds the delete button
        and it's destroyed when the node that contains the selection is removed.

2007-07-09  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame from a QFrame to a pure QObject to eliminate all
        traces of widgets.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::paint):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::WidgetPrivate::setGeometry):
        (WebCore::WidgetPrivate::geometry):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::qwebframe):
        (WebCore::Widget::setQWebFrame):
        (WebCore::Widget::qwidget):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::geometryChanged):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertChildToSelf):
        (WebCore::Widget::convertSelfToChild):
        (WebCore::Widget::containingWindow):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        Add DocumentLoader::isLoadingMainResource.

        * WebCore.exp:

2007-07-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        exported String::createCFString, needed for <rdar://problem/5320208>

2007-07-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        Test case for the bug below, which is http://bugs.webkit.org/show_bug.cgi?id=14207

        * manual-tests/flash-unload-tab.html: Added.

2007-07-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5295734> Repro crash closing tab/window @ maps.google.com in
        WTF::HashSet<KJS::RuntimeObjectImp*, WTF::PtrHash<KJS::RuntimeObjectImp*>,
        WTF::HashTraits<KJS::RuntimeObjectImp*> >::add + 11
        
        Automated test case is not possible. Did not bother with manual test this time.

        * bindings/js/kjs_dom.cpp:
        (WebCore::getRuntimeObject): Check that runtime root isn't null, as well as instance;
        this should cover the case where the plugin is already shut down and onunload time.

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

        Reviewed by Sam.

        - fixed <rdar://problem/5220706> REGRESSION (TOT): repro crash in -[WebView(WebViewInternal) _addObject:forIdentifier:] [14425]
        http://bugs.webkit.org/show_bug.cgi?id=14425

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow): No longer take an immediate argument - always do immediate loads
        on a newly created Window. Also, do a load of "" to make sure that the right info makes
        it to the app.
        (KJS::showModalDialog): Updated for above.
        (KJS::WindowFunc::callAsFunction): Updated for above.
        * dom/Document.cpp:
        (WebCore::Document::shouldBeAllowedToLoadLocalResources): If our URL is about:blank,
        we're allowed if our opener is (since the opener must have written the contents).
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation): Add a variant which takes a KURL, which it
        expects to be pre-completed. This is to avoid completing "" to the opener URL.
        (WebCore::FrameLoader::urlSelected): Allow loading empty URLs.
        * loader/FrameLoader.h:
        
        Test case is manual only, since it takes particular app behavior to reproduce:
        
        * manual-tests/new-window-subresource-crash.html: Added.

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix leaks introduced in r24099

        * dom/Element.cpp:
        (WebCore::Element::~Element): Do not delete the cached computed style here.
        (WebCore::Element::detach): Delete the computed style here instead.
        (WebCore::Element::computedStyle): Removed a redundant ref() which was
        causing the leak. Changed to return 0 if the element is not attached,
        because in that case there is currently no way to tell when to delete the computed
        style.

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12384
          getComputedStyle with td.style.display='none' reports '' for all properties except display

        Test: fast/css/computed-style-without-renderer.html

        Implement rich computed style for elements that do not have a renderer.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getPositionOffsetValue): Changed to take a RenderStyle instead of
        a RenderObject.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Changed to
        use the computed style returned by the node instead of going through the
        renderer. Changed properties that compute by measuring the renderer to
        fall back on returning the length from the RenderStyle if a renderer does
        not exist.
        (WebCore::CSSComputedStyleDeclaration::length): Changed to return the number
        of properties we can compute even if the element has no renderer.
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties): Changed
        to use the computed style returned by the node instead of going through the
        renderer.
        * dom/Element.cpp:
        (WebCore::ElementRareData::ElementRareData): Added a computed style member,
        used to cache computed style for elements that do not have a renderer.
        (WebCore::ElementRareData::resetComputedStyle): Added.
        (WebCore::Element::~Element): Delete the cached computed style.
        (WebCore::Element::recalcStyle): Added code to delete the cached computed
        style when necessary.
        (WebCore::Element::computedStyle): Added. Returns the style used in rendering
        the element, if available. Otherwise uses the style selector to compute style
        for the element.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::computedStyle): Added. This method returns either the style
        used in rendering the node, or the style that would be used if the node
        had a renderer.
        * dom/Node.h:

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14544
          Scroll wheel events are ignored when the cursor is over an iframe's border

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget): Changed to return false if
        the event coordinates are not inside the widget's NSView hierarchy.

2007-07-08  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=10752
        The inspector should not respond to Make Text Smaller/Bigger commands

        Use the -webkit-text-size-adjust property to ignore text sizing        
        and do not take the zoom factor into account for line height when
        -webkit-text-size-adjust is set to none.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/inspector/inspector.css:

2007-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5318994> Integer overflow in WebCore's Base64.cpp:base64Encode

        * platform/Base64.cpp:
        (WebCore::base64Encode): Check against a maximum size.
        (WebCore::base64Decode): Ditto.

2007-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5124665> WebCore secondary-thread assertion should use linked-on-or-after check instead of building on Tiger check

        * platform/ThreadCheck.h: Renamed _WebCoreThreadViolationCheck to reportThreadViolation
        since it's in the WebCore namespace and also we shouldn't use leading underscores since
        those are reserved for the compiler and standard library. Added a new function named
        setDefaultThreadViolationBehavior and an enum for the parameter. Removed the
        threadViolationIsException parameter from WebCoreReportThreadViolation since we use
        a global variable for it now. Got rid of the unnecessary use of do while (0) in the
        WebCoreThreadViolationCheck macro -- since it's only a single function call it's already
        a statement and doesn't need to be turned into one with the do while (0) trick.

        * platform/mac/ThreadCheck.mm:
        (WebCore::readThreadViolationBehaviorFromUserDefaults): Moved the code to read from
        NSUserDefaults into this helper function. Changed it to use stringForKey instead of
        objectForKey so we don't get a "method not found" if someone puts something other than
        a string in there. Updated to use the new globals.
        (WebCore::setDefaultThreadViolationBehavior): Added.
        (WebCore::reportThreadViolation): Simplified, now that most of the work is in the
        readThreadViolationBehaviorFromUserDefaults function.
        (WebCoreReportThreadViolation): Changed to use a global variable instead of parameter
        to determine how to report a violation. Added LogOnFirstThreadViolation, which will
        log only once for each function that violates.

        * WebCore.exp: Updated for above changes.

2007-07-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14221
          Repro crash (ASSERTION FAILED: oldText in RenderBlock::updateFirstLetter() during relayout of :before content with first-letter style)

        Test: fast/css-generated-content/before-with-first-letter.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer): If a child
        of the existing 'before' container is not text, do not assume that it is an
        image, since it can also be an inline wrapping a first-letter. In that case,
        do not update its style (so in particular, keep it a FIRST_LETTER type style)
        and leave it to updateFirstLetter() to take care of.

2007-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Bailout early in Window::put() if attribute is readonly to avoid
        extra calls to isSafeScript().

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):

2007-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5292364> REGRESSION: ZX Spectrum 3.0 widget - graphic anomalies in widget window frame

        Updated Dashboard quirk so it affects fill, stroke, and clip, rather than just stroke.

        Test: fast/canvas/fill-stroke-clip-reset-path.html

        * html/CanvasRenderingContext2D.h: Added clearPathForDashboardBackwardCompatibilityMode.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clearPathForDashboardBackwardCompatibilityMode): Added.
        (WebCore::CanvasRenderingContext2D::fill): Call the new function.
        (WebCore::CanvasRenderingContext2D::stroke): Replaced in-line code with a call to the new function.
        (WebCore::CanvasRenderingContext2D::clip): Call the new function.

2007-07-07  Rob Buis  <buis@kde.org>

        Reviewed and tweaked by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8994
        Canvas doesn't reset on resize

        Also reset the rendering context when resetting the canvas.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::drawingContext):

2007-07-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14525
        Support exslt:node-set()

        Test: fast/xsl/exslt-node-set.xml

        * xml/XSLTExtensions.cpp: Added.
        (WebCore::exsltNodeSetFunction): A copy of exslt:node-set() implementation
        from libexslt 1.1.11 (shipped with Tiger).
        (WebCore::registerXSLTExtensions): This function registers any WebCore-provided
        extensions on a context. Currently, the only extension is exslt:node-set().
        * xml/XSLTExtensions.h: Added.

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToString):
        Register extensions when creating a context.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add XSLTExtensions.{h,cpp} to projects.

2007-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - fixed <rdar://problem/5133420> ASSERT in WebDocumentLoaderMac::decreaseLoadCount() un-discarding Gmail message
        
        test case: fast/loader/early-load-cancel.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didCancel): Don't send cancel-related client callbacks
        if we never even sent willSendRequest because we were deferred.

2007-07-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Pulled a number of methods from WebKit and WebCoreFrameBridge into 
        C++ objects.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::replaceMarkedText):
            From -[WebCoreFrameBridge replaceMarkedTextWithText:]
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::setMarkedTextRange):
            Pulled platform independent logic from Mac specific implementation
        (WebCore::Frame::selectRangeInMarkedText):
            Converted from -[WebHTMLView _selectRangeInMarkedText:]
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setMarkedTextRange):
            Now only does Mac specific logic when manipulating initial
            NSAttributedString
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
            Removed -[WebCoreFrameBridge replaceMarkedTextWithText:]

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14545
          REGRESSION (r21854-r21869): Repro crash in RenderBlock::updateFirstLetter @ nola.com/rose/

        Test: fast/css/first-letter-capitalized.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Moved the call to setFirstLetter
        further down so that the first letter is not destroyed if a text transform
        is applied to the remaining text fragment when it is add to the render tree.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousCharacter): Factored out of setTextInternal.
        (WebCore::RenderText::setTextInternal): Changed to call previousCharacter().
        * rendering/RenderText.h:
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::previousCharacter): Override to return the
        character in the original string before the start of the fragment. 
        * rendering/RenderTextFragment.h:

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14536
          Unnecessary layout done when mousing down in text field

        No test possible because there is no change in functionality.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setStyle): Reset the height and the width in
        the old style to avoid getting a layout hint as a result of having mutated
        the old style during layout.
        (WebCore::RenderTextControl::layout): Update children's layout if an inner
        block's dimensions should change. This need for layout was previously masked
        by the bug.

2007-07-06  Brady Eidson  <beidson@apple.com>

        Fix builds that use IconDatabaseNone.cpp - better, this time

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::isOpen):

2007-07-06  Brady Eidson  <beidson@apple.com>

        Fix builds that use IconDatabaseNone.cpp

        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::IconDatabase::databasePath): 

2007-07-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady
        
        - WebCore part of fix for: 
          <rdar://problem/5310739> Time Machine shouldn't back up WebKit's icon database files
        
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::isOpen): 
        made this method const (necessary to make IconDatabase::databasePath const)
        (WebCore::IconDatabase::databasePath): 
        new method, returns SQLDatabase's path if open, otherwise empty string
        
        * loader/icon/SQLDatabase.cpp:
        (WebCore::SQLDatabase::open):
        don't append a null character to the m_path ivar. The appended null character was making the path()
        method return a String with a trailing null, which is bad. However, there were no callers to the
        path() method until now. Instead of appending a null character to the ivar, use charactersWithNullTermination()
        instead of characters() when opening the database.
        
        * loader/icon/SQLDatabase.h:
        (WebCore::SQLDatabase::isOpen):
        made this method const (necessary to make IconDatabase::databasePath const)
        (WebCore::SQLDatabase::path):
        made this method const (not required for these changes, but seemed worth doing at the same time)

        * WebCore.exp:
        added symbol for IconDatabase::databasePath

2007-07-06  George Staikos  <staikos@kde.org>

        No real functional change - just move the localizations out and
        stick some placeholder text in.

        * platform/qt/Localizations.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        A little more FrameLoader cleanup while working on <rdar://problem/5126396>.
        
        Moved url() and URL() methods next to each other to highlight their subtlety.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::url):
        * loader/FrameLoader.h:

2007-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        A little FrameLoader cleanup while working on <rdar://problem/5126396>.
        
        Renamed endIfNotLoading() to endIfNotLoadingMainResource() because "loading"
        and "loadingMainResource" have distinct meanings and this function
        honors the latter.

        (WebCore::FrameLoader::endIfNotLoadingMainResource): Protect after the
        early return to avoid ref count churn.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isLoadingMainResource): Inlined this function.

2007-07-06  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame to a QFrame from a scroll area.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::frameGeometry):
        (WebCore::PlatformScrollbar::setFrameGeometry):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::~ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::horizontalScrollBar):
        (WebCore::ScrollView::verticalScrollBar):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::geometryChanged):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setScrollbarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::scroll):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        (WebCore::ScrollView::setParent):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::canvas):
        (WebCore::WidgetPrivate::setGeometry):
        (WebCore::WidgetPrivate::geometry):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::paint):
        (WebCore::Widget::originalGeometry):
        (WebCore::Widget::geometryChanged):

2007-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5280532> 
        REGRESSION: Can't access nested embed by document.name if object is not immediate parent
        
        Traverse up the tree looking for an object element.
        
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getInstance):

2007-07-06  George Staikos  <staikos@kde.org>

        Qt build fix: Don't clobber qmake variables that are already set.

        * WebCore.pro:

2007-07-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti.

        - <rdar://problem/5311093> JavaScriptCore fails to build with strict-aliasing warnings

        * platform/StringHash.h:
        (WTF::): Adapt to newer way to do storage types.

2007-07-06  Bernhard Rosenkraenzer  <bero@arklinux.org>

        Reviewed by Sam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13985
        Bug 13985: WebCore/rendering/RenderTable.cpp fails to compile with gcc 4.2.x

        * rendering/RenderTable.cpp:
        (WebKit::RenderTable::calcBorderLeft)
        (WebKit::RenderTable::calcBorderRight)

2007-07-06  Maxime Britto  <mbritto@pleyo.com>

        Reviewed by Maciej.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13038
        Bug 13038: ASSERTION FAILED: item->target().isEmpty() || m_mainFrame->tree()->find(item->target()) == m_mainFrame

        Modify an ASSERT in goToItem related to going back/forward in history.  We don't need to check the frameset if the target is _blank.
        The attached test case is a manual one since it relies on having pages opened in tabs in Safari.

        * manual-tests/goBack-blank-tab-page.html: Added.
        * manual-tests/resources/before-go-back.html: Added.
        * manual-tests/resources/will-go-back.html: Added.
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14400
          Assertion failure (SHOULD NEVER BE REACHED) going back on YouTube

        Test: fast/forms/button-state-restore.html

        * dom/Document.h:
        (WebCore::Document::isFormElementRegistered): Added.
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::closeRenderer): Restore saved form
        element state only if the element is registered with the document to
        have its state saved.

2007-07-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14487
          Incomplete repaint of background and border of boxes with -webkit-border-fit:lines

        Test: fast/repaint/border-fit-lines.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Do a full repaint if
        -webkit-border-fit:lines was specified.

2007-07-06  Tony Chang  <idealisms@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14516
        Bug 14516: crash loading multipart/x-mixed-replace data on windows safari

        NULL check m_resourceData to prevent a crash in Safari on Windows.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::clearResourceData):

2007-07-06  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Alexey.

        - Add UTF-32 encoding support 
          http://bugs.webkit.org/show_bug.cgi?id=13415

        Test:
         - fast/encoding/utf-32-big-endian-bom.html
         - fast/encoding/utf-32-big-endian-nobom.xml
         - fast/encoding/utf-32-little-endian-bom.html
         - fast/encoding/utf-32-little-endian-nobom.xml

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForBOM):
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * platform/TextDecoder.cpp:
        (WebCore::TextDecoder::checkForBOM):
        * platform/TextDecoder.h:
        * platform/TextEncoding.cpp:
        (WebCore::UTF32BigEndianEncoding):
        (WebCore::UTF32LittleEndianEncoding):
        * platform/TextEncoding.h:

2007-07-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Start implementening RenderThemeGdk/Gtk using GtkStyle. The approach is
        to allocate one native control for each widget type. And use margins, spacing,
        style properties from the Widget. And for drawing use GtkStyle on the rect supplied.

        This should allow nice integration and be relative resource friendly. Mozilla is using
        a similiar approach. They seem to share the GdkPixmap among several operations and this
        will be an obvious candidate for improvements. Create a normally big enough GdkPixmap and
        use that for drawing and then set clip regions for cairo to make sure to not go beyond the
        width and height.

        The next steps will be to introduce states for the widgets, add more widgets, handle focus,
        and various other style attributes, honor the size and margin and use that to propagate this
        back to RenderStyle*.

        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::RenderThemeGdk):
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):
        (WebCore::RenderThemeGdk::copyToContext):
        (WebCore::RenderThemeGdk::gtkButton):
        (WebCore::RenderThemeGdk::gtkCheckbox):
        (WebCore::RenderThemeGdk::gtkRadioButton):
        (WebCore::RenderThemeGdk::gtkWindowContainer):
        * platform/gdk/RenderThemeGdk.h:

2007-07-06  Rob Buis  <buis@kde.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14442
        Adding a stop with value 1.0 to a gradient that has already been used has no effect

        Implement start and end stop handling differently so they are not
        in the color stop array.

        * html/CanvasGradient.cpp:
        (WebCore::compareStops):
        (WebCore::CanvasGradient::getColor):
        (WebCore::CanvasGradient::findStop):

2007-07-06  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5301994> Garbled text still showing on some sites

        Replace calls to GetGlyphIndices with wkGetGlyphs.

        Reviewed by Alice.

        * platform/win/GlyphPageTreeNodeWin.cpp:
        (WebCore::GlyphPage::fill): Use wkGetGlyphs.
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):

2007-07-06  Matt Lilek  <pewtermoose@gmail.com>

        Not reviewed - Windows build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::imageFromSelection):

2007-07-06  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Switch USE(ICONDATABASE) to ENABLE(ICONDATABASE) and activate the
        flag via the .pro file

        * WebCore.pro:
        * loader/icon/IconDatabase.h:

2007-07-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam

        - WebCore part of fix for <rdar://problem/5315033>

        * rendering/RenderObject.h:
        replaced PaintRestrictionSelectionOnlyWhiteText with PaintRestrictionSelectionOnlyBlackText
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        replaced forceWhiteText with forceBlackText

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addLineBoxRects):
        added a useSelectionHeight parameter, which defaults to false; this method is unimplemented
        at this level so this has no effect.

        * rendering/RenderText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        added a useSelectionHeight parameter, which defaults to false. If true, use the vertical position
        and height returned by selectionRect rather than replacing it with the more tight-fitting position
        and height of the line box.

        * dom/Range.h:
        * dom/Range.cpp:
        (WebCore::Range::addLineBoxRects):
        added a useSelectionHeight parameter, which defaults to false. Passes this along to RenderObject.        

        * page/Frame.h:
        renamed parameter to selectionImage
        * page/Frame.cpp:
        (WebCore::Frame::selectionTextRects):
        pass true for addLineBoxRects new useSelectionHeight parameter, so the rects returned by this new
        method will match the height that the selection would be painted here
        (WebCore::Frame::paint):
        updated for white->black name changes
        
        * page/mac/FrameMac.mm:
        (WebCore::Frame::selectionImage):
        updated for white->black name changes
        
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations):
        updated for white->black name changes

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        updated for white->black name changes

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        updated for white->black name changes, and actually use black instead of white. This was the goal
        of all the name changes.

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        Fix layout test failures.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        Don't make a representation if we're creating the initial document.

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Fix Bug 14388: Input in text fields limited to 1024 characters
        http://bugs.webkit.org/show_bug.cgi?id=14388

        Slightly modified by Adam Roben.

        Reviewed by Adele.

        Tests: fast/forms/input-implicit-length-limit.html
               fast/forms/input-maxlength.html

        * html/HTMLInputElement.cpp: Bump limit to 524288.
        (WebCore::HTMLInputElement::init):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):

2007-07-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Add focus, blur and close functions to DOMWindow implementation class
        and move bindings from Window to JSDOMWindow.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):
        (KJS::WindowFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm: Move prototype function declaration from
        the implementation to the header.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::blur):
        (WebCore::DOMWindow::close):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-07-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5279521> REGRESSION: In Mail, a crash occurs at WebCore::Range::startPosition() when attempting to apply alignment to selected image/text in message body

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::exitNode): Previously emitted content shouldn't have
        to come from a text node in order to emit a '\n' as we exit block containers.

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5315284> REGRESSION: Leopard Launch Time - plugins are being accessed at startup.

        Set a response that has a MIME type of "text/html" on the document loader so WebKit won't refresh the 
        plugin database looking for a plug-in that can handle the document's MIME type (which will be null anyway).
                 
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):

2007-07-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5106788>
        WebKit loads user style sheets too late as seen in Mail (breaks DataDetectors; Mail flashes wrong font)

        Let the document know when the user style sheet is loading so that it try not to display anything
        until the user style sheet has finished loading.
        
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::~UserStyleSheetLoader):
        (WebCore::UserStyleSheetLoader::setCSSStyleSheet):
        (WebCore::Frame::setUserStyleSheetLocation):

2007-07-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Move JSDOMWindow overriding getOwnPropertySlot logic from KJS::Window
        up into JSDOMWindow.  No change in functionality so no testcase required. 

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOwnPropertySlot):
        * bindings/js/kjs_window.h:

2007-07-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed and Landed by Sam.

        - fix bug 14465 for window.showModalDialog

        * bindings/js/kjs_window.cpp:
        (KJS::parseModalDialogFeatures):
        (KJS::showModalDialog):

2007-07-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14465
        window.open() uses the literal "undefined" as the URL

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): add checks for undefined and null values when setting the url.
        * manual-tests/open-url-undefined.html: Added.

2007-07-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Rob Buis.

        Rework FontData and FontPlatformData for the Gdk work to make valgrind
        happy.

        Move destroying of FontConfig and Cairo objects held in FontPlatformData
        to FontData::platformDestroy. The ownership of these objects is held by
        FontData. This is following the Mac and Qt port at least.

        Currently it is possible that FontPlatformData will not create cairo resources
        in this case at least make sure the variables are initialized to 0.
        Initialize x,y of the cairo_glyph_t with zero to avoid extents.x_advance depending
        on subtracing with not defined values.

        FontPlatformData::hash. Using FontDescription is a bad idea as we don't have a clue
        about how it is packed, if holes are present, etc. The FcPattern and the m_fontMatrix
        should be good enough to describe the Font. All other objects are created using these
        variables

        Replace C-style casts with C++ casts, in this case reinterpret_cast.

        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::platformInit): Don't assert
        (WebCore::FontData::platformDestroy): Take over ownership
        (WebCore::FontData::platformWidthForGlyph): initialize
        (WebCore::FontData::setFont): be paranoid and assert
        * platform/gdk/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Initialize everything
        (WebCore::FontPlatformData::hash): make valgrind happy and don't use m_fontDescription
        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData): FontData::platformDestroy will do this
        (WebCore::FontPlatformData::list): Don't use C-style casts.
        (WebCore::FontPlatformData::setFont): m_fontFace, m_fontMatrix, m_options might not be initialized
        (WebCore::FontPlatformData::operator==): Don't use C-style casts.

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14445
        GraphicsContextCairo code style cleanup

        Follow the cr naming convention for cairo_t*.
        Remove trailing whitespace.
        Replace C casts with C++ casts.
        Avoid needless casts.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::adjustLineToPixelBoundaries):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc): Save/restore the graphics state.
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/ImageCairo.cpp: Avoid the confusing ctxt/context naming scheme.
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14531
        Cairo SVGImage::nativeImageForCurrentFrame() has no return

        Return the Cairo surface from the frame cache.

        Also add a fall-through else macro with notImplemented() so that future
        ports do not make the same mistake.

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):

2007-07-05  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14513
        Cairo animated GIF support is broken

        Implement ImageSource::frameIsCompleteAtIndex() to enable animated GIFs.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2007-07-04  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13400
        Bug 13400: REGRESSION (r20809-20814): No back entry created for navigations created by assigning to document.location
        <rdar://problem/5153025>

        Treat userGesture as always true for setLocation, forcing a back/forward
        entry to be created.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setLocation):

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

        Restore MouseEventWithHitTestResults::targetNode's old behavior

        Reviewed by Mark.

        Fixes fast/images/imagemap-case and fast/replace/image-map.

        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::targetNode): Use the inner
        node, not the inner non-shared node.

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

        Mac, Qt, and Gdk build fixes.

        * page/EventHandler.h:
        * page/gdk/EventHandlerGdk.cpp:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * page/qt/EventHandlerQt.cpp:

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

        Fix the Qt/Gdk builds.

        * page/gdk/EventHandlerGdk.cpp:
        * page/qt/EventHandlerQt.cpp:

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

        Move tooltip logic down into WebCore so that it can be shared cross-platform

        Reviewed by Sam.

        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip): Added.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved): Call Chrome::setToolTip.
        * platform/graphics/svg/SVGImageEmptyClients.h:

        Added stubs for Gdk:

        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::setToolTip):

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

        Add Settings::showsURLsInToolTips

        Reviewed by Sam.

        * WebCore.exp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

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

        Move logic for calling mouseDidMoveOverElement into WebCore

        Reviewed by Sam.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved): Added. Calls Chrome::mouseDidMoveOverElement.
        (WebCore::EventHandler::handleMouseMoveEvent): Now takes an optional
        HitTestResult* parameter which is used to communicate to the caller the
        node the mouse is over.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseMoved): Changed to call the overloaded
        mouseMoved().
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Pass hoveredNode
        through to the subframe so we can get the deepest node hovered, not
        just the node's parent frame.
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Ditto.

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

        Add Chrome::mouseDidMoveOverElement

        This does the work of calling up to the ChromeClient (which will call
        the UI delegate).

        Reviewed by Sam.

        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement): Added.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h: Updated for change to
        ChromeClient.
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::mouseDidMoveOverElement):

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

        Changed PlatformMouseEvent to store the modifier flags of the event

        Reviewed by Sam.

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

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

        Add HitTestResult::setToNonShadowAncestor

        Reviewed by Sam.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint): Moved logic into
        HitTestResult::setToNonShadowAncestor.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setToNonShadowAncestor):
        * rendering/HitTestResult.h:

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

        Change MouseEventWithHitTestResults to hold onto a HitTestResult

        Reviewed by Sam.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        (WebCore::MouseEventWithHitTestResults::targetNode):
        (WebCore::MouseEventWithHitTestResults::localPoint):
        (WebCore::MouseEventWithHitTestResults::scrollbar):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::event):
        (WebCore::MouseEventWithHitTestResults::hitTestResult):

2007-07-04  Matt Lilek  <pewtermoose@gmail.com>

        Not reviewed, gdk build fix.

        * platform/gdk/FrameGdk.cpp:

2007-07-05  Antti Koivisto  <antti@apple.com>

        Reviewed by John.
        
        Fix Repro crash due to infinite recursion in HTMLParser::handleError @ youos.com
        <rdar://problem/5237811>
        
        It is possible to add table parts (thead etc) without table ancestor to a document fragment. If a new table element
        was added to such a part, as in
        
        div.innerHTML = '<tbody><table>';
        
        the parser error handling code would try to pop the previous table as normal. However since
        the table does not actually exist nothing would happen and parser would go to infinite recursion.
        
        Solution here is to pop table parts one by one when handling the error inside a fragment instead of trying to pop
        the table straight away (as it might not exist).

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2007-07-04  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Draw menulist (comboboxes) without text overlap on the button.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setPopupPadding):

2007-07-04  George Staikos  <staikos@kde.org>

        Compile

        * page/qt/FrameQt.cpp:
        * WebCore.pro:

2007-07-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14504
        REGRESSION (r23573): Amazon Book Excerpt can not be viewed in recent nightly

        - Made it possible (again) to shadow window properties with local variable names.

        Test: fast/dom/Window/window-property-shadowing.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customPut):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2007-07-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/5225119> support smart pasting on Windows

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Added new files
        * editing/SmartReplace.cpp: Added.
        (WebCore::isCharacterSmartReplaceExempt):
            Added non-CF implementation placeholder
        * editing/SmartReplace.h: Added.
        * editing/SmartReplaceCF.cpp: Added.
        (WebCore::getSmartSet):
        (WebCore::isCharacterSmartReplaceExempt):
            Added new implementation

        * bridge/win/FrameWin.cpp:
        * page/Frame.h:
        * page/mac/FrameMac.mm:
            Removed old declaration and implementation

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
            Changed to call the new function instead of old

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
            Removed old declaration and implementation
        (-[WebCoreFrameBridge smartInsertForString:replacingRange:beforeString:afterString:]):
            Changed to call the new function instead of old

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::Pasteboard):
            Register new clipboard format
        (WebCore::Pasteboard::writeSelection):
            Set data for smartpaste format on clipboard
        (WebCore::Pasteboard::canSmartReplace):
            Added non-stub implementation

2007-07-04  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Similar to the PlatformScrollbar fixes, adjust the painter to make the
        styler draw all subcontrols, and in this case the focus rect, in the
        proper location

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMenuList):

2007-07-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14495
          REGRESSION: Wrong cursor is displayed during drag and drop when text is selected
          <rdar://problem/5312384>

        No test possible because DumpRenderTree cannot query the current cursor.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor): Changed into a member function and
        added that if the last mouse down event could not have started a
        selection, then the cursor should not change to an I-beam unconditionally.
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:

2007-07-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Rob Buis.

        A little progress in tracking dependencies.

        * WebCore.pro: Add DEPENDPATH for the Gdk port.

2007-07-03  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5221297> Font family name in the cssText for a DOMCSSStyleDeclaration needs quotes

        Test: editing/style/font-family-with-space.html

        * css/FontFamilyValue.cpp:
        (WebCore::isValidCSSIdentifier): Added. Implements the same rule that the CSS lexer does.
        (WebCore::quoteStringIfNeeded): Changed to call isValidCSSIdentifier instead of just
        checking for a leading "#" character.
        * editing/markup.cpp:
        (WebCore::escapeTextForMarkup): Changed to take a String parameter for better efficiency.
        (WebCore::renderedText): Changed to return a String for better efficiency.
        (WebCore::addNamespace): Updated to pass String to escapeTextForMarkup.
        (WebCore::startMarkup): Updated to pass String to escapeTextForMarkup. Added missing call
        to escapeTextForMarkup in the special case for the style property.
        (WebCore::createMarkup): Changed from single quotes to double quotes and also added missing
        call to escapeTextForMarkup in two special cases for the style property.

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Twelfth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add casts and accompanying FIXMEs to avoid remaining compiler errors.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):

2007-07-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5093862>
        Nothing shown in plugin area when trying to play content using the DivX plugin
        
        Defer calling SetWindow for the DivX plugin, just like we do with the WMP plugin.
                
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::determineQuirks):

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Ninth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Fix function signature to use unsigned long instead of unsigned long long.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::completeProgress):
        * loader/ProgressTracker.h:

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Eighth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Convert SVG implementation files to use floats instead of doubles
          to match the spec/IDLs.

        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::getEndTime):
        (WebCore::SVGAnimationElement::getStartTime):
        (WebCore::SVGAnimationElement::getCurrentTime):
        (WebCore::SVGAnimationElement::getSimpleDuration):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGMatrix.idl:
        * ksvg2/svg/SVGNumber.idl:
        * ksvg2/svg/SVGParserUtilities.cpp:
        (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:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (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):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPathSegArc.cpp:
        (WebCore::SVGPathSegArcAbs::SVGPathSegArcAbs):
        (WebCore::SVGPathSegArcAbs::setX):
        (WebCore::SVGPathSegArcAbs::x):
        (WebCore::SVGPathSegArcAbs::setY):
        (WebCore::SVGPathSegArcAbs::y):
        (WebCore::SVGPathSegArcAbs::setR1):
        (WebCore::SVGPathSegArcAbs::r1):
        (WebCore::SVGPathSegArcAbs::setR2):
        (WebCore::SVGPathSegArcAbs::r2):
        (WebCore::SVGPathSegArcAbs::setAngle):
        (WebCore::SVGPathSegArcAbs::angle):
        (WebCore::SVGPathSegArcRel::SVGPathSegArcRel):
        (WebCore::SVGPathSegArcRel::setX):
        (WebCore::SVGPathSegArcRel::x):
        (WebCore::SVGPathSegArcRel::setY):
        (WebCore::SVGPathSegArcRel::y):
        (WebCore::SVGPathSegArcRel::setR1):
        (WebCore::SVGPathSegArcRel::r1):
        (WebCore::SVGPathSegArcRel::setR2):
        (WebCore::SVGPathSegArcRel::r2):
        (WebCore::SVGPathSegArcRel::setAngle):
        (WebCore::SVGPathSegArcRel::angle):
        * ksvg2/svg/SVGPathSegArc.h:
        * ksvg2/svg/SVGPathSegCurvetoCubic.cpp:
        (WebCore::SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX):
        (WebCore::SVGPathSegCurvetoCubicAbs::x):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY):
        (WebCore::SVGPathSegCurvetoCubicAbs::y):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX1):
        (WebCore::SVGPathSegCurvetoCubicAbs::x1):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY1):
        (WebCore::SVGPathSegCurvetoCubicAbs::y1):
        (WebCore::SVGPathSegCurvetoCubicAbs::setX2):
        (WebCore::SVGPathSegCurvetoCubicAbs::x2):
        (WebCore::SVGPathSegCurvetoCubicAbs::setY2):
        (WebCore::SVGPathSegCurvetoCubicAbs::y2):
        (WebCore::SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathSegCurvetoCubicRel::setX):
        (WebCore::SVGPathSegCurvetoCubicRel::x):
        (WebCore::SVGPathSegCurvetoCubicRel::setY):
        (WebCore::SVGPathSegCurvetoCubicRel::y):
        (WebCore::SVGPathSegCurvetoCubicRel::setX1):
        (WebCore::SVGPathSegCurvetoCubicRel::x1):
        (WebCore::SVGPathSegCurvetoCubicRel::setY1):
        (WebCore::SVGPathSegCurvetoCubicRel::y1):
        (WebCore::SVGPathSegCurvetoCubicRel::setX2):
        (WebCore::SVGPathSegCurvetoCubicRel::x2):
        (WebCore::SVGPathSegCurvetoCubicRel::setY2):
        (WebCore::SVGPathSegCurvetoCubicRel::y2):
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.cpp:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setX):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::x):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setY):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::y):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::x2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::y2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setX):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::x):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setY):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::y):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::x2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::y2):
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setX):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::x):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setY):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::y):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setX1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::x1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::setY1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::y1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setX):
        (WebCore::SVGPathSegCurvetoQuadraticRel::x):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setY):
        (WebCore::SVGPathSegCurvetoQuadraticRel::y):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setX1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::x1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::setY1):
        (WebCore::SVGPathSegCurvetoQuadraticRel::y1):
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadraticRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::setX):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::x):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::setY):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::y):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::setX):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::x):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::setY):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::y):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * ksvg2/svg/SVGPathSegLineto.cpp:
        (WebCore::SVGPathSegLinetoAbs::SVGPathSegLinetoAbs):
        (WebCore::SVGPathSegLinetoAbs::setX):
        (WebCore::SVGPathSegLinetoAbs::x):
        (WebCore::SVGPathSegLinetoAbs::setY):
        (WebCore::SVGPathSegLinetoAbs::y):
        (WebCore::SVGPathSegLinetoRel::SVGPathSegLinetoRel):
        (WebCore::SVGPathSegLinetoRel::setX):
        (WebCore::SVGPathSegLinetoRel::x):
        (WebCore::SVGPathSegLinetoRel::setY):
        (WebCore::SVGPathSegLinetoRel::y):
        * ksvg2/svg/SVGPathSegLineto.h:
        * ksvg2/svg/SVGPathSegLinetoHorizontal.cpp:
        (WebCore::SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathSegLinetoHorizontalAbs::setX):
        (WebCore::SVGPathSegLinetoHorizontalAbs::x):
        (WebCore::SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathSegLinetoHorizontalRel::setX):
        (WebCore::SVGPathSegLinetoHorizontalRel::x):
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        * ksvg2/svg/SVGPathSegLinetoVertical.cpp:
        (WebCore::SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathSegLinetoVerticalAbs::setY):
        (WebCore::SVGPathSegLinetoVerticalAbs::y):
        (WebCore::SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathSegLinetoVerticalRel::setY):
        (WebCore::SVGPathSegLinetoVerticalRel::y):
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPathSegMoveto.cpp:
        (WebCore::SVGPathSegMovetoAbs::SVGPathSegMovetoAbs):
        (WebCore::SVGPathSegMovetoAbs::setX):
        (WebCore::SVGPathSegMovetoAbs::x):
        (WebCore::SVGPathSegMovetoAbs::setY):
        (WebCore::SVGPathSegMovetoAbs::y):
        (WebCore::SVGPathSegMovetoRel::SVGPathSegMovetoRel):
        (WebCore::SVGPathSegMovetoRel::setX):
        (WebCore::SVGPathSegMovetoRel::x):
        (WebCore::SVGPathSegMovetoRel::setY):
        (WebCore::SVGPathSegMovetoRel::y):
        * ksvg2/svg/SVGPathSegMoveto.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgPolyTo):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::getCurrentTime):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        (WebCore::SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::translate):
        (SVGTransform::scale):
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):

2007-07-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5289718>
        http://bugs.webkit.org/show_bug.cgi?id=14437
        CrashTracer: [REGRESSION] 76 crashes in Safari at com.apple.WebCore: WebCore::Frame::settings const + 6 (14437)
        
        Based on a patch from Maxime Britto.
        
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        If the script caused the frame to go away, return nil. This can only happen if a plugin in a subframe destroys
        its frame.

        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):
        ASSERT that this is only called on the main frame.

2007-07-03  John Sullivan  <sullivan@apple.com>

        Written by Darin, reviewed by me
        
        - fixed <rdar://problem/5249730> REGRESSION (Leopard, around 9A464): Safari opens the same local 
          documents more than once due to canonicalization change

        * loader/mac/LoaderNSURLExtras.m:
        (canonicalURL):
        pass URL through KURL so we get KURL's version of canonicalization as well as
        NSURLProtocol's version of canonicalization

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Seventh round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Adds more narrowPrecision functions to FloatPoint, FloatSize and FloatRect.
        - Changes over more implicit conversions to use new functions.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::matrixTransform):
        (WebCore::FloatPoint::narrowPrecision):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::narrowPrecision):
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::narrowPrecision):
        * platform/graphics/FloatSize.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::createRoundedRectangle):
        (WebCore::Path::createRectangle):
        (WebCore::Path::createEllipse):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::paint):
        * platform/graphics/svg/cg/CgSupport.cpp:
        (WebCore::applyStrokeStyleToContext):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::applyLuminanceToAlphaFilter):
        (WebCore::applyExpandAlphatoGrayscaleFilter):
        (WebCore::transformImageIntoGrayscaleMask):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::mapAbsolutePointToLocal):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcViewport):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):

2007-07-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5261523>
        Crash playing MP11 on cnbc.com
        
        The WMP Netscape plugin still creates a window even when windowless mode is turned on. Work around this by
        always removing the "windowlessvideo" parameter before passing it to the plugin.
        According to http://msdn2.microsoft.com/en-us/library/bb249373.aspx, "The windowlessVideo property is not 
        supported for Netscape Navigator. Setting a value for this property in Navigator may yield unexpected results."
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::setParameters):
        (WebCore::PluginViewWin::PluginViewWin):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):

2007-07-03  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Only draw sunken state for appropriate widgets. Not, for example, for
        lineedits.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::applyTheme):

2007-07-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        REGRESSION: misplaced selection ring remains after link is no longer focused.
        <rdar://problem/5205580>
        
        Fix placement of selection ring when part of the ring is in a different layer.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects): Get coordinates right when moving to a different layer.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): 
        Don't reset state variables when not necessary.  When repaint() was called at the end of setSyle() it would
        get repaint rects wrong in some cases.

2007-07-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        Blind fix for CrashTracer: [USER] 25 crashes in Safari at com.apple.WebCore: WebCore::Frame::document const + 6
        <rdar://problem/5263939>
        
        No one has managed to reproduce this but it looks like null check is needed here. There are plausible ways
        m_frame could be null for a live FrameView object.

        * page/FrameView.cpp:
        (WebCore::FrameView::needsLayout):

2007-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5098378> single-pixel image optimization needs to be rewritten to not depend on floating point bitmap
        Tested by fast/replaced/image-solid-color-with-alpha.html

        Switch from float to byte based bitmap when pulling the color from 1x1 pixel images so
        that we can use the single pixel image optimisation in WebKit/win.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2007-07-02  Adam Roben  <aroben@apple.com>

        Fix Bug 14498: RenderContainer::positionForCoordinates contains an order of operations error
        http://bugs.webkit.org/show_bug.cgi?id=14498

        There were two bugs:
        1) xPos/yPos were flipped
        2) + binds tighter than ?:, so the order of operations was incorrect

        Reviewed by Darin.

        Test: fast/inline-block/14498-positionForCoordinates.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates):

2007-07-02  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker and Tim Hatcher.

        - fix <rdar://problem/5307906> some classes need finalize methods because
          of non-trivial work done in dealloc methods

        * bindings/objc/DOMRGBColor.mm:
        (+[DOMRGBColor initialize]): Added. Tells finalizer to run on main thread,
        which is needed because we are sharing a CFDictionary here with no locking.

        * bridge/mac/WebCoreAXObject.mm:
        (+[WebCoreAXObject initialize]): Added. Tells finalizer to run on main thread.
        (-[WebCoreAXObject finalize]): Added. Calls detach.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode do what it wants to do.

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Sixth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Use new narrowPrecisionToFloat() and narrowPrecisionToCGFloat() where
        appropriate.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::handleTimerEvent):
        (WebCore::SVGAnimationElement::updateAnimatedValueForElapsedSeconds):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * platform/graphics/cg/AffineTransformCG.cpp:
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::shear):

2007-07-02  John Sullivan  <sullivan@apple.com>

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        added a comment

2007-07-02  Sam Weinig  <sam@webkit.org>

        Rubberstamped by Darin.

        Rename FloatConversionUtilities.h to FloatConversion.h.
        Fix Win32 build.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DeprecatedString.cpp:
        * platform/FloatConversion.h: Copied from platform/FloatConversionUtilities.h.
        * platform/FloatConversionUtilities.h: Removed.
        * platform/StringImpl.cpp:

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Fifth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Add toFloat() method to string classes and use it where appropriate.

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        * ksvg2/svg/SVGAngle.cpp:
        (WebCore::SVGAngle::setValueAsString):
        * platform/AtomicString.h:
        (WebCore::AtomicString::toFloat):
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::toFloat):
        * platform/DeprecatedString.h:
        * platform/FloatConversionUtilities.h: Added.
        (WebCore::narrowPrecisionToFloat):
        (WebCore::narrowPrecisionToCGFloat):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::toFloat):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toFloat):
        * platform/StringImpl.h:

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Kevin McCullough.

        Fourth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Use new piDouble and piFloat constants instead of M_PI.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::rotate):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::calculateArc):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        (WebCore::Path::createEllipse):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::setCurrentPage):
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * rendering/RenderPath.cpp:
        (WebCore::drawMarkerWithData):

2007-07-01  Adam Roben  <aroben@apple.com>

        Clarify/fix {Shadow,BorderImage}ParseContext's memory management

        Prefast emitted warnings that drew my attention to
        {Shadow,BorderImage}ParseContext::failed().  It turned out that these
        methods were actually correct, but rather confusing. "failed" really
        meant "abort and clean up" rather than "did you fail?", which was
        unclear. However, once I figured that out, the "and clean up" part was
        still a bit confusing, because all failed() did was to set a flag that
        would later cause the ParseContext's members to be deleted in the
        destructor. To clear this up, I've gotten rid of the failed() method
        altogether. It always returned false, so I've replaced all calls to
        it with the value false.

        I also noticed that the lifetime management of the ParseContexts'
        members was in all cases confusing, and in some cases wrong. The
        m_border{Top,Right,Bottom,Left} members of BorderImageParseContext
        were leaked whenever a border-image property was successfully parsed.
        I fixed that by holding these members in OwnPtrs. The
        CSSPrimitiveValue members of {Shadow,BorderImage}ParseContext, which
        inherit from Shared, were being explicitly deleted, which is not a
        safe way to manage the lifetime of objects that inherit from Shared.
        To fix this, I put those members inside RefPtrs. These two changes
        allowed me to remove the destructors entirely.

        Reviewed by Darin.

        All regression tests pass.

        * css/cssparser.cpp:
        (WebCore::ShadowParseContext::commitValue): Use .release() to avoid
        ref-count churn.
        (WebCore::ShadowParseContext::commitLength): Use a RefPtr for the new
        value to avoid a leak.
        (WebCore::CSSParser::parseShadow): Use 'false' instead of
        'context.failed()', and use .release() to avoid ref-count churn.
        (WebCore::BorderImageParseContext::commitWidth): Updated to use
        OwnPtr.
        (WebCore::CSSParser::parseBorderImage): Use 'false' instead of
        'context.failed'.

2007-07-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5297146>
        Crash in Mail at WebCore::Frame::setUserStyleSheetLocation (reproducible w/ particular message)
        
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        Only insert the resource in the LRU list if the cache is enabled.
        
        (WebCore::Cache::insertInLRUList):
        (WebCore::Cache::resourceAccessed):
        Assert that the resource is in the cache.

2007-07-01  Darin Adler  <darin@apple.com>

        * css/tokenizer.flex: Rolled out the fix for 14453.
        The layout test wasn't passing. We'll try again.

2007-07-01  Adam Roben  <aroben@apple.com>

        Fix a crash in ~PluginViewWin()

        This crash was introduced in r23827.

        Reviewed by Anders.

        Fixes dom/html/level2/html/HTMLAnchorElement01.html

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::~PluginViewWin): Allow m_plugin to be null.

2007-07-01  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14453
        REGRESSION: www.nzherald.co.nz almost all the formating is gone
 
        * css/tokenizer.flex: Allow hex colors with 2, 4, or 5 hex digits.

2007-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Third round of implicit 64-32 bit conversion errors fixes.
        <rdar://problem/5292262>

        - Use new CSSPrimitiveValue::getDoubleValue() and CSSPrimitiveValue::getIntValue()
          methods instead of CSSPrimitiveValue::getFloatValue() where appropriate.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::getIntValue):
        * css/Counter.h:
        (WebCore::Counter::listStyleNumber):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        * css/cssparser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength):
        (WebCore::applyCounterList):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundSize):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::cssPrimitiveToLength):
        (WebCore::KSVGPainterFactory::dashArrayFromRenderingStyle):

2007-07-01  Pamela Greene  <pamg.bugs@gmail.com>

        Reviewed by Darin.

        Fix for <http://bugs.webkit.org/show_bug.cgi?id=14320>
        Bug 14320: <canvas> gradient stops at identical offsets are applied in the wrong order
        <rdar://problem/5290084>

        Use std::stable_sort() instead of qsort() to sort gradient stops.
        Adjust the comparison function accordingly.

        * html/CanvasGradient.cpp:
        (WebCore::compareStops):
        (WebCore::CanvasGradient::findStop):

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

        Reviewed by Darin.

        m_usesPageCache was not initialized. As the b/f cache is only
        implemented in the Mac port and WebView.mm is taking care of calling
        Settings::setUsesPageCache I decided to make it false by default.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): m_usesPageCache was not initialized

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

        Reviewed by Darin.

        Inherited- and NonInheritedFlags is a bit field. But for comparsion
        the other part of the union _iflags/_niflags is used for comparions.
        This will compare 5 uninitialized bits of _iflags and 22 of _niflags.
        Make sure the unused bits have a specified value.

        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setBitDefaults): Make sure the unused bits
        have a value as well.

2007-06-30  Adam Roben  <aroben@apple.com>

        Compile WebCore with /W4 on Windows

        Some more warnings were disabled globally, including assignment within
        a conditional, unused variable, and various warnings related to
        inability to instantiate opaque structs.

        In addition, the "unreachable code" warning was turned off for
        CSSGrammar.cpp and XPathGrammar.cpp.

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-29  Adam Roben  <aroben@apple.com>

        Give CString an equality operator to fix a bug in HTMLFormElement::formData

        The bug was spotted by MSVC /W4. The problem was that we were comparing
        a CString to a char* using ==, but CString had no equality operator.
        The result was that the CString was being cast to a const char* and a
        pointer comparison was being done, which would (essentially) always
        return false.

        There are two parts to the fix: get rid of CString's const char*
        casting operator, and add an equality operator. Previous uses of the
        casting operator have been changed to use CString::data().

        Test: http/misc/isindex-formdata.html

        Reviewed by Oliver.

        * dom/XMLTokenizer.cpp:
        (WebCore::parseXMLDocumentFragment):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::determineParseMode):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForCSSCharset):
        * platform/CString.cpp:
        (WebCore::operator==):
        * platform/CString.h:
        * platform/KURL.cpp:
        (WebCore::encodeRelativeString):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toDouble):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::setHTTPBody):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCF_HTML):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::splitString):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::sendJavaScriptStream):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start):
        (WebCore::createUTF8String):
        (WebCore::PluginViewWin::userAgent):
        * xml/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::locateStylesheetSubResource):
        * xml/XSLTProcessor.cpp:
        (WebCore::xsltParamArrayFromParameterMap):

2007-06-29  Adam Roben  <aroben@apple.com>

        Initialize two variables that MSVC /W4 isn't smart enough to realize always get initialized

        Reviewed by John.

        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * html/HTMLParser.cpp:

2007-06-29  Adam Roben  <aroben@apple.com>

        Fix some possibly unitialized variables found by MSVC /W4

        Reviewed by John.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-06-29  Adam Roben  <aroben@apple.com>

        Remove bogus cast found by MSVC /W4

        Reviewed by John and Oliver.

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

2007-06-29  Adam Roben  <aroben@apple.com>

        Remove unused local functions uncovered by MSVC /W4

        Reviewed by John and Oliver.

        * platform/win/SearchPopupMenuWin.cpp:
        * rendering/RenderText.cpp:

2007-06-29  Adam Roben  <aroben@apple.com>

        Don't take the address of temporary values to appease MSVC /W4

        Reviewed by Oliver.

        No regression test possible.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::invalidateItem):
        (WebCore::PopupMenu::valueChanged):
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::invalidateRect):

2007-06-29  Adam Roben  <aroben@apple.com>

        Make an int -> UINT conversion explicit that MSVC /W4 complains about

        Reviewed by John and Oliver.

        No regression test possible.

        * platform/win/SoundWin.cpp:

2007-06-29  Adam Roben  <aroben@apple.com>

        Remove unreachable code uncovered by MSVC /W4

        Reviewed by Oliver.

        No regression test possible.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isLiveLink):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::contentEditable):
        * platform/DeprecatedString.cpp:
        (WebCore::allocateHandle):
        (WebCore::freeHandle):
        * plugins/win/npapi.cpp:
        (pluginViewForInstance):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isWidthSpecified):
        (WebCore::RenderImage::isHeightSpecified):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):

2007-06-29  John Sullivan  <sullivan@apple.com>

        Reviewed by Oliver Hunt.
        
        - WebCore support for accessing the set of rectangles that encompass the selected text
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::selectionTextRects):
        new function, fills in a passed Vector with the line box rects that represent the selected range

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):
        fixed off-by-one bug involving use of the confusing function InlineTextBox::end()

        * WebCore.exp:
        exported symbol for this new function

2007-06-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.
        
        <rdar://problem/5299513> REGRESSION: In Mail, a crash occurs when attempting to undo a newly created To Do
        
        Rolled out a change made in r23787.
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):

2007-06-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Anders Carlsson.
        
        Fixed <rdar://problem/5303567> REGRESSION: XMLHttpRequest.responseXML 
        returns NULL if response MIME type is not XML -- breaks Wikipedia widget
        
        The spec says that responseXML must return null for any HTTP response
        with a non-XML MIME type. Technically, that leaves non-HTTP responses
        free to do whatever they want.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Only return null for non-XML
        MIME types if the response was HTTP.

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

        Reviewed by Darin.

        Second pass at fixing implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Use new JSValue::toFloat() method instead of toNumber() where
          appropriate.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/kjs_events.cpp:
        (KJS::JSClipboardPrototypeFunction::callAsFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::executeScript):

2007-06-29  Adele Peterson  <adele@apple.com>

        Rolling out fix for <rdar://problem/5301322> since it broke layout tests.

        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.h:

2007-06-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/4962298> REGRESSION: Synchronous XHR for missing 
        local file throws exception -- breaks Wikipedia widget

        * WebCore.xcodeproj/project.pbxproj:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send): Don't throw exceptions for local files.

2007-06-29  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Fixed a previous fix to a signed/unsigned mismatch.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::splitString):

2007-06-29  Adele Peterson  <adele@apple.com>

        Reviewed by Ada and Kevin McCullough.

        Fix for <rdar://problem/5301322> REGRESSION: Select All selects the whole page when used in readonly textareas

        Implemented canSelectAll and selectAll for text fields and textareas, since they're special cases even when they're not editable.

        Tests:
        fast/forms/input-readonly-select-all.html
        fast/forms/textarea-readonly-select-all.html

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::canSelectAll):
        (WebCore::HTMLInputElement::selectAll):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::canSelectAll):
        (WebCore::HTMLTextAreaElement::selectAll):

2007-06-29  Adam Roben  <aroben@apple.com>

        Build fix

        This is what happens when you test your patch on two OSs and then
        commit from the wrong one.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::valueChanged):
        (WebCore::RenderTextControl::itemText):
        (WebCore::RenderTextControl::itemIsSeparator):

2007-06-29  Adam Roben  <aroben@apple.com>

        Start compiling WebCore with /W3 under MSVC

        One warning was globally disabled: implicit conversion of int to bool.

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-29  Adam Roben  <aroben@apple.com>

        Turn DeprecatedStringData's copy constructor into a static method to appease MSVC /W3

        DeprecatedStringData now has no public copy constructor. The single
        call to the old one has been replaced with a call to the new
        DeprecatedStringData::createAndAdopt static method.

        Reviewed by Darin.

        All regression tests pass.

        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedStringData::createAndAdopt):
        (WebCore::DeprecatedStringData::adopt):
        (WebCore::DeprecatedString::detachIfInternal):
        * platform/DeprecatedString.h:

2007-06-29  Adam Roben  <aroben@apple.com>

        Fix more signed/unsigned mismatches uncovered by MSVC /W3

        Reviewed by John.

        No regression tests possible.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::filenameHasSaneExtension):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::containsCharacters):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::parseVersionString):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::splitString):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::freeStringArray):
        (WebCore::PluginViewWin::invalidateTimerFired):

2007-06-29  Adam Roben  <aroben@apple.com>

        Change PopupMenuClient::listSize to return an int to appease warnings from MSVC /W3

        Reviewed by John.

        No regression test possible.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * platform/PopupMenuClient.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::focusFirst):
        (WebCore::PopupMenu::focusLast):
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::PopupMenu::paint):
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:

2007-06-29  Adam Roben  <aroben@apple.com>

        Fix two typos spotted by MSVC /W3

        Both typos were a semicolon following the condition of an if. This
        would cause the intended body of the if to always execute.

        Unfortunately neither of these fixes are testable.
        BackForwardList::goForward is only called from WebBackForwardList, and
        the createDragImageFromImage bug would only manifest itself when
        CreateCompatibleDC failed.

        Reviewed by Mark.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::goForward):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageFromImage):

2007-06-29  Adam Treat  <adam@staikos.net>

        Reviewed by george Staikos.

        Support horizontal and vertical scroll, and set the right units.

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-06-28  Adam Roben  <aroben@apple.com>

        Get WebCore compiling with /W2 on Windows

        Reviewed by Steve.

        No regression tests affected.

        * WebCore.vcproj/WebCore.vcproj: Turn the warning level up to 2, and
        disable two warnings: implicit int <=> float conversion, and class vs.
        struct inconsistency.
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::deleteData): Cast to int before negating.
        * loader/Cache.cpp:
        (WebCore::Cache::remove): Ditto.
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction): Consistently use floats.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar): Ditto.

2007-06-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/5299005> DOM timers fire without a local autorelease 
        pool => pathologically high high water mark
        
        I couldn't measure any performance problems with iBench HTML or PLT.

        * WebCore.xcodeproj/project.pbxproj: Changed .cpp file to be ObjC++.
        * platform/mac/SharedTimerMac.cpp:
        (WebCore::timerFired): Added autorelease pool.

2007-06-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14118
          ASSERTION FAILED: !needsLayout() seen again

        Test: fast/dynamic/recursive-layout.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Removed the midLayout guards around
        the calls to invalidateSelection() and updateWidgetPositions(). Those
        calls may dirty the layout, but in that case they also update it, so
        they should be allowed to do it. Added an ASSERT to make sure that when
        they return, the root is not marked for layout.

2007-06-28  Sam Weinig  <sam@webkit.org>

        Rubberstamped by Adam Roben.

        Roll out r23861.  It caused the buildbot to fail on intel.

        * page/Page.cpp:
        (WebCore::Page::goToItem):

2007-06-26  Maxime Britto  <mbritto@pleyo.com>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13038
        ASSERTION FAILED: item->target().isEmpty() || m_mainFrame->tree()->find(item->target()) == m_mainFrame

        Modification of an ASSERT on goToItem related to go back/forward in
        history.Don't need to check the frameset if the target is _blank.

         * page/Page.cpp:
         (WebCore::Page::goToItem):

2007-06-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5234139>
        <object> with PNG src rendered as image document.
        
        Complete the URL before passing it to the frame loader client.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isImageType):

2007-06-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14373
        CSS1: selectors (classes and IDs) cannot start with a dash or with a digit

        Make sure the id selector validates against the CSS2.1 identfier
        definition, not the hexcolor/HASH definition.

        * css/CSSGrammar.y:
        * css/cssparser.cpp:
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/tokenizer.flex:

2007-06-28  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Implemented PasteboardQt::writeSelection to copy the selected text into the Clipboard as well as PasteboardQt::plainText to retrieve plain text from the clipboard for pasting for example into form fields.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2007-06-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=14332
        Bug 14332: REGRESSION (r21145): <td> width ignored
        <rdar://problem/5290123>
        
        Cells in table with non-zero cellpadding are not considered empty.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):

2007-06-28  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5300455> Prefast: typo in RenderBlock::paintObject

        Reviewed by Hyatt.

        No layout test possible, as this bug didn't have any effect since
        "bool & bool" has the same value as "bool && bool"

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject): Changed & to &&.

2007-06-28  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5300443> word-break and -webkit-user-modify allow any value

        The bug was caused by two typos found by prefast.

        Reviewed by Hyatt.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): Fixed typos.

2007-06-20  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14251:
          onchange handler for select controls doesn't fire when changing via keyboard

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Got rid of
        a call to saveLastSelection in the "Enter" key handler for select
        controls that was preventing onchange from firing.

2007-06-27  Sam Weinig  <sam@webkit.org>

        Fix Gdk, Qt, and Win32 builds.

        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14319
        Move the Selection object out of the JS bindings

        - Renames JS Object Selection to DOMSelection to avoid a name
          conflict.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/DOMSelection.cpp: Added.
        (WebCore::DOMSelection::DOMSelection):
        (WebCore::DOMSelection::frame):
        (WebCore::DOMSelection::disconnectFrame):
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::baseNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::extentNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::extentOffset):
        (WebCore::DOMSelection::isCollapsed):
        (WebCore::DOMSelection::type):
        (WebCore::DOMSelection::rangeCount):
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::collapseToEnd):
        (WebCore::DOMSelection::collapseToStart):
        (WebCore::DOMSelection::empty):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::removeAllRanges):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::toString):
        * page/DOMSelection.h: Added.
        * page/DOMSelection.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::getSelection):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        2nd patch for http://bugs.webkit.org/show_bug.cgi?id=14111
        Autogenerate Event JS binding

        - Cleanup kjs_events

        * bindings/js/kjs_events.cpp:
        (WebCore::JSAbstractEventListener::JSAbstractEventListener):
        (WebCore::JSAbstractEventListener::handleEvent):
        (WebCore::JSAbstractEventListener::isHTMLEventListener):
        (WebCore::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (WebCore::JSUnprotectedEventListener::listenerObj):
        (WebCore::JSUnprotectedEventListener::windowObj):
        (WebCore::JSUnprotectedEventListener::clearWindowObj):
        (WebCore::JSUnprotectedEventListener::mark):
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::listenerObj):
        (WebCore::JSEventListener::windowObj):
        (WebCore::JSEventListener::clearWindowObj):
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::listenerObj):
        (WebCore::JSLazyEventListener::parseCode):
        (WebCore::getNodeEventListener):
        (WebCore::JSClipboard::JSClipboard):
        (WebCore::JSClipboard::getValueProperty):
        (WebCore::JSClipboard::putValueProperty):
        (WebCore::JSClipboardPrototypeFunction::callAsFunction):
        (WebCore::toJS):
        (WebCore::toClipboard):
        * bindings/js/kjs_events.h:
        (WebCore::JSClipboard::classInfo):
        (WebCore::JSClipboard::impl):
        * bindings/js/kjs_window.h:
        * ksvg2/events/JSSVGLazyEventListener.h:

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12045
        Crash under gmalloc at WTF::RefPtr<WebCore::HTMLSliderThumbElement>::operator->
        <rdar://problem/5286670>

        Test: fast/forms/thumbslider-no-parent-slider.html
        Test: fast/forms/thumbslider-crash.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSlider):
        * rendering/RenderSlider.h:
        (WebCore::RenderSlider::isSlider):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Only paint thumbslider
        if the parent renderer is a RenderSlider.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSliderThumb):

2007-06-27  George Staikos  <staikos@kde.org>

        Make Qt builds link when XSLT is turned off.

        * WebCore.pro:

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Turn on static code analysis (Windows only).

        Affects only folks that have Visual Studio Team Suite installed,
        or who have replaced their compiler with the version shipping in the
        Vista SDK.
        
        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-27  George Staikos  <staikos@kde.org>

        Remove old commented out files that no-longer exist.

        * WebCore.pro:

2007-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.

        <rdar://problem/5247341> REGRESSION: Pasting sometimes leaves out trailing newline
        
        Pasting with a trailing interchange newline doesn't work when pasting
        into an empty line.  Code that handles removing brs at the insertion
        position tries to also handle trailing interchange newlines by re-using
        those brs and fails.  Removed that code and handle all interchange
        newlines with code later in doApply().

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't try to re-use the
        endBR when there's a trailing interchange newline.
        
2007-06-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5253950>
        When Shockwave plugin has been loaded, exiting crashes Safari
        
        Add a "load count" for plugin packages. When the load count is zero, unload the plugin.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::PluginPackageWin):
        (WebCore::PluginPackageWin::load):
        (WebCore::PluginPackageWin::unload):
        (WebCore::PluginPackageWin::unloadWithoutShutdown):
        * plugins/win/PluginPackageWin.h:
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::~PluginViewWin):
        Make sure to unload the plugin package and clear any references to plugin script objects.

2007-06-27  George Staikos  <staikos@kde.org>

        This was succeeding compile by luck.  Setup dependencies properly.

        * WebCore.pro:

2007-06-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.

        <rdar://problem/4580583> Breaking blockquoted list should not automatically renumber the second list
        
        When a quoted numbered list is broken in half, it's cloned
        to make the second list. That second list needs its start attribute
        set so that the numbers of the list items in it will be preserved.

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Set the start attribute
        of a cloned list to be the original number of the first list item in it.

2007-06-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=14413
        GIF animation throttling is different from MSIE

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        Change the cut-off value to 50ms to match MSIE.

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        First pass at fixing implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add 'f' suffix where necessary.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:forParameter:]):
        * css/csshelper.h:
        * css/cssstyleselector.cpp:
        (WebCore::):
        (WebCore::CSSStyleSelector::largerFontSize):
        (WebCore::CSSStyleSelector::smallerFontSize):
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::createPattern):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/events/SVGZoomEvent.cpp:
        (WebCore::SVGZoomEvent::SVGZoomEvent):
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::setValue):
        (WebCore::SVGLength::valueAsPercentage):
        (WebCore::SVGLength::PercentageOfViewport):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::pixelUnitToMillimeterX):
        (WebCore::SVGSVGElement::pixelUnitToMillimeterY):
        (WebCore::SVGSVGElement::getScreenCTM):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getComputedTextLength):
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::getRotationOfChar):
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::distance):
        * page/InspectorController.cpp:
        (WebCore::InspectorResource::InspectorResource):
        * platform/graphics/FloatPoint3D.cpp:
        (WebCore::FloatPoint3D::normalize):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        (WebCore::Path::createRoundedRectangle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::setCurrentPage):
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp:
        (WebCore::SVGPaintServerRadialGradient::SVGPaintServerRadialGradient):
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        * platform/mac/FontDataMac.mm:
        (WebCore::webFallbackFontFamily):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setValueForPosition):
        (WebCore::RenderSlider::setPositionFromValue):

2007-06-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=14288
        XMLHttpRequest doesn't use a correct content type for file:// URLs

        Test: fast/dom/xmlhttprequest-html-response-encoding.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType): Use MIME type provided by
        the network layer, since it provides it even for non-HTTP responses.

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=14061
        Implement more of FrameLoaderClientGdk

        Make FrameLoaderClientGdk work properly when the MIME type is set.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=14058
        Gdk font backend cleanup

        * platform/FontData.h: Remove obsolete function.
        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::containsCharacters): Lock/unlock only once.
        (WebCore::FontData::platformWidthForGlyph): Remove needless cast.
        * platform/gdk/FontPlatformData.h: Remove obsolete function.
        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Pass the actual size,
        not the pixel size.
        (WebCore::FontPlatformData::~FontPlatformData): Free m_fontMatrix.
        * platform/gdk/GlyphPageTreeNodeGdk.cpp:
        (WebCore::GlyphPage::fill): Lock/unlock only once.

2007-06-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14406
          <colgroup>'s borders are ignored when it has <col> children

        Covered by existing tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder):
        (WebCore::RenderTableCell::collapsedRightBorder):
        (WebCore::RenderTableCell::collapsedTopBorder):
        (WebCore::RenderTableCell::collapsedBottomBorder):

2007-06-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14329
          REGRESSION: TEXTAREA - cannot drag-and-drop text at en.wikipedia.org/

        Test: fast/repaint/text-selection-rect-in-overflow-2.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeAbsoluteRepaintRect): Added code to account
        for overflow scroll and columns.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect): Adjust for columns only in the
        non-clipped case, since RenderObject::absolutePosition() does not.

2007-06-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam.

        - http://bugs.webkit.org/show_bug.cgi?id=14415
          Remove the unused method RenderObject::setTable()

        * rendering/RenderObject.h:

2007-06-26  Darin Fisher  <darin@chromium.org>

        Reviewed by Maciej.

        Implement http://bugs.webkit.org/show_bug.cgi?id=14225
        Bug 14225: Make it possible to define platform-specific ResourceRequest without #ifdefs

        This change moves the bulk of ResourceRequest into a base class named
        ResourceRequestBase with all platform-specific bits pushed into
        ResourceRequest.  This allows ports to easily add new members to a
        ResourceRequest without having to #ifdef the code that is shared
        between ports.

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceRequest.cpp: Removed.
        * platform/network/ResourceRequest.h: Removed.
        * platform/network/ResourceRequestBase.cpp: Added.
        (WebCore::ResourceRequestBase::asResourceRequest):
        (WebCore::ResourceRequestBase::isEmpty):
        (WebCore::ResourceRequestBase::isNull):
        (WebCore::ResourceRequestBase::url):
        (WebCore::ResourceRequestBase::setURL):
        (WebCore::ResourceRequestBase::cachePolicy):
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::timeoutInterval):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::mainDocumentURL):
        (WebCore::ResourceRequestBase::setMainDocumentURL):
        (WebCore::ResourceRequestBase::httpMethod):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::httpHeaderFields):
        (WebCore::ResourceRequestBase::httpHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::httpBody):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::allowHTTPCookies):
        (WebCore::ResourceRequestBase::setAllowHTTPCookies):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
        (WebCore::operator==):
        (WebCore::ResourceRequestBase::isConditional):
        (WebCore::ResourceRequestBase::updatePlatformRequest):
        (WebCore::ResourceRequestBase::updateResourceRequest):
        * platform/network/ResourceRequestBase.h: Added.
        (WebCore::):
        (WebCore::ResourceRequestBase::httpContentType):
        (WebCore::ResourceRequestBase::setHTTPContentType):
        (WebCore::ResourceRequestBase::httpReferrer):
        (WebCore::ResourceRequestBase::setHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::httpUserAgent):
        (WebCore::ResourceRequestBase::setHTTPUserAgent):
        (WebCore::ResourceRequestBase::httpAccept):
        (WebCore::ResourceRequestBase::setHTTPAccept):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        (WebCore::operator!=):
        * platform/network/cf/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/qt/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2007-06-26  Adam Roben  <aroben@apple.com>

        Add ChangeLog entries from the Windows merge.

        Reviewed by Maciej.

        * ChangeLog:

2007-06-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Make sure not to enumerate the toString() function.
        <rdar://problem/5297118>

        * bindings/js/kjs_window.cpp:
        * bindings/scripts/CodeGeneratorJS.pm: Add support for [DontEnum].
        * html/HTMLAnchorElement.idl:

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mitz, landed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=14421
        Implement GraphicsContext::clearRect()

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clearRect):

2007-06-26  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed and landed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=14416
        Content does not render fully in some cases

        Fix mismatched calls to cairo_save/restore due to an early method return.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):

2007-06-26  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by John Sullivan.

        Added two accessor functions for <rdar://problem/4119138>

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        Added an accessor to the isEdited value of a DOM node's render object

        * bindings/objc/DOMPrivate.h:
        Added header definitions for _isEdited

2007-06-26  Sam Weinig  <sam@webkit.org>

        Fix Win32 build.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-26  Sam Weinig  <sam@webkit.org>

        Fix Qt and Gdk builds.

        * WebCore.pro:

2007-06-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14111
        Autogenerate Event JS binding

        - Moves the dataTransfer method into MouseEvent where it should be.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp: Added.
        (WebCore::JSEvent::clipboardData):
        (WebCore::toJS):
        * bindings/js/JSEventTargetNode.cpp:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_events.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Event.h:
        (WebCore::Event::returnValue):
        (WebCore::Event::setReturnValue):
        (WebCore::Event::clipboardData):
        * dom/Event.idl:
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::dataTransfer):
        * dom/MouseEvent.idl:

2007-06-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Follow up fix for: Bug 14385: Web Inspector's computed style doesn't show implicitly set properties
        http://bugs.webkit.org/show_bug.cgi?id=14385

        Correctly remember the "Show implicit properties" setting as you switch nodes.

        * page/inspector/ResourcePanel.js:

2007-06-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.

        <rdar://problem/5290534> Crash at RenderTextControl::calcHeight() after deleting text in a search field
        
        Editing removed a node that was part of a search field's internal
        structure that should not be removed.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): If the
        selection to delete ends at [container, x], where x is the number
        of children in container, don't remove container.  Special case
        code elsewhere in this function will remove it if necessary.

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11315
        Mutating document.constructor.prototype mutates Object.prototype

        Test: fast/js/constructor.html

        * bindings/scripts/CodeGeneratorJS.pm: add constructor attribute to
        classes with constructors.  It is an non-enumeratable, non-deletable,
        readonly attribute.

2007-06-26  George Staikos  <staikos@kde.org>

        Repair the OS X build.

        * WebCore.exp:

2007-06-26  Adam Treat  <adam@staikos.net>

        Reviewed by Adam Roben.

        Make the SQLite icon database optional.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::isOpen):
        (WebCore::IconDatabase::isPrivateBrowsingEnabled):
        (WebCore::IconDatabase::enabled):
        * loader/icon/IconDatabase.h:

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14369
        HTML syntax highlighting colors and DOM tree colors should be the same

        * css/view-source.css:
        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:
        * page/inspector/utilities.js:

2007-06-25  Adam Roben  <aroben@apple.com>

        Fix Bug 14402: Main resource of http://www.apple.com/safari/ is called "www.apple.com" instead of "safari"
        http://bugs.webkit.org/show_bug.cgi?id=14402

        The solution was to make KURL::lastPathComponent ignore trailing
        slashes, which is what -[NSURL lastPathComponent] does, too.

        Reviewed by Oliver.

        * platform/KURL.cpp:
        (WebCore::KURL::lastPathComponent):

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14257
        Web Inspector lists favicon.ico as "other" instead of "image"

        * page/InspectorController.cpp:
        (WebCore::InspectorResource::type):

2007-06-25  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5286410> Scrollbar and resize corner for overflow area is not hidden with style "visibility: hidden;"
        http://bugs.webkit.org/show_bug.cgi?id=14297

        Test: fast/overflow/hidden-scrollbar-resize.html

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::paintLayer):
        Updated our shouldPaint check to consider visibility.

2007-06-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        <rdar://problem/5293444> REGRESSION: Dragging plain text into a styled text region does not acquire the correct style info

        Fixing logic error in DragController

        * manual-tests/drop-text-acquires-style.html: Added.
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):

2007-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Annotate prototypes by adding "Prototype" subtitle.

        * page/inspector/ResourcePanel.js:

2007-06-25  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Start to add proxy and SSL support to WebKitQt.  Proxying works.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):

2007-06-25  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=14386
        Gdk build fix

        * WebCore.pro: Fix gtk/gdk typo.

2007-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders.

        Bug 14385: Web Inspector's computed style doesn't show implicitly set properties
        http://bugs.webkit.org/show_bug.cgi?id=14385

        Add a toggle to show implict computed properties.

        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.css:
        * page/inspector/inspector.js:

2007-06-25  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mark.

        http://bugs.webkit.org/show_bug.cgi?id=13975
        Use system-provided libjpeg and libpng

        * WebCore.pro: Remove bundled libjpeg and libpng sources.
        * platform/image-decoders/jpeg: Remove sources.
        * platform/image-decoders/png: Remove sources.

2007-06-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14202
          Table caption renders too narrow sometimes

        Test: fast/table/caption-relayout.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Mark the caption for layout if the table
        width changed.

2007-06-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14245
          Underline painted under <br>, not repainted properly

        Test: fast/inline/br-text-decoration.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Added an early return if the line width
        is zero. Also changed the line stroke to a rect fill, so that lines with length shorter
        than their thickness paint correctly.

2007-06-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14341
          rules="none" ignored in certain cases

        Covered by existing tests.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::getSharedCellDecl):

2007-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14379
        Anchor elements show up as their href in the properties pane, not HTMLAnchorElement

        * page/inspector/ResourcePanel.js: make sure not to call an overriden
        toString() by using Object.prototype.toString.call().

2007-06-24  Adam Roben  <aroben@apple.com>

        Fix http://bugs.webkit.org/show_bug.cgi?id=14374
        Bug 14374: Computed Style section should be expanded by default

        Reviewed by Sam.

        No regression test possible.

        * page/inspector/ResourcePanel.js: Expand all style sections.

2007-06-24  Adam Roben  <aroben@apple.com>

        Unify the style of enums in the Inspector JS

        All our enums are now represented by an object with a property for
        each enum value.

        Reviewed by Sam.

        No regression test possible.

        * page/inspector/ConsolePanel.js:
        * page/inspector/Resource.js:
        * page/inspector/ResourcePanel.js:
        * page/inspector/inspector.js:

2007-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14321
        getComputedStyle(...).zIndex returns string "normal"

        Test: fast/css/getComputedStyle-zIndex-auto.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Return 'auto' instead of 'normal'.

2007-06-24  Matt Lilek  <pewtermoose@gmail.com>

        Reviewed by Tim Hatcher.

        Bug 14265: Cannot resize columns in webinspector
        http://bugs.webkit.org/show_bug.cgi?id=14265

        * page/inspector/inspector.css:
        * page/inspector/inspector.html:
        * page/inspector/inspector.js:

2007-06-23  Adam Roben  <aroben@apple.com>

        Silence a build warning about not finding `num-cpus`

        Reviewed by Mark Rowe.

        * WebCore.vcproj/build-generated-files.sh: Look for num-cpus in its new
        location.

2007-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didFinishLoading):
        No need to fetch the size from resourceData.

2007-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5288617>
        Crash playing a very large QuickTime movie inside Safari.

        Get rid of m_completeDeliveryData and use the loader's resource data instead. This reduces the memory usage for 
        plug-ins which loads large files and use a transfer mode of NP_ASFILE or NP_ASFILEONLY.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:

2007-06-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver and Darin.

        Fix for <rdar://problem/5266999> Loading page from MangleMe fuzz 
        tester crashes in RenderTableRow::addChild (giant ROWSPAN)

        We already have code that tries to prevent allocating too-large 
        rowspans. The rowspan in this test, however, was small enough that 
        we thought it was okay in that code, even though clearly it was 
        still too large. I did a bunch of testing in Firefox, and it seems 
        that they set a hard limit on the maximum rowspan right in the DOM 
        -- 8k. So that is what this patch implements. 

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseMappedAttribute):

2007-06-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5272440> Adding To Do via Note received in e-mail adds newlines on delete
        
        Deletion inserts a placeholder after it removes full paragraphs if
        one doesn't already exist.  The code that looked for a pre-existing
        placeholder didn't work because of a bug in enclosingNodeOfType.

        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeOfType): We start looking at node->parentNode(),
        but don't go above an editing root.

2007-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej and Geoff.

        <rdar://problem/5244734>
        WebKit shouldn't send delegate resource load methods for the user stylesheet (doing so causes assertions in Safari)
        
        Add a sendResourceLoadCallbacks argument to the ResourceLoader and only send resource load callbacks if it's true. Make it so that
        loading the user style sheet creates a resource loader with sendResourceLoadCallbacks set to false (done by adding a sendResourceLoadCallbacks 
        argument to a bunch of classes).
        
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::sendResourceLoadCallbacks):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/DocLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        * loader/Request.cpp:
        (WebCore::Request::Request):
        * loader/Request.h:
        (WebCore::Request::sendResourceLoadCallbacks):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::sendResourceLoadCallbacks):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        * loader/loader.h:
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):

2007-06-21  Richard Connamacher  <rich@indieimage.com>

        Reviewed by Tim Hatcher.

        Bug 14305: Web Inspector marks local files with server-side compression tip
        http://bugs.webkit.org/show_bug.cgi?id=14305

        * page/inspector/Resource.js:
        (WebInspector.Resource._shouldCompress): Prevent server-side compression tip
        from being given to local files

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

        Reviewed by Darin.

        Fix for <rdar://problem/5266928> REGRESSION: crash/assert failure beneath RenderFrameSet::layOutAxis when loading

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toLengthArray): Simplify whitespace before checking for an empty string.  This avoids returning
        a length of zero when the string is collapsed to empty by whitespace simplification.

2007-06-21  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5286978>, large font sizes crash Windows.
        
        Limit the maximum font size to 1,000,000 to avoid crashes and issues with platforms that
        start failing to do anything useful if the font size is too big.
        
        Reviewed by olliej

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        
2007-06-21  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Timothy.

        Stop shift+scroll wheel performing a horizontal scroll in Web Inspector

        * page/inspector/inspector.css: Set body margin to 0

2007-06-21  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Implement the default resources on Qt.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::getPixmap):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-06-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Use RetainPtr for holding currentEvent.  This removes explicit HardRetain/Release calls
        and makes reference handling simpler in advance of IME refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/EventHandlerMac.mm:
        (WebCore::currentEvent):
        (WebCore::EventHandler::currentNSEvent):
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::mouseMoved):

2007-06-21  George Staikos  <staikos@kde.org>

        Reviewed by George & Marius.

        Patch by me, revision by Marius, minor rev by me.  Adds rendered
        and stylable scrollbars.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/Widget.h:
        * platform/qt/PlatformScrollBar.h:
        (WebCore::PlatformScrollbar::isWidget):
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::isEnabled):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::thumbPosition):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::trackLength):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollbar::startTimerIfNeeded):
        (WebCore::PlatformScrollbar::stopTimerIfNeeded):
        (WebCore::PlatformScrollbar::autoscrollPressedPart):
        (WebCore::PlatformScrollbar::autoscrollTimerFired):
        (WebCore::PlatformScrollbar::pressedPartScrollDirection):
        (WebCore::PlatformScrollbar::pressedPartScrollGranularity):
        (WebCore::PlatformScrollbar::thumbUnderMouse):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        (WebCore::PlatformScrollbar::windowClipRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):
        (WebCore::Widget::setParent):
        (WebCore::Widget::parent):

2007-06-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Hyatt.
        
        Fixed <rdar://problem/4977124> | http://bugs.webkit.org/show_bug.cgi?id=12646
        REGRESSION: RapidWeaver's "Hello" HTML page doesn't display any DHTML 
        effects when clicking on its links (12646)
        
        I'm rolling our r7703 for these reasons:

        1. It broke RapidWeaver.
        
        2. WebKit is now orders of magnitude faster when handling deep nesting
        (5 seconds vs 3 minutes on my MBP in this particular case).

        3. Firefox, IE, and HTML5 all allow nested heading tags.
        
        4. Hyatt said so.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):

2007-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=14260
        ASSERTION FAILED: m_mainResource->loader == loader going back in history on any page

        Remove assert for now as it is causing the back button to not
        work in debug builds.

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

2007-06-21  Lars Knoll <lars@trolltech.com>

        Remove some debug output.

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::width):

2007-06-21  George Staikos  <staikos@kde.org>

        Repair Qt/Mac OS X build.

        * WebCore.pro:

2007-06-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=13905
        REGRESSION: A Chinese dictionary widget has a problem with XMLHttpRequest response encoding

        Tiger WebKit accidentally looked at HTML Http-Equiv META to determine the response encoding
        (regardless of the actual response MIME type). This was corrected a while ago to match other 
        browsers and the draft XHR spec.

        Now restoring this functionality for "text/html", with spec editor's blessing.

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType):
        (WebCore::XMLHttpRequest::responseIsXML):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/xmlhttprequest.h:

2007-06-21  Andrew Wellington  <proton@wiretapped.net>

        Mac build fix.

        * platform/Font.h:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        another small fix for letter spacing

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix word-spacing

        * platform/qt/FontQt.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::width):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix letterspacing and small caps.

        * platform/Font.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformFont):
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/FontQt.cpp:
        (WebCore::TextRunComponent::TextRunComponent):
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::update):
        (WebCore::generateComponents):
        (WebCore::Font::selectionRectForText):
        * platform/qt/RenderThemeQt.cpp:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        store the metrics and space width in the Font object

        * platform/Font.h:
        * platform/qt/FontQt.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        simplify some codepaths

        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix copyright header

        * platform/qt/FontQt.cpp:

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        correctly load fonts when a list of font families is given

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

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix some more of the font support

        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Compile fixes

        * platform/Font.h:
        (WebCore::Font::isRoundingHackCharacter):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawText):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Some more work on the implementation of FontQt.

        * platform/qt/FontQt.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::~Font):
        (WebCore::Font::operator=):

2007-06-21  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Started work on the new font infrastructure for the Qt port.

        * WebCore.pro:
        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection):
        * platform/Font.h:
        (WebCore::Font::treatAsSpace):
        (WebCore::Font::treatAsZeroWidthSpace):
        (WebCore::Font::isRoundingHackCharacter):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::operator QFont):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-06-21  Adam Roben  <aroben@apple.com>

        More Gdk build fixes.

        * page/gdk/ContextMenuClientGdk.cpp:
        (WebCore::ContextMenuClientGdk::shouldIncludeInspectElementItem):
        * page/gdk/ContextMenuClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-06-21  Adam Roben  <aroben@apple.com>

        Speculative Gdk build fix.

        * page/InspectorController.h: Only include the JS headers we really
        need to avoid pulling in ones like JSStringRefCF.h.

2007-06-20  Adam Roben  <aroben@apple.com>

        Speculative Gdk build fix.

        * WebCore.pro: Don't try to build WebKitQt/Plugins on Gdk.

2007-06-20  Adam Roben  <aroben@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Include ForwardingHeaders after
        everything but $WebKitLibrariesDir so that we will pick up
        JavaScriptCore headers directly.

2007-06-15  George Staikos  <staikos@kde.org>

        Add missing symbol.

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::contextMenuItemTagInspectElement):

2007-06-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej, Anders.
        
        <rdar://problem/5283789> Crash after dismissing JavaScript alert at end of test on http://lcamtuf.coredump.cx/ierace/

        Keep a reference to the Page (via the main frame) for the
        load deferred pages.
        
        Reference is held via the frame since Page isn't refcounted.

        * page/Chrome.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2007-06-15  Adam Treat <adam@staikos.net>

        Reviewed by George Staikos.

        Add ICO support to the Qt build.

        * WebCore.pro:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (Q_IMPORT_PLUGIN):

2007-06-15  George Staikos  <staikos@kde.org>

        Fixing Qt build.

        * ForwardingHeaders/JavaScriptCore/APICast.h: Added.
        * WebCore.pro:
        * page/InspectorController.h:

2007-06-20  Adam Roben  <aroben@apple.com>

        More speculative Qt/Gdk build fixes.

        * WebCore.pro: Add new files.

2007-06-20  Adam Roben  <aroben@apple.com>

        Speculative Qt/Gdk build fix.

        Added forwarding headers for JavaScriptCore. We may eventually move
        InspectorController off of the JSC API, but for now this is the
        quickest way to a working build.

        * ForwardingHeaders/JavaScriptCore/JSBase.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Added.

2007-06-20  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        Add licenses.

        * page/inspector/ConsolePanel.js:
        * page/inspector/NetworkPanel.js:
        * page/inspector/Resource.js:
        * page/inspector/ResourceCategory.js:
        * page/inspector/ResourcePanel.js:

2007-06-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam.

        * WebCore.exp: Export InspectorController::inspect so WebKit can see it.

2007-06-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele Peterson, Oliver Hunt, Anders Carlsson.

        Fixed <rdar://problem/5222911> Leopard9A446 : VitalSource Bookshelf 4.5: 
        Crashes when you click on sign in (stringByEvaluatingJavaScriptFromString 
        returning nil instead of "")

        I'm basically rolling out the change for <rdar://problem/4782422> because
        my testing shows that it was backwards.
        
        * html/HTMLElement.cpp:
        (dumpInnerHTML): New debug-only function to work around gdb being 
        perpetually suck-tastic.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        
        Return "", not nil. This function never used to return nil, so let's not
        start now. I've filed <rdar://problem/5283271> to cover the documentation bug,

2007-06-20  Adam Roben  <aroben@apple.com>

        Addressed some of Geoff's comments.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Added a
        FIXME.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::addInspectElementItem): Null-check
        frame->page().

2007-06-20  Adam Roben  <aroben@apple.com>

        Fix crash in fast/dom/dir-no-body.html

        Reviewed by Mark.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer): Don't assume we have a
        Frame, since we won't if someone creates an HTMLDocument from JS.

2007-06-20  Adam Roben  <aroben@apple.com>

        Land the new Inspector.

        Co-written with Tim Hatcher.

        Reviewed by Anders, Adele, Hyatt, and Sam.

        No regression tests possible.

        Add a new InspectorController that is in charge of the Inspector. It
        has an InspectorClient that controls the Inspector's window and node
        highlight.

        * page/InspectorClient.h: Added.
        (WebCore::InspectorClient::~InspectorClient):
        * page/InspectorController.cpp: Added.
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::InspectorResource::): Represents a single resource that the
        Inspector knows about.
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::~InspectorResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::setScriptObject):
        (WebCore::addSourceToFrame): Callback available from JS.
        (WebCore::getResourceDocumentNode): Ditto.
        (WebCore::highlightDOMNode): Ditto.
        (WebCore::hideDOMNodeHighlight): Ditto.
        (WebCore::loaded): Ditto.
        (WebCore::unloading): Ditto.
        (WebCore::attach): Ditto.
        (WebCore::detach): Ditto.
        (WebCore::log): Ditto.
        (WebCore::search): Ditto.
        (WebCore::inspectedWindow): Ditto.
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspect): Called by
        ContextMenuController to inspect a node.
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::highlight):
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::windowVisible):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::attachWindow):
        (WebCore::InspectorController::detachWindow):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::windowUnloading):
        (WebCore::addHeaders): Static helper function.
        (WebCore::objectForRequest): Ditto.
        (WebCore::objectForResponse): Ditto.
        (WebCore::InspectorController::addScriptResource):
        (WebCore::InspectorController::addAndUpdateScriptResource):
        (WebCore::InspectorController::removeScriptResource):
        (WebCore::InspectorController::updateScriptResource):
        (WebCore::InspectorController::populateScriptResources):
        (WebCore::InspectorController::addScriptConsoleMessage):
        (WebCore::callClearFunction): Static helper function.
        (WebCore::InspectorController::clearScriptResources):
        (WebCore::InspectorController::clearScriptConsoleMessages):
        (WebCore::InspectorController::clearNetworkTimeline):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad): Callback from
        FrameLoader.
        (WebCore::InspectorController::frameDetachedFromParent): Ditto.
        (WebCore::InspectorController::addResource): Ditto.
        (WebCore::InspectorController::removeResource): Ditto.
        (WebCore::InspectorController::didLoadResourceFromMemoryCache): Ditto.
        (WebCore::InspectorController::identifierForInitialRequest): Ditto.
        (WebCore::InspectorController::willSendRequest): Ditto.
        (WebCore::InspectorController::didReceiveResponse): Ditto.
        (WebCore::InspectorController::didReceiveContentLength): Ditto.
        (WebCore::InspectorController::didFinishLoading): Ditto.
        (WebCore::InspectorController::didFailLoading): Ditto.
        * page/InspectorController.h: Added.
        (WebCore::InspectorController::inspectedPage):
        (WebCore::InspectorController::scriptContext):
        (WebCore::InspectorController::setScriptContext):
        (WebCore::InspectorController::resources):
        (WebCore::InspectorController::removeAllResources):

        Add the JavaScript that defines most of the behavior of the Inspector.
        
        * page/inspector/ConsolePanel.js: Added.
        * page/inspector/NetworkPanel.js: Added.
        * page/inspector/Resource.js: Added.
        * page/inspector/ResourceCategory.js: Added.
        * page/inspector/ResourcePanel.js: Added.
        * page/inspector/inspector.js: Added.
        * page/inspector/treeoutline.js: Renamed from WebKit/WebInspector/webInspector/treeoutline.js.
        * page/inspector/utilities.js: Added.

        Add the Inspector's CSS and HTML.

        * page/inspector/inspector.css: Added.
        * page/inspector/inspector.html: Added.

        Hang the InspectorController off of Page. We only create an
        InspectorController if an InspectorClient is given to the Page.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::inspectorController):

        Use FrameLoader to notify the InspectorController of resource loads.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::assignIdentifierToInitialRequest):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest):
        (WebCore::FrameLoader::dispatchWillSendRequest):
        (WebCore::FrameLoader::dispatchDidReceiveResponse):
        (WebCore::FrameLoader::dispatchDidReceiveContentLength):
        (WebCore::FrameLoader::dispatchDidFinishLoading):
        (WebCore::FrameLoader::dispatchDidLoadResourceFromMemoryCache):
        * loader/FrameLoader.h:

        Send console messages to the InspectorController.

        * page/Chrome.cpp:
        (WebCore::Chrome::addMessageToConsole): Send all console messages to
        the InspectorController.
        * page/Chrome.h: Add a new MessageLevel and MessageSource that are
        used in the Inspector JS.

        Report HTML errors when the Inspector window is open.
        We don't report errors when the window is closed because we don't want
        to slow down the HTMLTokenizer.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        * html/HTMLParser.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        * html/HTMLTokenizer.h:

        Append the "Inspect Element" context menu item after passing the
        context menu to the ContextMenuClient. This work used to be done in
        WebKit.

        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Add the
        "Inspect Element" item.
        (WebCore::ContextMenuController::contextMenuItemSelected): Handle the
        "Inspect Element" item.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::addInspectElementItem):
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Updated for "Inspect
        Element" item.
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::): Add ContextMenuItemTagInspectElement.
        * platform/graphics/svg/SVGImageEmptyClients.h:
        * page/mac/WebCoreViewFactory.h: Add the "Inspect Element" localized
        string.
        * platform/LocalizedStrings.h: Ditto.
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::contextMenuItemTagInspectElement): Ditto.

        Miscellaneous changes:

        * css/view-source.css: Add message bubble styles.
        * loader/DocumentLoader.h: Add a frame getter.
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars): Respect
        Frame::prohibitsScrolling.

        Add new images needed for the Inspector.

        * page/inspector/Images/attachedShadow.png: Added.
        * page/inspector/Images/bottomShadow.png: Added.
        * page/inspector/Images/breadcrumbBackground.png: Added.
        * page/inspector/Images/checker.png: Added.
        * page/inspector/Images/console.png: Added.
        * page/inspector/Images/darkShadow.png: Added.
        * page/inspector/Images/disclosureDownPressed.png: Added.
        * page/inspector/Images/disclosureRightDown.png: Added.
        * page/inspector/Images/disclosureRightPressed.png: Added.
        * page/inspector/Images/document.png: Added.
        * page/inspector/Images/domViewButton.png: Added.
        * page/inspector/Images/domViewButtonSelected.png: Added.
        * page/inspector/Images/downTriangle.png: Added.
        * page/inspector/Images/errorIcon.png: Added.
        * page/inspector/Images/errorMediumIcon.png: Added.
        * page/inspector/Images/folder.png: Added.
        * page/inspector/Images/goArrow.png: Added.
        * page/inspector/Images/gradient.png: Added.
        * page/inspector/Images/gradientHighlight.png: Added.
        * page/inspector/Images/gradientHighlightBottom.png: Added.
        * page/inspector/Images/hideStatusWidget.png: Added.
        * page/inspector/Images/hideStatusWidgetPressed.png: Added.
        * page/inspector/Images/network.png: Added.
        * page/inspector/Images/paneBottomGrow.png: Added.
        * page/inspector/Images/paneBottomGrowActive.png: Added.
        * page/inspector/Images/paneGrowHandleLine.png: Added.
        * page/inspector/Images/paneHeader.png: Added.
        * page/inspector/Images/paneHeaderActive.png: Added.
        * page/inspector/Images/plainDocument.png: Added.
        * page/inspector/Images/popupArrows.png: Added.
        * page/inspector/Images/rightTriangle.png: Added.
        * page/inspector/Images/segment.png: Added.
        * page/inspector/Images/segmentEnd.png: Added.
        * page/inspector/Images/segmentHover.png: Added.
        * page/inspector/Images/segmentHoverEnd.png: Added.
        * page/inspector/Images/segmentSelected.png: Added.
        * page/inspector/Images/segmentSelectedEnd.png: Added.
        * page/inspector/Images/showStatusWidget.png: Added.
        * page/inspector/Images/showStatusWidgetPressed.png: Added.
        * page/inspector/Images/sidbarItemBackground.png: Added.
        * page/inspector/Images/sidebarActionWidget.png: Added.
        * page/inspector/Images/sidebarActionWidgetPressed.png: Added.
        * page/inspector/Images/sidebarAttachWidget.png: Added.
        * page/inspector/Images/sidebarAttachWidgetPressed.png: Added.
        * page/inspector/Images/sidebarDetachWidget.png: Added.
        * page/inspector/Images/sidebarDetachWidgetPressed.png: Added.
        * page/inspector/Images/sidebarResizeWidget.png: Added.
        * page/inspector/Images/sidebarSelection.png: Added.
        * page/inspector/Images/sidebarSelectionBlurred.png: Added.
        * page/inspector/Images/sidebarSelectionBlurredTall.png: Added.
        * page/inspector/Images/sidebarSelectionGray.png: Added.
        * page/inspector/Images/sidebarSelectionGrayTall.png: Added.
        * page/inspector/Images/sidebarSelectionTall.png: Added.
        * page/inspector/Images/sidebarStatusAreaBackground.png: Added.
        * page/inspector/Images/sourceViewButton.png: Added.
        * page/inspector/Images/sourceViewButtonSelected.png: Added.
        * page/inspector/Images/splitviewDimple.png: Added.
        * page/inspector/Images/splitviewDividerBackground.png: Added.
        * page/inspector/Images/tab.png: Added.
        * page/inspector/Images/tabSelected.png: Added.
        * page/inspector/Images/timelinePillBlue.png: Added.
        * page/inspector/Images/timelinePillGray.png: Added.
        * page/inspector/Images/timelinePillGreen.png: Added.
        * page/inspector/Images/timelinePillOrange.png: Added.
        * page/inspector/Images/timelinePillPurple.png: Added.
        * page/inspector/Images/timelinePillRed.png: Added.
        * page/inspector/Images/timelinePillYellow.png: Added.
        * page/inspector/Images/tipBalloon.png: Added.
        * page/inspector/Images/tipBalloonBottom.png: Added.
        * page/inspector/Images/tipIcon.png: Added.
        * page/inspector/Images/tipIconPressed.png: Added.
        * page/inspector/Images/toggleDown.png: Added.
        * page/inspector/Images/toggleUp.png: Added.
        * page/inspector/Images/toolbarBackground.png: Added.
        * page/inspector/Images/toolbarBackgroundInactive.png: Added.
        * page/inspector/Images/toolbarButton.png: Added.
        * page/inspector/Images/toolbarButtonInactive.png: Added.
        * page/inspector/Images/toolbarButtonPressed.png: Added.
        * page/inspector/Images/toolbarButtonPressedInactive.png: Added.
        * page/inspector/Images/toolbarSplitButtonDivider.png: Added.
        * page/inspector/Images/toolbarSplitButtonDividerInactive.png: Added.
        * page/inspector/Images/treeDownTriangleBlack.png: Added.
        * page/inspector/Images/treeDownTriangleWhite.png: Added.
        * page/inspector/Images/treeLeftTriangleBlack.png: Added.
        * page/inspector/Images/treeRightTriangleBlack.png: Added.
        * page/inspector/Images/treeRightTriangleWhite.png: Added.
        * page/inspector/Images/warningIcon.png: Added.
        * page/inspector/Images/warningMediumIcon.png: Added.
        * page/inspector/Images/warningsErrors.png: Added.

        Build-fu:

        * WebCore.exp: Added new symbols.
        * WebCore.xcodeproj/project.pbxproj: Added new source files and
        resources.
        * WebCore.vcproj/WebCore.vcproj: Ditto, and copy the resources to
        $WebKitOutputDir.

        Windows build fixes:

        * history/HistoryItem.h: ResourceRequest is a struct.
        * loader/FrameLoaderClient.h: Ditto.

2007-06-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14056
          REGRESSION (r21113-21143): TR background not repainted via style class change

        Test: fast/repaint/table-row.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout): Added a repaint to make up for the case where the
        table row also needs layout, so it doesn't get a repaint in setStyle().

2007-06-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14040
          Top and bottom border images flipped when using -webkit-border-image when border end up tiled

        Test: fast/borders/border-image-01.html

        Correctly account for the fact that "pattern space" is flipped.

        * platform/graphics/Image.cpp: (WebCore::Image::drawTiled):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPatternCallback):
        (WebCore::Image::drawPattern):

2007-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5245555> REGRESSION: HTTP header injection in XMLHttpRequest.setRequestHeader
        
        Check for either '\r' or '\n' in the header value.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::isValidHeaderValue):

2007-06-20  Patti Hoa  <patti@apple.com>

        Reviewed by Geoffrey Garen.

        <rdar://problem/4882527> VO should speak URL of image links that lack tags
        Add additional change from review
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Check if the element has imgTag before asking for its url
        
2007-06-20  Patti Hoa  <patti@apple.com>

        Reviewed by Tristan O'Tierney.

        <rdar://problem/4882527> VO should speak URL of image links that lack tags
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeNames]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Return the url of images.

2007-06-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/5266289> REGRESSION (Safari 3 Beta 1): Incoming iChat messages are delayed
        
        Add a new m_deferMainResourceDataLoad that can be used to control whether a data load should be deferred using a timer or not.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::deferMainResourceDataLoad):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadSoon):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::setDefersLoading):

2007-06-19  Patti Hoa <patti@apple.com>

        Reviewed by Justin Garcia.
        
        <rdar://problem/5237325> Incorrect AXLeftLineTextMarkerRangeForTextMarker/AXPreviousLineStartTextMarkerForTextMarker for non-editable text
        
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::startOfLine):
        (WebCore::endPositionForLine):
        (WebCore::endOfLine):
        Break down the line routines to allow another try to ask for start/end of line if the returned position is not valid.
        An example would be when lineStart/lineEnd at different line than the input position.
        This can happen if the input position is before the space character at the end of a soft-wrapped non-editable line, 
        specifically a line without webkit-line-break:after-white-space style.

2007-06-19  Patti Hoa  <patti@apple.com>

        Reviewed by Justin Garcia.
        
        <rdar://problem/3992645> VO view bounds misplaced when reading text after a line wrap
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXBoundsForTextMarkerRange:]):
        Improve the accuracy of the bounds for a given range
        
2007-06-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5130630>
        XPath fails LayoutTests on Windows
        
        * xml/XPathPredicate.cpp:
        Include MathExtras.h here so we get a version of fmod that works around a bug in the Microsoft CRT.
        
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNumber):
        Instead of using NAN, which isn't really the NaN value on Windows, use numeric_limits.
        
2007-06-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed cross-frame access. <rdar://problem/5251309>. 

        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2007-06-19  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * platform/win/PopupMenuWin.cpp:

2007-06-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Implement these methods correctly.

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-06-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14226
        Move the History object out of the JS bindings

        - Autogenerate JSHistory.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bridge/GlobalHistory.h: Copied from WebCore/bridge/History.h.
        * bridge/History.h: Removed.
        * bridge/mac/GlobalHistoryMac.mm: Copied from WebCore/bridge/mac/HistoryMac.mm.
        * bridge/mac/HistoryMac.mm: Removed.
        * bridge/win/GlobalHistoryWin.cpp: Copied from WebCore/bridge/win/HistoryWin.cpp.
        * bridge/win/HistoryWin.cpp: Removed.
        * css/cssstyleselector.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::history):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/History.cpp: Added.
        (WebCore::History::History):
        (WebCore::History::frame):
        (WebCore::History::disconnectFrame):
        (WebCore::History::length):
        (WebCore::History::back):
        (WebCore::History::forward):
        (WebCore::History::go):
        * page/History.h: Added.
        * page/History.idl: Added.
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2007-06-18  Sam Weinig  <sam@webkit.org>

        Qt build fix.

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth.

        Fix build and update licenses. 

        * WebCore.xcodeproj/project.pbxproj:
        * page/BarInfo.cpp:
        * page/BarInfo.h:
        * page/BarInfo.idl:
        * page/Screen.cpp:
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        (WebCore::Screen::colorDepth):
        (WebCore::Screen::pixelDepth):
        (WebCore::Screen::availLeft):
        (WebCore::Screen::availTop):
        (WebCore::Screen::availHeight):
        (WebCore::Screen::availWidth):
        * page/Screen.h:
        * page/Screen.idl:

2007-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/5277008> Assertion in [LocationChangeHandler finishedLoadingFrame:]
        
        Don't send any frame load callbacks if the document load hasn't been
        committed for real.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14193
        Move the Screen object out of the JS bindings

        - Renames Screen.h to PlatformScreen.h to accommodate new class.
        - Autogenerates JSScreen.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * css/MediaQueryEvaluator.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::frame):
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::screen):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Screen.cpp: Added.
        (WebCore::Screen::Screen):
        (WebCore::Screen::disconnectFrame):
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        (WebCore::Screen::colorDepth):
        (WebCore::Screen::pixelDepth):
        (WebCore::Screen::availLeft):
        (WebCore::Screen::availTop):
        (WebCore::Screen::availHeight):
        (WebCore::Screen::availWidth):
        * page/Screen.h: Added.
        * page/Screen.idl: Added.
        * page/mac/WebCoreFrameBridge.mm:
        * platform/PlatformScreen.h: Copied from WebCore/platform/Screen.h.
        * platform/Screen.h: Removed.
        * platform/gdk/PlatformScreenGdk.cpp: Copied from WebCore/platform/gdk/ScreenGdk.cpp.
        * platform/gdk/ScreenGdk.cpp: Removed.
        * platform/mac/PlatformMouseEventMac.mm:
        * platform/mac/PlatformScreenMac.mm: Copied from WebCore/platform/mac/ScreenMac.mm.
        * platform/mac/ScreenMac.mm: Removed.
        * platform/qt/PlatformScreenQt.cpp: Added.
        (WebCore::WebCore::screenDepth):
        (WebCore::WebCore::screenDepthPerComponent):
        (WebCore::WebCore::screenIsMonochrome):
        (WebCore::WebCore::screenRect):
        (WebCore::WebCore::screenAvailableRect):
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/win/PlatformScreenWin.cpp: Copied from WebCore/platform/win/ScreenWin.cpp.
        * platform/win/ScreenWin.cpp: Removed.
        * rendering/RenderObject.cpp:

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14211
        Move the BarInfo object out of the JS bindings

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * page/BarInfo.cpp: Added.
        (WebCore::BarInfo::BarInfo):
        (WebCore::BarInfo::disconnectFrame):
        (WebCore::BarInfo::visible):
        * page/BarInfo.h: Added.
        (WebCore::BarInfo::):
        * page/BarInfo.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::locationbar):
        (WebCore::DOMWindow::menubar):
        (WebCore::DOMWindow::personalbar):
        (WebCore::DOMWindow::scrollbars):
        (WebCore::DOMWindow::statusbar):
        (WebCore::DOMWindow::toolbar):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2007-06-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Remove the FrameArray class and instead make window.frames another
        self-reference for window (like window.window, window.self, etc).
        This is what Firefox and what the HTML5 dictates.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::disconnectFrame):
        * bindings/js/kjs_window.h:

2007-06-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13413
          Failed assertion in RenderTextControl::setSelectionRange in Google Spreadsheets

        Test: fast/forms/input-zero-height-focus.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange): Avoid setting the
        selection in a zero-height text control.

2007-06-18  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=14052
        Implement SoundGdk

        * WebCore.pro:
        * platform/gdk/SoundGdk.cpp: Added.
        (WebCore::systemBeep):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::systemBeep):

2007-06-18  Dave Hyatt  <hyatt@apple.com>

        Add support for horizontal mouse wheeling on Windows.
        
        Reviewed by aroben

        * platform/PlatformWheelEvent.h:
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-06-17  Sam Weinig  <sam@webkit.org>

        Win32 build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-15  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bugs 14183 and 14184, 'repeat' regressed in border-image
        because of a botched 'round' support removal.  Also update for a change in
        the spec that has the second stretch/round/repeat keyword match the first
        if omitted.
        
        Reviewed by olliej

        * css/cssparser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::):

2007-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14053
        Autogenerate JS binding for Rect

        - Renames RectImpl to Rect, DOMStyleSheetList to JSStyleSheetList 
          and DOMRGBColor to JSRGBColor
        - Moves JSStyleSheetList and JSRGBColor into the WebCore namespace.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        (WebCore::):
        (WebCore::JSStyleSheetList::JSStyleSheetList):
        (WebCore::JSStyleSheetList::~JSStyleSheetList):
        (WebCore::JSStyleSheetList::getValueProperty):
        (WebCore::JSStyleSheetList::indexGetter):
        (WebCore::JSStyleSheetList::nameGetter):
        (WebCore::JSStyleSheetList::getOwnPropertySlot):
        (WebCore::toJS):
        (WebCore::JSStyleSheetListFunc::callAsFunction):
        (WebCore::JSRGBColor::JSRGBColor):
        (WebCore::JSRGBColor::~JSRGBColor):
        (WebCore::JSRGBColor::getOwnPropertySlot):
        (WebCore::JSRGBColor::getValueProperty):
        (WebCore::getJSRGBColor):
        * bindings/js/kjs_css.h:
        (WebCore::JSStyleSheetList::classInfo):
        (WebCore::JSStyleSheetList::):
        (WebCore::JSStyleSheetList::impl):
        (WebCore::JSRGBColor::classInfo):
        (WebCore::JSRGBColor::):
        (WebCore::JSRGBColor::impl):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        * css/CSSBorderImageValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::):
        * css/DashboardRegion.h:
        * css/Rect.h: Copied from css/RectImpl.h.
        (WebCore::Rect::~Rect):
        (WebCore::Rect::top):
        (WebCore::Rect::right):
        (WebCore::Rect::bottom):
        (WebCore::Rect::left):
        (WebCore::Rect::setTop):
        (WebCore::Rect::setRight):
        (WebCore::Rect::setBottom):
        (WebCore::Rect::setLeft):
        * css/Rect.idl:
        * css/RectImpl.h: Removed.
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseShape):
        (WebCore::BorderImageParseContext::commitBorderImage):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/DOMWindow.idl:

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement missing tab support and a slight refactor.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-06-14  Dave Hyatt  <hyatt@apple.com>

        Fix for Bugzilla bug 14806, missing text for bold/italic fonts in non-English Windows installs.
        
        This patch adds an additional step after the lookup by full name fails.  It will then look up
        a PostScript name in a (localized full name) -> (PostScript name) cache.  If the name is not
        found, then the font's name table is obtained and searched for a PostScript name (and the
        result is cached).
        
        If lookup on PostScript name fails too, then we now properly fall back to the next font in the
        list (so text should never be missing).

        Reviewed by Darin (thoroughly reviewed, super reviewed even)

        * platform/win/FontCacheWin.cpp:
        * platform/win/FontPlatformDataWin.cpp:

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Add Frame::cleanupScriptObjectsForPlugin which will invalidate the root object
        for a given plug-in.

        * WebCore.exp:
        * page/Frame.cpp:
        (WebCore::Frame::cleanupScriptObjectsForPlugin):
        * page/Frame.h:

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5211677>
        -[WebPreferences setJavaEnabled:] only disables java inside <applet>, not <object>
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        If the object is a Java MIME type and Java is disabled, don't load the plug-in.
        
        * platform/MimeTypeRegistry.cpp:
        (WebCore::MimeTypeRegistry::isJavaAppletMIMEType):
        Clean this up and add another applet MIME type.

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement the file chooser for Qt.

        * platform/qt/FileChooserQt.cpp:
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Add missing initialization of pointer.

        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5244948>
        Safari keeps on complaining about slow script playing NBC TV video (14133)

        http://bugs.webkit.org/show_bug.cgi?id=14133
        Runaway JavaScript timer fires when spinning around in Google Maps street view

        Make sure to start and stop the timeout checker around calls to JS.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Keypress causes typeahead crash on empty selects due to modulo 0.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind):

2007-06-13  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Compile without self-linking.

        * WebCore.pro:

2007-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix <rdar://problem/5264923> Safari frequently "stalls" beneath
          +[NSFont fontWithName:size:] while loading a web page (searching on disk for the font)

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:size:]): Renamed from fontWithFamily.
        Took out the auto-activation code.
        (+[WebFontCache fontWithFamily:traits:size:]): Added. Calls internalFontWithFamily,
        then calls NSFont to trigger activation if that returned nil, then calls
        internalFontWithFamily again.

2007-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Pass the root object to methods that end up creating new ObjcInstance objects.
        
        * bindings/objc/WebScriptObject.mm:
        (listFromNSArray):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):

2007-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5267992>
        Make sure an alert doesn't allow loading to continue inside a script.
        
        Make sure to defer all loads where it's possible for a second main loop to be running.
        
        * page/Chrome.cpp:
        (WebCore::Chrome::runModal):
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        Implement this.

2007-06-13  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Rob.

        http://bugs.webkit.org/show_bug.cgi?id=14060
        Cairo SVG support

        * WebCore.pro: Add new files to the build.
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/cairo: Added.
        * platform/graphics/svg/cairo/RenderPathCairo.cpp: Added.
        (WebCore::RenderPath::strokeContains):
        (WebCore::RenderPath::strokeBBox):
        * platform/graphics/svg/cairo/SVGPaintServerCairo.cpp: Added.
        (WebCore::SVGPaintServer::draw):
        (WebCore::SVGPaintServer::teardown):
        (WebCore::SVGPaintServer::renderPath):
        * platform/graphics/svg/cairo/SVGPaintServerGradientCairo.cpp: Added.
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/cairo/SVGPaintServerPatternCairo.cpp: Added.
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/cairo/SVGPaintServerSolidCairo.cpp: Added.
        (WebCore::SVGPaintServerSolid::setup):
        * platform/graphics/svg/cairo/SVGResourceClipperCairo.cpp: Added.
        (WebCore::SVGResourceClipper::applyClip):
        * platform/graphics/svg/cairo/SVGResourceMaskerCairo.cpp: Added.
        (WebCore::SVGResourceMasker::applyMask):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a make install target that installs the Qt port and renamed
        WebKitQt to QtWebKit

        * WebCore.pro:

2007-06-13  Adam Roben  <aroben@apple.com>

        Fix one more BITMAPINFO/BITMAPINFOHEADER typo.

        Rubberstamped by Oliver.

        * platform/win/DragImageWin.cpp:
        (WebCore::allocImage):

2007-06-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Use correct size for BITMAPINFOHEADER -- whoops.

        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2007-06-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14109
        Cleanup JSEvent and JSClipboard in preperation for autogeneration

        * bindings/js/kjs_events.cpp:
        (KJS::DOMEvent::DOMEvent):
        (KJS::DOMEvent::getValueProperty):
        (KJS::DOMEvent::put):
        (KJS::DOMEvent::putValueProperty):
        (KJS::DOMEventPrototypeFunction::callAsFunction):
        (KJS::toJS):
        (KJS::toEvent):
        (KJS::):
        (KJS::JSClipboard::JSClipboard):
        (KJS::JSClipboard::~JSClipboard):
        (KJS::JSClipboard::getOwnPropertySlot):
        (KJS::JSClipboard::getValueProperty):
        (KJS::JSClipboard::put):
        (KJS::JSClipboard::putValueProperty):
        (KJS::JSClipboardPrototypeFunction::callAsFunction):
        (KJS::toClipboard):
        * bindings/js/kjs_events.h:
        (KJS::DOMEvent::):
        (KJS::DOMEvent::impl):
        (KJS::JSClipboard::impl):
        * dom/ClipboardEvent.h:
        * dom/Event.h:
        (WebCore::Event::srcElement):
        (WebCore::Event::returnValue):
        (WebCore::Event::clipboardData):
        (WebCore::Event::dataTransfer):
        (WebCore::Event::clipboard):
        * dom/MouseEvent.h:

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko.

        Small cleanup

        * platform/qt/PlugInInfoStoreQt.cpp:
        (WebCore::PlugInInfoStore::supportsMIMEType):

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko

        Implement the parts required for the JS bridge
        to know about the plugins.

        * WebCore.pro:
        * platform/qt/PlugInInfoStoreQt.cpp: Added.
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        * platform/qt/TemporaryLinkStubs.cpp:

=== Merged the following changes from branches/WindowsMerge ===

2007-06-09  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        If both the old and new WMP plugins are present, remove the old one
        so we won't end up choosing it.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::getPluginsInPaths):

2007-06-08  David Hyatt  <hyatt@apple.com>

        Update licenses/copyrights for WebCoreWin.

        Reviewed by mccullough

        * WebCorePrefix.cpp:
        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:
        * bridge/win/HistoryWin.cpp:
        * bridge/win/PageWin.cpp:
        * page/win/EventHandlerWin.cpp:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/GraphicsContextPlatformPrivate.h:
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp:
        * platform/graphics/win/IconWin.cpp:
        * platform/graphics/win/ImageWin.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/win/CookieJarWin.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/network/win/ResourceHandleWin.h:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/ClipboardWin.h:
        * platform/win/ContextMenuWin.cpp:
        * platform/win/CursorWin.cpp:
        * platform/win/EditorWin.cpp:
        * platform/win/FontCacheWin.cpp:
        * platform/win/FontDataWin.cpp:
        * platform/win/FontPlatformData.h:
        * platform/win/FontPlatformDataWin.cpp:
        * platform/win/FontWin.cpp:
        * platform/win/GlyphPageTreeNodeWin.cpp:
        * platform/win/GraphicsContextWin.cpp:
        * platform/win/KeyEventWin.cpp:
        * platform/win/MimeTypeRegistryWin.cpp:
        * platform/win/NotImplemented.h:
        * platform/win/PlatformMouseEventWin.cpp:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/ScreenWin.cpp:
        * platform/win/ScrollViewWin.cpp:
        * platform/win/SearchPopupMenuWin.cpp:
        * platform/win/SoundWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/TextBoundariesWin.cpp:
        * platform/win/WebCoreHistory.cpp:
        * platform/win/WebCoreHistory.h:
        * platform/win/WebCoreSystemInterface.cpp:
        * platform/win/WebCoreSystemInterface.h:
        * platform/win/WheelEventWin.cpp:
        * platform/win/WidgetWin.cpp:
        * plugins/win/PlugInInfoStoreWin.cpp:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginDebug.h:
        * plugins/win/PluginPackageWin.cpp:
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginStreamWin.cpp:
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        * plugins/win/npfunctions.h:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.h:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        <rdar://problem/5252902>
        Shockwave plug-in content crashes.
        
        Add a new quirk for plug-ins that need their WNDPROCs to be ASCII. If someone uses SetWindowLongA to set the WNDPROC to an ASCII one
        and the previous one was an Unicode one, the value returned from SetWindowLongA (the old WNDPROC) will not be a function pointer, but instead
        a special value. The Win32 API CallWndProc knows that when it encounters a special value it must convert the message to Unicode. Shockwave 
        does not use CallWndProc but instead treats the WNDPROC as a function.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        (WebCore::PluginViewWin::quirks):

2007-06-07  Sam Weinig  <sam@webkit.org>

        Build fix for the build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-06  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Update to last fix.
        Invalidate a list of rects rather than unioning them.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateTimerFired):
        (WebCore::PluginViewWin::invalidateRect):
        * plugins/win/PluginViewWin.h:

2007-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5245016> 100A89+WebKit.dll: Can't select text in page location field at kids.yahoo.com
        
        Delay invalidates for windowless Flash to prevent Flash WM_PAINT and WM_USER+1 messages from
        starving other HWNDs.
        
        This code defers the invalidate through a WebCore::Timer.  We could have used a Windows ::SetTimer
        to further lessen CPU load, but this would have the additional risk of negatively impacting Flash
        performance, since WebCore::Timer is set up to be more responsive than ::SetTimer.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateTimerFired): Added.
        (WebCore::PluginViewWin::invalidateRect): Delay invalidates for windowless Flash.
        (WebCore::PluginViewWin::determineQuirks): Add delayed invalidate quirk.
        * plugins/win/PluginViewWin.h:

2007-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Update last fix to use startsWith instead of strcmpi.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL):

2007-06-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by gramps.

        Fix http://www.tvguide.com/ "LAUNCH VIDEO & PHOTO PLAYER" button.
        Make "javascript" URL scheme string compare case insensitive.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream): Use strcmpi.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL): Use strcmpi.

2007-06-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        If the value exists but is empty, return an empty String.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::getVersionInfo):

2007-06-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Steve.

        Add the default path for the new WMP Firefox plugin.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addWindowsMediaPlayerPluginPath):

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

        Fixed build.

        * WebCore.vcproj/WebCore.vcproj:

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

        Fixed build.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-30  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Fixed build.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):

2007-05-30  Sam Weinig  <sam@webkit.org>

        Build Fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-29  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://4782915> plugin is not in the right place at jumble.com/play.html

        Pass the plugin window coordinates for windowed plugins too.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setNPWindowRect):

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/4761543> nike.com doesn't finish loading if Flash plugin is installed
        <rdar://problem/5131528> play button on Flash in ESPN front page does not start movie
        
        Make sure to call NPP_SetWindow right after creating the plugin, and not from the main loop. However,
        the WMP plugin needs to have the plugin's window coordinates set correctly when calling NPP_SetWindow so add a 
        quirk for that.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        - Removes platform/win/NotImplemented.h because we have consolidated
          the notImplemented() for all platforms in platform/NotImplemented.h
        - Fixes remaining uses of old macro to use the new notImplemented() one.

        * WebCore.vcproj/WebCore.vcproj:
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::contextForImage):
        * platform/win/NotImplemented.h: Removed.
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/win/TemporaryLinkStubs.cpp:
        (Frame::print):
        (Frame::issueTransposeCommand):
        (GraphicsContextPlatformPrivate::clip):
        (WebCore::FrameView::updateBorder):
        (Widget::setIsSelected):
        (ScrollView::inWindow):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):
        (FrameLoader::overrideMediaType):
        (DocumentLoader::getResponseModifiedHeader):
        (ResourceHandle::willLoadFromCache):
        (WebCore::userIdleTime):
        (CachedPage::close):
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::newStream):
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::setValue):

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustSliderThumbStyle):

2007-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Port code from open source changeset 21808, fixing
        http://bugs.webkit.org/show_bug.cgi?id=13871 
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        * rendering/RenderThemeSafari.h:

2007-05-29  Ada Chan  <adachan@apple.com>

        Build fix.
        - Added "$(ProjectDir)..\platform\win" to include paths
        - Added WebCore\bindings\js\JSCSSStyleDeclarationCustom.cpp to project

        * WebCore.vcproj/WebCore.vcproj:

2007-05-28  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a bug with Settings where a number of different objects held bare 
        Settings* data members, even though the Page owns the Settings object and 
        deletes it upon destruction.

        Added NULL checks since the Page can be deleted before the frame/document.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::load):

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by NOBODY.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://5211882>
        Need to relaunch Boomer to recognize newly installed QT plug-in
        
        <rdar://5061867>
        After installing Flash, Safari would still not display pages that needed it
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::refresh):
        Return whether the plugin database changed or not.
        
        (WebCore::PluginDatabaseWin::findPlugin):
        New function that tries to find a plug-in given its url and MIME type.
        
        (WebCore::PluginDatabaseWin::createPluginView):
        If no plugin is found, refresh the database and search for the plugin again if the database changed.
        
2007-05-24  Adele Peterson  <adele@apple.com>

        - fix http://bugs.webkit.org/show_bug.cgi?id=13837
          Separator in new <select> widget disappears when block element with border is in document.

        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::paintMenuListButton):
         Added calls to set the stroke style and thickness when painting the arrows and the separator.

2007-05-24  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-23  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-23  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * platform/win/CursorWin.cpp:
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2007-05-22  Ada Chan  <adachan@apple.com>

        Fix build.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        Build fix.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent): 

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff, Adam.

        Use precompiled headers (via WebCorePrefix.h) to speed up WebCoreWin builds.
        This improved WebCore debug rebuild time from 40 minutes to 25 for me.
        
        A few files needed to be excluded, since they didn't build properly with
        the prefix file: ColorData.c, CSSGrammar.cpp, HTMLEntityNames.c, XPathGrammar.cpp, XPathParser.cpp.

        * WebCore.vcproj/WebCore.vcproj: Turn on precompiled header, force includes flags.
        * WebCorePrefix.cpp: Added.
        * WebCorePrefix.h: Added.
        * config.h: Modified to be compatible with WebCorePrefix.h.

2007-05-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Fixing the vcproj paths.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Build fix after r21577.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-18  Adam Roben  <aroben@apple.com>

        Build fix after r21562.

        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/WidgetWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        * plugins/win/PluginViewWin.h:

2007-05-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.
        
        <rdar://problem/4914940> Some plugins won't redraw correctly when scrolling
        
        This patch does two things:
        
        1. It comments out the call to set the window's region to an empty region while it's being moved. This was done to prevent
        the QT plugin from drawing outside its bounds when scrolling it when it's inside an iframe or div with overflow.
        
        2. It lets Windows handle its invalid region when moving the window and setting its new window region.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):

2007-05-18  Adam Roben  <aroben@apple.com>

        Build fix after r21555.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe):

2007-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Build Fix after <rdar://problem/5201423>

        * WebCore.vcproj/WebCore.vcproj:

2007-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Follow up to <rdar://problem/5092645> PopupMenuWin needs bidiReorderCharacters logic from RenderListBox

        * platform/win/PopupMenuWin.cpp: (WebCore::PopupMenu::paint):
          Use the clientStyle to determine how to handle bidi text.  For popup buttons, which we restrict to LTR,
          we will match the button text.

2007-05-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5210600> New WMP plugin doesn't show any contents

        Call NPP_SetWindow after the window's size has been updated.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):

2007-05-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        <rdar://problem/5204016> Repro crash on nytimes.com in MimeTypeRegistry::getMIMETypeForExtension
        
        Return null if the extension is null.
        
        * platform/win/MimeTypeRegistryWin.cpp:
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):

2007-05-16  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for:
            <rdar://problem/5092645> PopupMenuWin needs bidiReorderCharacters logic from RenderListBox
            <rdar://problem/5205654> Select popup menus should always be ltr to match the mac

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Remove special cases for RTL menus, since we are always going to left align.
        (WebCore::PopupMenu::calculatePositionAndSize): ditto.
        (WebCore::PopupMenu::paint): Added call to bidiReorderCharacters.

2007-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5147895> REGRESSION: Content-Disposition: filename is ignored for drag-and-drop.

        If the image does not already have a title, fall back to the 
        name suggested by Content-Disposition.

        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalImageFileDescriptor):

2007-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5202805> Null dereference in createGlobalData(CString str)
        
        Null terminate manually to prevent us from dereferencing null.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):

2007-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Windows side of fix for
        <rdar://problem/4728842> Can't drag-and-drop files onto <input type="file">

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::cfHDropFormat):
          Need to be able to access externally
          
        * platform/win/ClipboardUtilitiesWin.h:
          Declare cfHDropFormat
          
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
          Add implementation of containsFiles and asFilenames

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5176940> Seed10: MS Silverlight 1.0 beta plug-in is not supported
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginsFromRegistry):
        New function that adds plugins from the registry from HKEY_LOCAL_MACHINE/MozillaPlugins.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::forceRedraw):
        Make these work with windowed plugins.
        
2007-05-13  Darin Adler  <darin@apple.com>

        Requested by Hyatt.

        - internal part of http://bugs.webkit.org/show_bug.cgi?id=13529
          DOM3 keyIdentifier text is incorrect

        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode): Use 4 digits for "U+" stuff.

2007-05-12  Oliver Hunt  <oliver@apple.com>

        rs=hyatt.

        Stubs to prevent build bustage

        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):

2007-05-11  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Added new RenderWordBreak.cpp/h files.

2007-05-10  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        * bridge/win/FrameWin.cpp:
        (WebCore::imageFromSelection): Updated to use selectionRect instead of visibleSelectionRect
        
2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Geoff.

        Moved shared EditorWin code to Editor.cpp in open source.

        * platform/win/EditorWin.cpp: Deleted (moved) most of this file.

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Oliver.

        Removed localized string stubs.

        * platform/win/TemporaryLinkStubs.cpp:

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.

        Updated for new editor interface.

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::isRangeUngrammatical):

2007-05-07  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fixed <rdar://5087119> Paste fidelity isn't as good as it is on the mac
        and <rdar://5087118> Plain text copy/paste yields bad line endings on Boomer
        and re-organized standalone functions in DragDataWin.cpp and PasteboardWin.cpp
        into ClipboardUtilitiesWin.h/cpp.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ClipboardUtilitiesWin.cpp: Added.
        (WebCore::cfHDropFormat):
        (WebCore::getWebLocData):
        (WebCore::extractURL):
        (WebCore::texthtmlFormat):
        (WebCore::createGlobalData):
        (WebCore::markupToCF_HTML):
        (WebCore::urlToMarkup):
        (WebCore::replaceNewlinesWithWindowsStyleNewlines):
        (WebCore::replaceNBSPWithSpace):
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::plainTextFormat):
        (WebCore::plainTextWFormat):
        (WebCore::filenameWFormat):
        (WebCore::filenameFormat):
        (WebCore::htmlFormat):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::fragmentFromFilenames):
        (WebCore::containsFilenames):
        (WebCore::fragmentFromCF_HTML):
        (WebCore::fragmentFromHTML):
        (WebCore::containsHTML):
        * platform/win/ClipboardUtilitiesWin.h: Added.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeRange):
        * platform/win/DragDataWin.cpp:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::documentFragment):

2007-05-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Fix crash when using "check spelling while typing".

        * WebCore.vcproj/WebCore.vcproj: Added TextBreakIteratorInternalICUWin.cpp
        * platform/win/TemporaryLinkStubs.cpp: Removed findSentenceBoundary, findNextSentenceFromIndex.

2007-05-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        changed use of DeprecatedString::fromUTF8 to UTF8Encoding().decode()

        * platform/win/DragDataWin.cpp:
        (WebCore::fragmentFromHTML):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::documentFragment):

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada, Oliver.

        Checkpoint:
        <rdar://problem/4602372> Spelling
        <rdar://problem/4769763> Spell checking engine support

        * platform/win/EditorWin.cpp:
        (WebCore::findFirstBadGrammarInRange): Account for start offset when reporting bad grammar range (fixed my porting mistake).
        (WebCore::Editor::advanceToNextMisspelling): Include user description with spelling error.
        (WebCore::isRangeUngrammatical): Include user description with spelling error.

2007-05-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        Fixed <rdar://5181466> HTML formatted clipboard data is not converted from UTF8 when pasted

        * platform/win/DragDataWin.cpp:
        (WebCore::fragmentFromHTML):
        * platform/win/PasteboardWin.cpp:
        (WebCore::fragmentFromCF_HTML):
        (WebCore::Pasteboard::documentFragment):

2007-05-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve

        Fix misuse of GlobalLock.

        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalData):

2007-05-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Add logic to draw underlines for grammar and spelling errors.
        (rdar://problem/4769832)

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::spellingPatternColor):
        (WebCore::grammarPatternColor):
          Can't define global const with constructor so use function scoped globals instead.
        (WebCore::setCGStrokeColor):
          Utility function pulled over from GraphicsContextCG          
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        
        * platform/win/TemporaryLinkStubs.cpp:
          Remove old drawLineForMisspellingOrBadGrammar stub

2007-05-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Fix crash when retrieving title of context menu after it has been selected.
        Necessary to get spelling corrections code working.

        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::itemWithAction): menu item info fType is a set of flags, MFT_STRING is 0, so we need to or off flags before comparing.

2007-04-29  Adam Roben  <aroben@apple.com>

        Build fix after r21183.

        * WebCore.vcproj/WebCore.vcproj: Added LayoutState.(h|cpp).

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Fix for <rdar://problem/5126393> REGRESSION (r19672-19697): Safari drag image drags at original size (13261)
 
        Prevent build bustage from opensource changes, correct scaling

        * platform/win/DragImageWin.cpp:
        (WebCore::scaleDragImage):

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

        Reviewed by Darin, Oliver.

        Checkpoint:
        <rdar://problem/4602372> Spelling
        <rdar://problem/4769763> Spell checking engine support
        
        Ported code from EditorMac.mm into EditorWin.cpp.
        Once this works, I'll move this code into Editor.cpp and remove it
        form EditorMac.mm.

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::findFirstMisspellingInRange):
        (WebCore::paragraphAlignedRangeForRange):
        (WebCore::findFirstGrammarDetailInRange):
        (WebCore::findFirstBadGrammarInRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::isRangeUngrammatical):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::spellingPanelIsShowing):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markAllMisspellingsInRange):
        (WebCore::markAllBadGrammarInRange):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        * platform/win/TemporaryLinkStubs.cpp:

2007-04-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5061022>
        REGRESSION: Acrobat 8 plug-in fails to scroll with trackpad two-finger scroll or mouse wheel (12995)
        
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        Get rid of passWheelEventToSubframe and pass wheel events to all widgets.

2007-04-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * page/win/EventHandlerWin.cpp: Removed passWheelEventToSubframe.

2007-04-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5089822> Boomer does not send scroll events

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

2007-04-19  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Removed empty filter.

2007-04-19  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Removed unused files.

2007-04-18  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Added an equality operator to COMPtr.

        * platform/win/COMPtr.h:
        (operator==):
        (operator!=):

2007-04-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Allow images to be dragged from page and dropped as files.
        This is the remainder of the fix for <rdar://problem/5035948> 
          -- Dragging image or link from boomer doesn't create webloc 
             or image file.

        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
          Make name generation nicer, and better match Firefox
        
        (WebCore::createGlobalURLContent):
          rename function
        
        (WebCore::createGlobalImageFileContent):
          Copies image data into global store
        
        (WebCore::createGlobalUrlFileDescriptor):
          Rename function
          Updated for parameter change on filesystemPathFromUrlOrTitle
        
        (WebCore::createGlobalImageFileDescriptor):
          Set up file descriptor for image drag
        
        (WebCore::getCachedImage):
          Helper function
        
        (WebCore::writeImageToDataObject):
          Attempts to build and insert data for image->file drag
        
        (WebCore::ClipboardWin::declareAndWriteDragImage):
          Attempts to build and insert data for image->file drag
        
        (WebCore::ClipboardWin::writeURL):
          Add call to imageDataToDataObject

2007-04-17  Adam Roben  <aroben@apple.com>

        Rubberstamped by Oliver.

        * platform/network/cf/ResourceHandleCFNet.cpp: Removed an unnecessary
        include.

2007-04-17  Oliver Hunt  <oliver@apple.com>

        Whoops, had code commented out from manual failure test.
        Also fixed date of previous changelog entry

        * platform/win/ClipboardWin.cpp:
        (WebCore::writeFileToDataObject):

2007-04-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Partial fix for <rdar://problem/5035948> -- Dragging image 
        or link from boomer doesn't create webloc or image file.
        
        Add all the ground work to set up FileDescriptors and FileContent
        for allowing files to be created from drag and drop actions,
        and hook up logic for links to create WebLoc data for drag and drop.

        * platform/win/ClipboardWin.cpp:
        (WebCore::fileDescriptorFormat):
        (WebCore::fileContentFormat):
          Clipboard formats 
          
        (WebCore::pathRemoveBadFSCharacters):
        (WebCore::filesystemPathFromUrlOrTitle):
          Helper functions for create filenames
          
        (WebCore::createGlobalDataForURLContent):
          Create the WebLoc content
          
        (WebCore::createGlobalDataForUrlFileDescriptor):
          Create a file descriptor for the WebLoc data
          
        (WebCore::writeFileToDataObject):
          Basic helper function to push generated file info
          into the target DataObject
          
        (WebCore::ClipboardWin::writeURL):
          Now puts WebLoc file onto the Clipboard

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

        Reviewed by Adele.

        Fix <rdar://problem/5002577> Focus ring SPI in GraphicsContextWin.cpp
        needs to move to WebKitSystemInterface

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Use wkDrawFocusRing.

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

        * WebCore.vcproj/WebCore.submit.sln: Use the Debug_Internal
        configuration.

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

        Small correctness fix that is needed for building OpenSource.

        * platform/win/PopupMenuWin.cpp: Use RenderTheme instead of RenderThemeWin.

2007-04-13  Adam Roben  <aroben@apple.com>

        Reviewed by Tim.

        Sync our config.h with the OpenSource version so we can merge ours in
        later.

        * config.h: Added #defines from the OpenSource version, moved
        Windows-specific defines inside #if PLATFORM(WIN[_OS]), and got rid
        of assert.h
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor): Use ASSERT instead of assert.

2007-04-13  Adam Roben  <aroben@apple.com>

        Rubberstamped by Tim.

        Removed the loader/win directory since it only contains empty files.

        * WebCore.vcproj/WebCore.vcproj: Removed empty files.
        * loader/win/FrameLoaderWin.cpp: Removed.
        * loader/win/ResourceLoaderWin.cpp: Removed.

2007-04-12  Adam Roben  <aroben@apple.com>

        Rubberstamped by Steve.

        Removed unused file.

        * WebCore.vcproj/WebCore.sln: Removed.

2007-04-12  Adam Roben  <aroben@apple.com>

        Didn't mean to commit this.

        * WebCore.vcproj/WebCore.vcproj:

2007-04-12  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        <rdar://problem/5131565> Need to be able to use debug WebKit with
        release Safari.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/debug.vsprops:
        * WebCore.vcproj/debug_internal.vsprops: Added.
        * WebCore.vcproj/release.vsprops:

2007-04-11  Adam Roben  <aroben@apple.com>

        Reviewed by Tim.

        Get rid of FrameViewWin.cpp, since it's empty.

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameViewWin.cpp: Removed.

2007-04-11  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Update for changes to Pasteboard.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2007-04-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/4887095> - PageCache and PageState should be combined

        Changed a TemporaryLinkStub and updated the project file

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (CachedPage::close):

2007-04-10  John Sullivan  <sullivan@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::markBadGrammar):
        Keep build going: added stub for this new method

2007-04-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5056988>
        Can not open player on http://radioalice.com

        Fix scriptStringIfJavaScriptURL to not use the path of the URL. This would ignore any characters past 
        a '?' character because that would be parsed as the query part of the URL.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::scriptStringIfJavaScriptURL):
        Make this be more like the mac, chopping off the first 12 characters ("javascript:") 
        and then decoding the remaining characters.

2007-04-10  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::PluginViewWin):
        Initialize m_status.

2007-04-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5062624>
        No prompt to install QT for pages with uninstalled QT plug-in.
        
        Add a status() accessor to PluginViewWin. This can be used by WebKit to find out if the plug-in
        loaded successfully or not.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::PluginViewWin):
        (WebCore::PluginViewWin::init):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        (WebCore::PluginViewWin::status):

2007-04-09  Brady Eidson  <beidson@apple.com>

        Build fix

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): assume userGesture is true

2007-04-09  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2007-04-08  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Stubbed out Frame::dashboardRegionsChanged now that it's not
        Mac-specific.

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::dashboardRegionsChanged):

2007-04-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for rdar://problem/5097227 Can't drag Flash-based 
        scrollbar on mtv.com
        
        The problem was when creating a mouse move event for the 
        plugin we weren't passing on the mouse button state.  
        
        The opensource side of this patch adds logic that allows 
        us to distinguish between a MouseEvent with NoButton and
        a MouseEvent with LeftButton, so we can then provide the 
        correct information to the plugin.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):

2007-04-06  Dave Hyatt  <hyatt@apple.com>

        Internal side of fix for bug 13274.

        Reviewed by olliej

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupWndProc):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::removeChild):
        * platform/win/WidgetWin.cpp:

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

        Internal build fox after opensource r20753.

        * platform/win/PlatformMouseEventWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:

2007-04-03  Oliver Hunt  <oliver@apple.com>

        Buildfix

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
           Adding .get() calls

2007-04-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Alice.

        - fixed <rdar://problem/5107069> WebCore leaks a copy of the CFHTTPMessage CFDictionary (from CFHTTPMessageCopyAllHeaderFields)

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse): Use RetainPtr (once to avoid a leak and once
        just as style cleanup).

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Fix crashes seen when running the plugin layout tests.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Fill in the enumerate pointer, not the evaluate pointer (it's already been filled in).
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didFinishLoading):
        Handle the case where there was no plugin stream data at all.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Check that NPStream pointers passed to NPN_DestroyStream are valid.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::streams):
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::ownerForStream):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::destroyStream):

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5095582>
        PluginViewWin doesn't implement NPN_DestroyStream.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        Handle the case where NPN_DestroyStream is called from the newstream handler.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::destroyStream):
        Implement this.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5097225> 
        Mouse cursors don't work with windowless plugins
        
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):
        Add an "ignoreNextSetCursor" boolean and don't call SetCursor if it's true.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):
        Store away the current cursor and make sure that it won't be reset.

2007-04-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Fix logic in windowless paint functions.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::invalidateRegion):
        (WebCore::PluginViewWin::forceRedraw):

2007-03-31  Dave Hyatt  <hyatt@apple.com>

        Internal side of 13234.   Open source side was reviewed by
        Mitz.  Layout of justified text was broken when dragged or
        when a ::selection style was in effect.

        * platform/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::offsetForPosition):
        * platform/win/UniscribeController.h:
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::addExtraPluginPath):
        * plugins/win/PluginDatabaseWin.h:
        New function for adding an extra plugin path, to be used by DRT.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Set the current directory tho the plugin directory while loading the plugin. Add new NPN callbacks.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::invalidateRegion):
        (WebCore::PluginViewWin::forceRedraw):
        Don't do anything if the plugin is windowed.
        
        * plugins/win/npapi.cpp:
        (NPN_PushPopupsEnabledState):
        (NPN_PopPopupsEnabledState):
        Add stubs.
        
        * plugins/win/npfunctions.h:
        Add new methods and merge some fixes from the open source version.

2007-03-29  Dave Hyatt  <hyatt@apple.com>

        Enable CG's local font cache.  rdar://problem/5070005
       
        Reviewed by aroben

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformInit):

2007-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - updates for <rdar://problem/4820817> Autoscroll is broken in Mail.app (message jumps around when trying to select text)


        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Fix for 5090964, arabic text is all jumbled in list boxes and popup menus (and in the
        Boomer app too).  The fallback font was not the right size because the font you're mapping
        from had to be selected into the HDC first.
       
        Reviewed by ggaren

        * ChangeLog:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2007-03-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Fixed <rdar://problem/5085076> WebView stops painting after 
        loading stand-alone netflix movie preview in WMP format
        
        The stand-alone WMP plug-in seems to do all its drawing in
        the WM_ERASEBKGN phase, not the WM_PAINT phase, so our
        InvalidateRect call for plug-in windows needs to specify 
        'true' for whether the background region should be erased.
        
        A smart plug-in that wants to avoid background draws can
        still do so by just returning 1 in response to WM_ERASEBKGN,
        or by setting its background brush to NULL.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5091459>
        Crash when destroying "null plugin"
        
        <rdar://problem/5056845>
        Invoking itunes page has missing plugin icon on it
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paintMissingPluginIcon):
        Clip before painting.
        
        (WebCore::freeStringArray):
        Add null-check.
        
        (WebCore::PluginViewWin::PluginViewWin):
        Initialize plugin names and values.
        
2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Add support for glyph offsets to the GlyphBuffer.
       
        Reviewed by olliej

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2007-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Initialize new m_isContinuous field in WheelEvent

        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Enable complex text.  Selection and small-caps support are now enabled with this patch.
        
        Reviewed by aroben

        * platform/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::floatWidth):
        (WebCore::UniscribeController::offsetForPosition):
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::itemizeShapeAndPlace):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/win/UniscribeController.h:
        (WebCore::UniscribeController::runWidthSoFar):

2007-03-26  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5088844> Popup menu is not positioned correctly on a yahoo comics page
        
        Fixes test: fast/forms/control-restrict-line-height.html
        
        This change was made in RenderThemeMac a while ago, and will fix the line height for aqua popup buttons, 
        buttons and search fields.
        
        * rendering/RenderThemeSafari.cpp: WebCore::RenderThemeSafari::setFontFromControlSize):
          Don't honor line-height for controls that have restricted font size.
          
2007-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        <rdar://problem/5086888> - WebHistory(Item) Leak

        * platform/win/COMPtr.h:
        (COMPtr::COMPtr): An an adoptRef constructor

2007-03-24  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/5076610> Crash in PluginViewWin::updateWindow when
        loading a PDF page for the first time after installing Acrobat Reader

        Don't call PluginPackageWin::load() until the PluginViewWin has been
        inserted into the Widget tree. load() can result in arbitrary code
        execution (in this case, a EULA window appears which takes focus from
        the WebView, causing Frame::setIsActive(false) to be called), and we
        don't want to be in a transitional state when that happens.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView): Call PluginViewWin's
        one and only constructor.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setParent): Call init() after inserting
        ourselves into the Widget tree.
        (WebCore::PluginViewWin::PluginViewWin): Defer all real work until
        init() is called.
        (WebCore::PluginViewWin::init): Added. Calls m_plugin->load(), then
        does the rest of the work that was once done by the constructor.
        * plugins/win/PluginViewWin.h: Removed createNullPlugin and simplified
        constructor, added setParent override and new init method.

2007-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        <rdar://problem/5086210> - Move RetainPtr to WTF for WebKitWin and the App

        * WebCore.vcproj/WebCore.vcproj: Add the ForwardingHeader to the vcprojs

2007-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5083928> In editable webviews, caps lock key is ignored

        * platform/win/KeyEventWin.cpp: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Removed code to store lowercase characters in m_text.  Now that we use the character code
        to create m_text this is already taken care of.  This does mean that m_unmodifiedText is
        not right.  This is used for accesskeys, which don't work yet, so that is covered in rdar://5085596.
        This also fixes line endings in this file.

2007-03-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.
        
        Fixed <rdar://problem/5082985> Select menus are too see-through

        Upped alpha value from 90 to 95. Menus will still seem a little
        more see-through than on the mac, since their backgrounds are
        white, not grey, but white matches other Windows browsers.
        
        * ChangeLog:
        * platform/win/PopupMenuWin.cpp:

2007-03-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5081539>
        QT content is dupped on a page, if page is being previewed or printed.
        
        Don't update the frame geometry if the document is in printing mode.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):

2007-03-22  Beth Dakin  <bdakin@apple.com>

        Fix by Hyatt, reviewed and committed by me.

        Fix for <rdar://problem/5082360> Incomplete frame paint when 
        shrinking window @ google.com

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameGeometry): Wrong order!

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for crasher in layout caused by paints that happen without layout being current.  Change to be
        more like the Mac and crawl the frame tree up front ensuring everyone is up to date before painting.

        Reviewed by olliej

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::children):
        (WebCore::ScrollView::geometryChanged):

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for mouse wheel issues.  Only return success from passWheelEventToSubframe is the event was
        actually accepted.
        
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToSubframe):

2007-03-21  Dave Hyatt  <hyatt@apple.com>

        Fix numerous bugs in RTL support.  Only use a directional override if the run
        tells us to.  Uniscribe will give incorrect results when measuring RTL runs as LTR if the
        directional override is set.  Switch from logical order for glyphs to visual order
        instead.  This is more similar to ATSUI (less similar to the fast code path, which always uses
        logical ordering for glyph generation).  Using visual ordering forces a lot of games to be played
        (have to walk the script items in backwards order for RTL for example), but Uniscribe does not combine
        glyphs properly if visual ordering is not used.
        
        Add support for justification, letter-spacing, word-spacing and rounding hacks.  The CG vs. ATSUI layout
        test now passes with identical results to the Mac.  The ATSUI spacing features layout test now
        generates correct results (although they are different from the Mac because we fall back to Arial for
        Hebrew instead of Lucida Grande).

        Reviewed by oliver

        * platform/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::resetControlAndState):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        (WebCore::UniscribeController::shape):
        * platform/win/UniscribeController.h:

2007-03-20  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Added null-checks for ResourceHandle::cookieStorage() before passing it
        into CFNetwork functions, which are not null-safe.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):

2007-03-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Added XPathNodeSet.(cpp|h).

2007-03-20  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Made the metrics of styled selects match those on the Mac to get
        fast/forms/001.html passing.

        * rendering/RenderThemeSafari.cpp: Use 2px less padding for the
        select's arrow since the arrow is 2px wider than on the Mac.

2007-03-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest): Fix typo.

2007-03-20  Dave Hyatt  <hyatt@apple.com>

        Land advanced text code path (turned off).
       
        Reviewed by aroben
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::smallCapsFontData):
        (WebCore::FontData::scriptFontProperties):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/UniscribeController.cpp: Added.
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::resetControlAndState):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        (WebCore::UniscribeController::shape):
        * platform/win/UniscribeController.h: Added.
        (WebCore::UniscribeController::width):
        (WebCore::UniscribeController::glyphBuffer):

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4921198>
        Cookie acceptance policy not settable

        * platform/network/cf/ResourceHandleCFNet.cpp:
        
        (WebCore::willSendRequest):
        (WebCore::willCacheResponse):
        Remove FIXMEs.
        
        (WebCore::makeFinalRequest):
        New function that makes a final CFURLRequest depending on cookie policy and whether any
        invalid SSL certificates should be ignored.
        
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        Use makeFinalRequest.
        
        (WebCore::ResourceHandle::cookieStorageAcceptPolicy):
        (WebCore::ResourceHandle::setCookieStorageAcceptPolicy):
        (WebCore::ResourceHandle::cookieStorage):
        (WebCore::ResourceHandle::setCookieStorage):
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        New functions for setting cookie policy, the deafult cookie storage and whether invalid
        SSL certificates should result in an error.
        
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Set cookie storage, cookie policy and SSL properties.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        Use same functions as the mac (sorta).
        
        (WebCore::cookiesEnabled):
        Implement this.

2007-03-19  Adam Roben  <aroben@apple.com>

        Reviewed by Anders and Darin.

        Added JavaScriptStatistics to the project for
        <rdar://problems/5071653>.

        * WebCore.vcproj/WebCore.vcproj: Added include/pthreads to the include
        path, and added JavaScriptStatistics.(cpp|h).

2007-03-18  David Hyatt  <hyatt@apple.com>

        Fix the CSS2 system font for 'menu' to match Mac.  Makes the system fonts layout test pass.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::systemFont):

2007-03-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Changed the file upload button to say "Choose File" to match Mac.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::fileButtonChooseFileLabel):

2007-03-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/5061807> STRESS (2): Crash in PlatformScrollbar::setRect

        No test case because I can't seem to get the Windows DRT to cooperate. I'll try again tomorrow.

        The problem was that the FrameView would try to reset the document's scrollbars after having 
        been removed from the page, so its page pointer would be NULL. Added NULL checks.

        This situation ultimately results from the FrameView's non-trivial destructor, which
        creates a fragile dependency on tear-down timing. It looks like the timing on Windows
        is slightly different from the timing on Mac. I didn't see any obvious resulting bugs,
        though, so the NULL checks should be sufficient for now.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):

2007-03-17  David Hyatt  <hyatt@apple.com>

        The internal side of the patch that ensures Boomer paints twice on ibench.  Don't let the timer beat out
        that first paint.

        Reviewed by aroben

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

2007-03-17  Adam Roben  <aroben@apple.com>

        Reviewed by Brady.

        Fix fast/dom/isindex-002.html.

        Add default strings to our two remaining unimplemented localizable
        strings in WebCore.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::searchableIndexIntroduction): Added English string from Mac.
        (WebCore::inputElementAltText): Ditto.

2007-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4960391> REGRESSION (r18922): onChange never fired after selecting an item from a menulist

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu): Initialize m_focusedIndex to 0.  Instead of using the client to track the focused index, we'll
         keep track of it internally.  Our old behavior was trying to match Firefox by updating the selected index as you focus items, but that
         doesn't seem necessary if the selection never gets committed.
        (WebCore::PopupMenu::show): Initialize the focused index to the client's selected index.
        (WebCore::PopupMenu::setFocusedIndex): Remove the fireOnChange argument.  Remove the call to valueChanged.
        (WebCore::PopupMenu::focusedIndex): Return m_focusedIndex instead of getting this from the client.
        (WebCore::PopupMenu::down): Use the focusedIndex.
        (WebCore::PopupMenu::up): ditto.
        (WebCore::PopupMenu::paint): Paint a selected appearance for the item with the focused index.

2007-03-16  Adele Peterson  <adele@apple.com>

        Reviewed by Lou.

        Fix for <rdar://problem/5065040> cannot mousedown + drag in a <select> menu

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Set the capture when the popup window comes up.
        (WebCore::PopupWndProc): Release the capture only when the mouse is not down, and the mouse moves outside the popup window, 
         or if you mouse up inside the window, and you're about to hide the popup.  The mouse will get recaptured if you mouse down
         again in the window.

2007-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        CFNetwork related cleanup that was a work around for previous deficiencies in CFURLDownload
        This might fix some of the random crashers we see on stress testing if they end up 
        downloading links.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):  Always call cancel if theres a
          connection - the ref-count-check hack is no longer neccesary
        (WebCore::ResourceHandle::releaseConnectionForDownload): Give up the CFURLConnection without
          derefing it

2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Steve.
        
        - fixed <rdar://problem/5029776> iBench JavaScript test slower than Opera
        - fixes to use FastMalloc on Windows

        * config.h: Don't force USE_SYSTEM_MALLOC

2007-03-15  Adam Roben  <aroben@apple.com>

        Rubberstamped by Hyatt.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit): Move the code to get the font face
        to the top of the function for easier debugging.
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): ASSERT that we got a
        valid CGFontRef back from CG, as CG and GDI should agree on the fonts
        installed.

2007-03-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Use CFURLResponseCopySuggestedFilename.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::suggestedFilenameForResponse):

2007-03-14  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Use CG to get xHeight.

        * platform/win/FontDataWin.cpp:
        (WebCore::scaleEmToUnits): Made robust against divide-by-zero errors.
        (WebCore::FontData::platformInit): Ported Mac code to get xHeight using CG.

2007-03-14  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/win/EditorWin.cpp:

2007-03-13  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        * platform/win/FontDataWin.cpp:
        (WebCore::scaleEmToUnits): Ported from FontDataMac.
        (WebCore::FontData::platformInit): Use CG for metrics, and apply Mac's
        line-height hack for Times, Helvetica, and Courier.
        (WebCore::FontData::platformWidthForGlyph): Call wkGetGlyphAdvances to
        use some CG SPI to match Mac.

2007-03-12  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Added new JavaScript wrapper derived source files.

2007-03-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/5054694>
        Repro crash when viewing fast/dom/HTMLObjectElement/object-as-frame.html
        
        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::createScriptInstanceForWidget):
        Return 0 for frame views.

2007-03-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5054713>
        Crash in suggestedFilenameForResponse in two fast/encoding tests.
        
        Add null checks.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::suggestedFilenameForResponse):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/5053618> Disable "recent searches" search field menu.

        * platform/win/SearchPopupMenuWin.cpp: (WebCore::SearchPopupMenu::enabled):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.
        
        WebCore part of fix for <rdar://problem/5044790> preventing default of keypress event doesn't work (affects .mac)

        * platform/win/KeyEventWin.cpp:
        (WebCore::singleCharacterString): Added inline keyword.   
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Renamed arguments to be more meaningful.  Added characterCode argument to be used when constructing m_text.

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Forking KeyEventWin.cpp from revision 20118.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/KeyEventWin.cpp: Added.

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Removed Frame::respondToChangedSelection stub
        added Editor::markMisspellings stub

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::markMisspellings):

2007-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
        JSCore causes a hang @ www.panoramas.dk
        
        See JavaScriptCore ChangeLog for details.
        
        Stress test doesn't show any problems.
        
        Drop the JSLock before making calls through the plug-in API from functions
        that may have been called by JavaScript.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::handleKeyboardEvent):
        (WebCore::PluginViewWin::handleMouseEvent):
        (WebCore::PluginViewWin::setNPWindowRect):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::bindingInstance):

2007-03-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by John.

        Fix the doubled text in the image used to drag a link

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreDrawDoubledTextAtPoint):

2007-03-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Implement setting the suggested filename for a response.
        
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::filenameFromHTTPContentDisposition):
        (WebCore::filenameHasSaneExtension):
        (WebCore::suggestedFilenameForResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        * platform/win/MimeTypeRegistryWin.cpp:
        (WebCore::getMIMETypeForUTI):
        
        (WebCore::mimeTypeForExtension):
        Fix two bugs in this function.
        
        (WebCore::MimeTypeRegistry::getPreferredExtensionForMIMEType):

2007-03-09  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        Fixup comments and remove an obsolete FIXME.

2007-03-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Executing a script for a plugin can cause cause this to be deleted
        so we take a reference to our parent prior to executing the script

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2007-03-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Allow webloc files to be dropped onto the webview
        
        <rdar://problem/4883564> Regression: cannot open webloc file by dnd to Boomer's window

        * platform/win/DragDataWin.cpp:
        (WebCore::cfHDropFormat):
           Clipboard format for HDROP, non-static as i will need it elsewhere in the future 
        (WebCore::getWebLocData):
           Extract a url from a webloc file
        (WebCore::getURL):
           Call getWebLocData

2007-03-08  Steve Falkenburg  <sfalken@apple.com>

        Fix Production build more

        * WebCore.vcproj/WebCore.vcproj:

2007-03-08  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-03-08  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.
        
        Fix <rdar://problem/4969070> Failed error pages show "unknown error"
        rather than specific error

        Make ResourceError aware of kCFErrorDomainCFNetwork.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Added case for
        kCFErrorDomainCFNetwork.

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

        Fixing the build while semi-blind is fun.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::supportedKeySizes): Need a namespace.
        (WebCore::signedPublicKeyAndChallengeString): Ditto.

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

        It works better if you use valid C++ syntax.

        * platform/win/TemporaryLinkStubs.cpp:

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

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp: Added missing stubs.

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

        Reviewed by Anders.

        Always keep rounding hacks on.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth): Tell StringTruncator to keep
        rounding hacks on.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreTextFloatWidth): Ditto.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::userAgent):

2007-03-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5041348>
        Can't watch videos at cnn.com
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        Change this function back to call call stop() after destroyStream(). Also, make sure to
        protect the stream since destroyStream can eventually, well, destroy it.

2007-03-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4987743>
        Regression: java content is represented as broken images on pages
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Make sure to set the size of the NPPluginFuncs struct correctly.

2007-03-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::stop): Call cancel() instead of stopLoading(), since the latter was removed.

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

        Reviewed by Anders.

        Added optional underlining of a single character to
        WebCoreTextRenderer.

        No layout tests possible.

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint): Added. This is an extraction of the code
        from DrawTextAtPoint that now also contains the underlining code.
        (WebCore::WebCoreDrawTextAtPoint): Call the helper function.
        (WebCore::WebCoreDrawDoubledTextAtPoint): Ditto.
        * platform/win/WebCoreTextRenderer.h: Added optional underlinedIndex
        parameters.

2007-03-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim.

        * plugins/win/npfunctions.h:
        Fix tyop.
        
2007-02-28  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Clean up WebCoreTextRenderer. WebCoreDrawTextAtPoint now just draws
        text at a point. It doesn't center truncate, clip, or modify alignment.

        No layout test possible.

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreDrawTextAtPoint): Use only WebCore types, and don't
        center truncate or modify alignment.
        (WebCore::WebCoreDrawDoubledTextAtPoint): Moved from WebKitGraphics.cpp.
        (WebCore::WebCoreTextFloatWidth): Added.
        * platform/win/WebCoreTextRenderer.h: Updated/added declarations.

2007-02-28  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4887423> REGRESSION: search results popup menu strings are not localized
        and <rdar://problem/3517227> accessibility-related strings in WebCore are not localized

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):

2007-02-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - fixed <rdar://problem/5005120> Crash: selecting View all RSS Articles from context menu of bookmark folder

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Use RetainPtr
        instead of explicit release, as this was caused by CFRelease on
        a null pointer, and REtainPtr is tolerant.

2007-02-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        <rdar://problem/4956528> Implement Pasteboard::writeImage for 
        Boomer context menus

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage): Copy a bitmap to the clipboard.

2007-02-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Lou and Steve.

        Add a store for current Cursor to fix <rdar://problem/4788352>

        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):

2007-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        To stop the drag image for transparent images from looking 
        ugly (especially fully transparent images) we render the 
        image to a white background prior to passing the image on to 
        Windows
        
        <rdar://problem/5015946>

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageFromImage):

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        * platform/win/GraphicsContextWin.cpp: Get rid of so-five-hours-ago SVG_SUPPORT.

2007-02-26  Adam Roben  <aroben@apple.com>

        Build fix.

        * config.h: Remove redundant #define.
        * WebCore.vcproj/WebCore.vcproj: Update to new macros.

2007-02-26  Adam Roben  <aroben@apple.com>

        Rubberstamped by Ada.

        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Make #if match the header file.

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fix.

        * WebCore.vcproj/build-generated-files.sh: Updated FEATURE_DEFINES.
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Use shiny new ENABLE(SVG).
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp: Ditto.

2007-02-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - fixed layout test failure in fast/overflow/scrollRevealButton
        
        I added a new ScrollView method, fullyClippedContentRect, that vies the content rect
        as clipped by all ancestor scroll views, not just this one. Currently it only works
        correctly on mac however. visibleContentRect, only accounting for the clipping from
        this particular scroll view, is sufficient for most purposes.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrolView::fullyClippedContentRect):

2007-02-24  Adam Roben  <aroben@apple.com>

        Change #if to #ifdef to match style.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):

2007-02-24  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/5013502> REGRESSION: <select> menus are not
        animating smoothly

        This was caused by making the menus partially transparent in r12250.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Disable animations.

2007-02-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4761543>
        nike.com doesn't finish loading if Flash plugin is installed.
        
        If a plugin requests a JavaScript URL with a non null frame target, execute the JavaScript expression. If the result 
        is not "undefined", replace the contents of the frame with the result converted to a string.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::getString):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::requestTimerFired):

2007-02-22  Oliver Hunt  <oliver@apple.com>

        rs = adam
        
        Replacing radar numbers from previous patch with one
        the isn't fictitious <rdar://problem/5018591>

        * platform/win/CursorWin.cpp:
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Implemented a couple more cursor methods

        * platform/win/CursorWin.cpp:
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
          Added radar bug reference <rdar://problem/5018452>
        (WebCore::progressCursor):
        (WebCore::noDropCursor):
        (WebCore::notAllowedCursor):
          Making them return the correct cursor

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        Removing accessive COMPtr use from ClipboardWin constructors
        Adding data verification to ClipoardWin::SetData
        Small amount code tidying, and allowing for failure when writing an URL

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          Updated for new ClipboardWin constructor
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::writeURL):
        (WebCore::ClipboardWin::getData):
          Tidying code, and allowing failure
        (WebCore::ClipboardWin::setData):
          Verifying that we're writing a valid url
                    
        * platform/win/ClipboardWin.h:
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
          Updated for new ClipboardWin constructor

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada, Lou, and Steve.

        Last of the major Drag and drop implementation 
        patches for windows:
        * Adds support for DOM Clipboard during drag operations
        * Un-statics and refactors a few Pasteboard and DragData functions
          to allow them to share implementation with ClipboardWin and other 
          drag logic
        * Moves COMPtr.h from WebKit to WebCore
        * Adds WCDataObject, which is basically a direct copy of
          SDataObject from the app, with a few modifications to support
          DOM clipboard functionality.  Also includes a few suggestions
          from Ada and Steve, mostly involving memory management :D
        
        This resolves 
        <rdar://problem/4821407> Cannot drag link to bookmarks bar to create new link
        <rdar://problem/4869496> User Interaction Essentials: Drag

        * WebCore.vcproj/WebCore.vcproj:
          Adding new files
          
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::maxDragImageSize):
          Maximum size of drag image to allow sharp edges
          is 208x208
          
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          Properly implemented now
          
        * platform/win/ClipboardWin.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::~ClipboardWin):
        (WebCore::writeURL):
          Helper function to write a url to a WCDataObject
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::setData):
        (WebCore::addMimeTypesForFormat):
          Helper function for ClipboardWin::types
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::setDragImage):
        (WebCore::ClipboardWin::setDragImageElement):
          General setters, match behaviour of WebKit/Mac
        (WebCore::ClipboardWin::createDragImage):
          Creates a drag image for a DOM specified Image is specified
          can't currently generate an image for an arbitrary element
        (WebCore::imageToMarkup):
          Wraps a url in an img tag
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writeURL):
        (WebCore::ClipboardWin::writeRange):
        (WebCore::ClipboardWin::hasData):
          Implement Clipboard required by DragController.
          Provides read/write DOM Clipboard implementation for dragging,
          read only when accessing system clipboard.
          
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::dataObject):
          Provide an accessor for the dataObject
          
        * platform/win/DragDataWin.cpp:
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::plainTextFormat):
        (WebCore::plainTextWFormat):
        (WebCore::texthtmlFormat):
        (WebCore::htmlFormat):
        (WebCore::getURL):
        (WebCore::DragData::asURL):
        (WebCore::getPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asFragment):
          Refactoring and removing of a few static modifiers to allow sharing with Clipboard
          
        * platform/win/DragImageWin.cpp:
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::allocImage):
        (WebCore::createCgContextFromBitmap):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
          Implement DragImage functions
          
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
          Creating a Clipboard that wraps the system clipboard
          
        * platform/win/PasteboardWin.cpp:
        (WebCore::createGlobalData):
        (WebCore::markupToCF_HTML):
        (WebCore::urlToMarkup):
        (WebCore::replaceNBSP):
          removing 'static'
          
        * platform/win/WCDataObject.cpp: Added.
        (WebCore::WCEnumFormatEtc::WCEnumFormatEtc):
        (WebCore::WCEnumFormatEtc::QueryInterface):
        (WebCore::WCEnumFormatEtc::AddRef):
        (WebCore::WCEnumFormatEtc::Release):
        (WebCore::WCEnumFormatEtc::Next):
        (WebCore::WCEnumFormatEtc::Skip):
        (WebCore::WCEnumFormatEtc::Reset):
        (WebCore::WCEnumFormatEtc::Clone):
        (WebCore::WCDataObject::createInstance):
        (WebCore::WCDataObject::WCDataObject):
        (WebCore::WCDataObject::~WCDataObject):
        (WebCore::WCDataObject::QueryInterface):
        (WebCore::WCDataObject::AddRef):
        (WebCore::WCDataObject::Release):
        (WebCore::WCDataObject::GetData):
        (WebCore::WCDataObject::GetDataHere):
        (WebCore::WCDataObject::QueryGetData):
        (WebCore::WCDataObject::GetCanonicalFormatEtc):
        (WebCore::WCDataObject::SetData):
        (WebCore::WCDataObject::CopyMedium):
        (WebCore::WCDataObject::EnumFormatEtc):
        (WebCore::WCDataObject::DAdvise):
        (WebCore::WCDataObject::DUnadvise):
        (WebCore::WCDataObject::EnumDAdvise):
        (WebCore::WCDataObject::clearData):
          Copied from SDataObject in the App createInstance and clearData
          are the only new functions.  clearData removes any entries in the
          object with a specified CLIPFORMAT.
          Have also made a few error and memory handling changes suggested
          by Steve and Ada
        * platform/win/WCDataObject.h: Added.
          Header for the above

2007-02-22  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Make sure we always paint the right size search results icon.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton): Removed unused parameter.
        (WebCore::RenderThemeSafari::paintSearchFieldDecoration): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration): Base
        the control size off of the search field rect to ensure that the icon
        and the control are the same size.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton): Ditto.

2007-02-21  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Updated for SafariTheme changes.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuList): Use DropDownButtonPart.

2007-02-20  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj: Added JSHTMLSelectElementCustom.h

2007-02-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Some changes needed to match moving writeImage() to the Pasteboard 
        on the Mac.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeURL): Now takes a bool indicating if the 
        url if for an image.
        (WebCore::Pasteboard::writeImage): This is just a stub for now. I 
        am putting it here instead of on TemporaryLinkStubs because I plan 
        on implementing it very soon.

2007-02-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin and Anders.

        Fix <rdar://problem/5003318> App: Status bar text is more difficult to
        read than Mac OS X Safari

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth): Added truncation.
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreDrawTextAtPoint): Added bottomAlign and centerTruncate parameters.
        * platform/win/WebCoreTextRenderer.h: Ditto.

2007-02-20  Alice Liu  <alice.liu@apple.com>

        Build fix

        * WebCore.vcproj/WebCore.vcproj:
        Added PositionIterator.cpp & h

2007-02-20  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-02-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed some leaks in RenderThemeSafari.
        
        I just merged some of the code I wrote for RenderThemeMac.
        
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):

2007-02-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Fix build.

        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::maxDragImageSize):

2007-02-19  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5006882> PlatformScrollbarSafari doesn't support small scroll bars

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::):
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::trackRepaintRect):
        (WebCore::buttonRepaintRect):
        (WebCore::PlatformScrollbar::invalidateTrack):
        (WebCore::PlatformScrollbar::invalidatePart):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::splitTrack):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):

2007-02-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5008424>
        Regression: Crash loading mp3.com
        
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        Handle null resource errrors.

2007-02-19  Adam Roben  <aroben@apple.com>

        Build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame): This is no longer an instance
        method of Frame.
        * bridge/win/FrameWin.h:

2007-02-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - Adapt for Lars's patch to clean up Frame

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::computePageRects):
        (WebCore::drawRectIntoContext):
        (WebCore::imageFromSelection):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        * bridge/win/FrameWin.h:
        * page/win/EventHandlerWin.cpp:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/win/TemporaryLinkStubs.cpp:
        (Frame::print):
        (Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        * plugins/win/PluginDatabaseWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::createNullPluginView):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2007-02-18  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        Move app text controls to use WebView.
        - added a method to let us render text using WebKit.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/WebCoreTextRenderer.cpp: Added.
        (WebCore::WebCoreDrawTextAtPoint):
        * platform/win/WebCoreTextRenderer.h: Added.

2007-02-18  Adam Roben  <aroben@apple.com>

        Rubberstamped by Hyatt.

        Fix <rdar://problem/5006918> All selected text is black, even if it is
        some other color when not selected

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint): Use the listbox colors for selected items.
        * rendering/RenderThemeSafari.cpp: Removed platformActiveSelectionForegroundColor.
        * rendering/RenderThemeSafari.h: Ditto.

2007-02-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://problem/5006872> <select> popups need Aqua scroll bars

        PopupMenuWin now uses a PlatformScrollbar.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::hitTest): Allow hit testing even when we
        don't have a parent widget.
        (WebCore::PlatformScrollbar::autoscrollPressedPart): Don't autoscroll
        if nothing is pressed.
        * platform/win/PopupMenuWin.cpp: m_scrollOffset is now measured in menu
        items, not in pixels.
        (WebCore::PopupMenu::PopupMenu): Initialize new member.
        (WebCore::PopupMenu::show): Make popups partially transparent, don't
        use Windows' built-in scroll bars, and create a PlatformScrollbar if
        needed.
        (WebCore::PopupMenu::calculatePositionAndSize): Get the scroll bar's
        width from PlatformScrollbar instead of from Windows.
        (WebCore::PopupMenu::visibleItems): Added.
        (WebCore::PopupMenu::listIndexAtPoint): Definition moved here from header.
        (WebCore::PopupMenu::invalidateItem): Update for m_scrollOffset change,
        and shrink the damage rect to not invalidate the scroll bar unnecessarily.
        (WebCore::PopupMenu::scrollToRevealSelection): Updated to use PlatformScrollbar.
        (WebCore::PopupMenu::updateFromElement): Changed bool to BOOL.
        (WebCore::PopupMenu::paint): Updated for m_scrollOffset change, and
        paint the scroll bar at the end.
        (WebCore::PopupMenu::valueChanged): Added. Code comes from the old scrollTo method.
        (WebCore::PopupMenu::windowClipRect): Added.
        (WebCore::PopupWndProc):
            - Set up the scroll bar in WM_SIZE
            - Send mouse events to the scroll bar when appropriate
            - Get rid of handling of WM_VSCROLL events (we shouldn't receive these anymore)

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Updated to include stubs for drag and drop methods
        Added DragImage[Win].cpp to project file
        Now uses platform independent EventHandler::handleDrag

        * WebCore.vcproj/WebCore.vcproj:

        * bridge/win/FrameWin.cpp:
        (WebCore::Frame::dragImageForSelection):
          Just wrap the platform specific selectionImage method

        * page/win/DragControllerWin.cpp:
          Defining constants for drag images -- basically copied the Mac definitions

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          Basic implementation -- needs to create an IDataObject to be useful
          but ClipboardWin is basically unimplemented anyway so not yet a problem

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::createDragImage):
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writeURL):
        (WebCore::ClipboardWin::writeRange):
        (WebCore::ClipboardWin::hasData):
          Stubs

        * platform/win/ClipboardWin.h:
          Updated interface

        * platform/win/DragImageWin.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
          Stubs

2007-02-17  Adam Roben  <aroben@apple.com>

        * WebCore.vcproj/WebCore.vcproj: Removed bogus single-file
        configuration for MimeTypeRegistryWin.cpp.

2007-02-17  David Hyatt  <hyatt@apple.com>

        Part of the OpenSource fix to make sure the fill color starts off as transparent.  Make sure our CG context
        has its state properly in sync with the CGContext.

        Reviewed by aroben

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):

2007-02-17  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/CursorWin.cpp:
        (WebCore::notAllowedCursor):

2007-02-17  Dave Hyatt <hyatt@apple.com>

        Change how resizers are invalidated to fix Radar bug #4976772.
        
        Reviewed by olliej

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::suppressScrollbars):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::invalidateRect):

2007-02-16  Dave Hyatt <hyatt@apple.com>

        Fix for Radar bug #4981074, RSS Scrollbar overlaps window resizer.  Teach all scrollbars how to
        avoid the window resizer.
        
        Reviewed by aroben

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setParent):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setParent):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::resizerOverlapsContent):
        (WebCore::ScrollView::adjustOverlappingScrollbarCount):
        (WebCore::ScrollView::setParent):

2007-02-16  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint): Don't draw the arrows when we're disabled.

2007-02-15  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam.

        Fix for 4804657 and 4952931, scroll view gets confused and ends up at a bad scroll
        offset.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore):
        (WebCore::ScrollView::updateScrollbars):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4993040>
        Crash in plugin code watching yahoo news video
        
        Zero out the plugin function struct.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Fix build.

        Use adoptCF instead of adopt.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2007-02-16  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Implemented square button look.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustRepaintRect): Only inflate the rect
        if we have a pushbutton.
        (WebCore::RenderThemeSafari::paintButton): Ditto.

2007-02-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add the default Flash plugin location to the list of plugin paths.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addFlashPluginPath):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):

2007-02-15  Lou Amadio  <lamadio@apple.com>

        Reviewed by Steve.

        <rdar://problem/4945799> CGText: should use correct mechanism to set font smoothing style
        
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

2007-02-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4987529>
        Regression: first clicks don't work at flash-based Nokia.com

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handleMouseEvent):
        Don't set buttons for mouse move. Also, ignore unknown mouse events.

2007-02-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Switch permanently from CFStreamError to CFErrorRef in ResourceHandleCF

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail):
        (WebCore::ResourceHandle::start):

2007-02-13  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Remove SVGDOMImplementation.(cpp|h)

2007-02-12  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        <rdar://4952715> Events not being passed from WebCore/WebKit up through IWebForm::doCommandBySelector
        Frame::doTextFieldCommandFromEvent()'s signature has changed from taking in a PlatformKeyboardEvent
        to KeyboardEvent.  Match that in FrameWin.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::doTextFieldCommandFromEvent):
        * bridge/win/FrameWin.h:

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

        Rubberstamped by Oliver.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintButton): Call controlSizeFromRect
        instead of controlSizeForFont to determine the correct control size.

2007-02-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady and Adam.

        Fixed <rdar://4986194> Typing in content editable body does not automatically scroll to reveal cursor

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        The scrollview's scrolloffset wasn't getting set in cases where there were no scrollbars
        You can have a scrolloffset even if you don't have scrollbars

2007-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - Add TextEvent to the DOM (based on the proposed DOM level 3)
          to be used to fix some international input bugs soon.
          At this point, we don't send any text events.

        - Remove some obsolete files.

        * WebCore.vcproj/WebCore.vcproj: Add new files, remove obsolete files.

2007-02-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        Add the stream to the m_streams hash set.

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12599
        <rdar://problem/4973507> REGRESSION: When replying in Gmail, the caret disappears when you start to type (12599)

        This also fixes a bug where when you called window.focus() on a background window, it did not come to the front.

        * bridge/win/FrameWin.h: Removed focusWindow() and unfocusWindow() stubs since there are now implementations in the base class.
        * platform/win/TemporaryLinkStubs.cpp:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4955068>
        PluginViewWin leaks memory.
        
        Make streams ref-counted. Remove streams from the hash set once they're done loading.
        
        Don't try to paint if painting is disabled.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        (WebCore::PluginStreamWin::destroyStream):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::disconnectStream):
        * plugins/win/PluginViewWin.h:

2007-02-08  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix scrollbar painting.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::trackRepaintRect): Added.
        (WebCore::buttonRepaintRect): Added.
        (WebCore::PlatformScrollbar::invalidateTrack): Inavlidate the repaint
        rect, not the rect used for hit testing.
        (WebCore::PlatformScrollbar::invalidatePart): Ditto.
        (WebCore::PlatformScrollbar::paint): Paint the track first, then the
        buttons, then the thumb.
        (WebCore::PlatformScrollbar::paintButton): Paint in the repaintRect,
        not the rect used for hit testing.
        (WebCore::PlatformScrollbar::paintTrack): Ditto.

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Remove unused stub.
        
        * platform/win/TemporaryLinkStubs.cpp:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        <rdar://problem/4888871>
        Need to support synchronous XMLHttpRequest.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2007-02-07  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fix mini search field painting.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::searchFieldSizes): Use the right height.

2007-02-07  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Draw a single down arrow for styled menu lists.

        * rendering/RenderThemeSafari.cpp: (WebCore::RenderThemeSafari::paintMenuListButton):
        * rendering/RenderThemeWin.cpp: Moved #ifndef USE_SAFARI_THEME to enclose the body of the file.

2007-02-07  Brady Eidson  <beidson@apple.com>

        RS = Adam
        
        Touch these files to force it to recompile...

        * platform/win/PlatformScrollBarSafari.cpp:
        * rendering/RenderThemeWin.cpp:

2007-02-07  Adam Roben  <aroben@apple.com>

        Rubberstamped by Maciej.

        Turn on SafariTheme so we can try it out.

        * WebCore.vcproj/WebCore.vcproj:

2007-02-07  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState): Pass focus information down to SafariTheme.

2007-02-06  Adam Roben  <aroben@apple.com>

        Rubberstamped by Brady.

        Updated for log channel rename.

        * platform/win/GDIObjectCounter.cpp:
        (WebCore::GDIObjectCounter::~GDIObjectCounter):

2007-02-06  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Added support for radio buttons and checkboxes.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState):
        (WebCore::RenderThemeSafari::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::checkboxMargins):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::radioMargins):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        * rendering/RenderThemeSafari.h:

2007-02-05  Adam Roben  <aroben@apple.com>

        Reviewed by Ada and Oliver.

        Add a GDIObjectCounter class that informs us of GDI leaks.

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/GDIObjectCounter.cpp: Added.
        (WebCore::GDIObjectCounter::GDIObjectCounter):
        (WebCore::GDIObjectCounter::init):
        (WebCore::GDIObjectCounter::~GDIObjectCounter):
        (WebCore::GDIObjectCounter::currentGDIObjectsInUse):
        * platform/win/GDIObjectCounter.h: Added.

2007-02-05  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Add new files.

2007-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.           

        Removed unimplemented EventHandler::handleMouseUp, 
        as a platform independent version is available now.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::eventActivatedView): 
          Now we use this method, it needs to be implemented

2007-02-02  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebCore.vcproj/WebCore.vcproj:

2007-02-02  Steve Falkenburg  <sfalken@apple.com>

        * platform/network/cf/FormDataStreamCFNet.cpp:

2007-02-02  Adam Roben  <aroben@apple.com>

        Turn on Lucida Grande.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::systemFont):
            Use Lucida Grande.
        (WebCore::RenderThemeSafari::setFontFromControlSize):
            Ditto.
        (WebCore::RenderThemeSafari::controlSizeForSystemFont):
            Implemented using font sizes from NSFont.m.
        (WebCore::RenderThemeSafari::adjustRepaintRect):
            Uncommented.
        (WebCore::RenderThemeSafari::minimumMenuListSize):
            Ditto.

2007-02-02  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Implemented menulist drawing.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::controlSizeFromRect):
            Moved to top of file.
        (WebCore::RenderThemeSafari::adjustRepaintRect):
            Uncommented menulist case.
        (WebCore::RenderThemeSafari::popupButtonMargins):
            Added controlSize parameter, made margins match AppKit artwork.
        (WebCore::RenderThemeSafari::paintMenuList):
            Implemented.
        * rendering/RenderThemeSafari.h:
            Updated decalartion.

2007-02-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to always retain the request we return. (In practice, we were already doing this since
        client can never be null).
        
        (WebCore::didReceiveResponse):
        Remove client null check.

2007-02-01  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Updating event handler logic to make use of methods migrated from 
        WebKit to WebCore

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::handleDrag):   
          Updating handleDrag to use methods that we've migrated to WebCore
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):                        
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):   
          provide the type of mouse event
          

2007-01-31  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.

        Fix BString bugs.

        * platform/win/BString.cpp:
        (WebCore::BString::BString): Call SysAllocString instead of SysAllocStringLen
        (WebCore::BString::operator=): Add proper null checks
        (WebCore::operator ==): Add proper null checks

2007-01-30  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::setDefersLoading):

2007-01-30  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-29  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp: Removed old stub.

2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        All the downloads plumbing for if you have ToT CFNetwork + my changes
        (or after they submit with my changes)

        * platform/network/cf/FormDataStreamCFNet.cpp: Reword the #ifdef for CFNetwork ToT for clarity
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail): Use a RetainPtr .get()
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal): Only cancel the connection if we hold the last ref
        (WebCore::ResourceHandle::start): Use a RetainPtr - adopt and .get()
        (WebCore::ResourceHandle::cancel): Use a RetainPtr .get()
        (WebCore::ResourceHandle::receivedCredential):Use a RetainPtr .get()
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential): Use a RetainPtr .get()
        (WebCore::ResourceHandle::connection): Use a RetainPtr .get()
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Prevent a crash if a null

2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff

        Change LOG_NOTIMPL() to use a LOG() and its logging channel instead of LOG_ERROR()
        so you can actually turn it off.
        
        * platform/win/NotImplemented.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>
        
        - fix build

        * platform/win/TemporaryLinkStubs.cpp:

2007-01-29  Steve Falkenburg  <sfalken@apple.com>

        Fix build break from RootObject ownership change.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createRootObject): Added
        (WebCore::FrameWin::cleanupPluginObjects): change destroy to invalidate
        (WebCore::FrameWin::bindingRootObject): change new RootObject to RootObject::create
        * bridge/win/FrameWin.h: 
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance): change new RootObject to FrameWin::createRootObject.

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Fix frequent failed assertions when painting scroll bars.

        * platform/win/PlatformScrollBarSafari.cpp:
        (WebCore::PlatformScrollbar::paint): Check that painting is enabled
        before painting.

2007-01-26  Oliver Hunt <oliver@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Due to <rdar://problem/4956565> REGRESSION: After scrolling frame, 
        hovering over link in this frame doesn't change cursor to pointing 
        hand

        lastEventIsMouseUp() is a Mac-only issue. This patch makes it Mac-
        only code, so we can remove the temporary link stub for it.

        * platform/win/TemporaryLinkStubs.cpp:

2007-01-26  Oliver Hunt <oliver@apple.com>

        Build fix -- adding SVGInlineTextBox.{cpp,h} to project

        * WebCore.vcproj/WebCore.vcproj:

2007-01-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fixed DragDataWin behaviour so that it will provide plain text
        for a file dropped on the window.

        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::asPlainText):

2007-01-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        -Setup for new CFNetwork API for those using their ToT and their next submission
        -Setup for new CoreFoundation API for those using their ToT and their next submission

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody): New callback format - will need to define USE_NEW_CFSTREAM_CALLBACKS 
          to switch to the new API
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFail):  This automagically works :)

2007-01-25  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Added support for slider.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::RenderThemeSafari):
        (WebCore::RenderThemeSafari::inflateRect):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        * rendering/RenderThemeSafari.h:

2007-01-25  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-24  Adele Peterson  <adele@apple.com>

        Reviewed by Brady and Oliver.

        Moved keyEvent method from FrameWin to EventHandler and updated
        call sites.  Now this method is shared with the mac.

        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:

2007-01-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        * bridge/win/FrameWin.cpp:
        (WebCore::regExpForLabels): Ported from FrameMac.mm
        (WebCore::FrameWin::searchForLabelsAboveCell): Ported from FrameMac.mm
        (WebCore::FrameWin::searchForLabelsBeforeElement): Ported from FrameMac.mm
        (WebCore::FrameWin::matchLabelsAgainstElement): Ported from FrameMac.mm
        * bridge/win/FrameWin.h:

2007-01-24  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Added PlatformScrollBarSafari for Aqua scroll bars.

        * WebCore.vcproj/WebCore.vcproj: Added new file to project.
        * platform/win/PlatformScrollBarSafari.cpp: Added. Copied from PlatformScrollBarWin.cpp.
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):
        (WebCore::PlatformScrollbar::gripperRect):
        (WebCore::PlatformScrollbar::themeChanged):
        * platform/win/PlatformScrollBarWin.cpp: Added #ifndef USE_SAFARI_THEME.
        * rendering/RenderThemeSafari.cpp: Updated for SafariTheme.h changes.
        (WebCore::RenderThemeSafari::RenderThemeSafari):

2007-01-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        Initial hookup of Download support

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::operator CFStreamError):
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loaderRunLoop): Accessor so downloads can run on the same 
          runloop as connections
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::connection):

        * platform/win/BString.cpp:
        (WebCore::BString::BString): Ability to create BString from a CFStringRef
        * platform/win/BString.h:

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4919754>
        Boomer freezes after attempt to play video.
        
        * plugins/win/PluginStreamWin.cpp:
        Change WebReasonNone to -2, some plugins return -1 to indicate error.
        
        (WebCore::PluginStreamWin::stop):
        Just don't clear the loader, stop loading as well.
        
        (WebCore::PluginStreamWin::startStream):
        Destroy the stream if newstream returns an error.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        If the call to toString throws an exception, clear it.

2007-01-23  Steve Falkenburg  <sfalken@apple.com>

        Fix release build.

        * WebCore.vcproj/WebCore.vcproj:

2007-01-23  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Added call to paintThemeTextArea.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintTextArea):

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebCore.vcproj/WebCore.vcproj:
        Copy plugin and JS headers.
        
        * loader/win/FrameLoaderWin.cpp:
        Move functions to WebKitWin.

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        * WebCore.vcproj/WebCore.vcproj:
        * page/win/DragControllerWin.cpp: Added.
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::isCopyKeyDown):
          Platform specific implementation

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::isForDragging):
        * platform/win/ClipboardWin.h:
          Migrated common Clipboard functionality from ClipboardMac/Win -> Clipboard

        * platform/win/DragDataWin.cpp: Added.
        (WebCore::DragData::createClipboard):
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::filenameWFormat):
        (WebCore::filenameFormat):
        (WebCore::plainTextFormat):
        (WebCore::plainTextWFormat):
        (WebCore::DragData::containsURL):
        (WebCore::extractURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::texthtmlFormat):
        (WebCore::htmlFormat):
        (WebCore::containsHTML):
        (WebCore::fragmentFromHTML):
        (WebCore::containsFilenames):
        (WebCore::fragmentFromFilenames):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment):
        (WebCore::DragData::asColor):
          Implementation of DragData accesor methods, and helper functions

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
          Updated for new ClipboardWin constructor

        * platform/win/PasteboardWin.cpp:
        (WebCore::fragmentFromCF_HTML):
        (WebCore::Pasteboard::documentFragment):
          Pulled out CF_HTML parsing to a seperate function so logic 
          can be shared with DragDataWin

2007-01-22  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Implemented search field painting, and did some cleanup.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::RenderThemeSafari): Updated for changes to SafariTheme.
        (WebCore::RenderThemeSafari::paintButton): Ditto.
        (WebCore::RenderThemeSafari::paintTextField): Ditto.
        (WebCore::controlSizeFromRect): New helper function.
        (WebCore::RenderThemeSafari::paintSearchField): Implemented.
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration): Ditto.
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton): Ditto.
        (WebCore::RenderThemeSafari::setSearchFieldSize): Uncommented setSizeFromFont call.
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle): Ditto.
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationStyle): Ditto.
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationStyle): Ditto.
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle): Ditto.

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/4771115>
        Windows Media Player plugin crashes.

        * WebCore.vcproj/WebCore.vcproj:
        Formatting changes.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Add Windows Media Player path.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::sendJavaScriptStream):
        * plugins/win/PluginStreamWin.h:
        New function which sends a JavaScript result stream and handles any errors that the
        plug-in returns.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setFrameGeometry):
        Always call NPP_SetWindow, some plugins (like WMP) relies on it.
        
        (WebCore::PluginViewWin::performRequest):
        If a plug-in requests a javascript: URL that doesn't evaluate to a string, call toString on it.
        The Windows Media Player plugin calls javascript:document.location and expects to get the location back.

2007-01-23  Darin Adler  <darin@apple.com>

        - internal part of fix for http://bugs.webkit.org/show_bug.cgi?id=12273
          REGRESSION: File input value invisible after removing and re-appending

        * WebCore.vcproj/WebCore.vcproj: Added FileChooser.cpp.

        * platform/win/FileChooserWin.cpp: Removed many now-unneeded functions.
        (WebCore::FileChooser::FileChooser): Updated for changed parameters and members.
        (WebCore::FileChooser::openFileChooser): Changed to take document parmaeter and
        find the FrameView from that instead of the upload control.
        (WebCore::FileChooser::basenameForWidth): Added ignored Font parameter.

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4903230>
        Boomer crashes at Flickr website when "View as slideshow" is clicked.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance):
        Return null if m_plugin is null (which it can be if the plugin failed to load).

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-01-22  Adam Roben  <aroben@apple.com>

        Moved ifdefs to match Darin's suggestion.

        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:

2007-01-22  Adam Roben  <aroben@apple.com>

        Build fix.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::theme):
        * rendering/RenderThemeSafari.h:

2007-01-21  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Implemented drawing button states and control sizes.

        * WebCore.vcproj/WebCore.vcproj:
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::determineState): Added.
        (WebCore::RenderThemeSafari::systemFont): Implemented rest of font sizes.
        (WebCore::RenderThemeSafari::paintButton): Updated for SafariTheme changes.
        (WebCore::RenderThemeSafari::paintTextField): Ditto.
        * rendering/RenderThemeSafari.h: Added declaration.

2007-01-21  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        * rendering/RenderThemeSafari.cpp: Updated declarations of SafariTheme calls.
        (WebCore::systemFontSizeForControlSize): Added.
        (WebCore::RenderThemeSafari::systemFont): Made it work in the small-control case.
        (WebCore::RenderThemeSafari::adjustRepaintRect): Made it work for buttons and checkboxes.
        (WebCore::RenderThemeSafari::setFontFromControlSize): Fixed to work on Windows.
        (WebCore::RenderThemeSafari::checkboxMargins): Added controlSize parameter.
        (WebCore::RenderThemeSafari::buttonMargins): Ditto.
        (WebCore::RenderThemeSafari::paintButton): Fixed FIXME, added save/restore calls.
        (WebCore::RenderThemeSafari::paintTextField): Added save/restore calls.
        * rendering/RenderThemeSafari.h: Updated declarations.

2007-01-21  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        Adding RenderThemeSafari.
 
        * WebCore.vcproj/WebCore.vcproj:
        * rendering/RenderThemeSafari.cpp: Added.
        (WebCore::):
        (WebCore::theme):
        (WebCore::RenderThemeSafari::RenderThemeSafari):
        (WebCore::RenderThemeSafari::~RenderThemeSafari):
        (WebCore::RenderThemeSafari::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeSafari::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeSafari::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeSafari::systemFont):
        (WebCore::RenderThemeSafari::isControlStyled):
        (WebCore::RenderThemeSafari::adjustRepaintRect):
        (WebCore::RenderThemeSafari::inflateRect):
        (WebCore::RenderThemeSafari::baselinePosition):
        (WebCore::RenderThemeSafari::controlSupportsTints):
        (WebCore::RenderThemeSafari::controlSizeForFont):
        (WebCore::RenderThemeSafari::sizeForFont):
        (WebCore::RenderThemeSafari::sizeForSystemFont):
        (WebCore::RenderThemeSafari::setSizeFromFont):
        (WebCore::RenderThemeSafari::setFontFromControlSize):
        (WebCore::RenderThemeSafari::controlSizeForSystemFont):
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::checkboxSizes):
        (WebCore::RenderThemeSafari::checkboxMargins):
        (WebCore::RenderThemeSafari::setCheckboxSize):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::radioSizes):
        (WebCore::RenderThemeSafari::radioMargins):
        (WebCore::RenderThemeSafari::setRadioSize):
        (WebCore::RenderThemeSafari::setButtonPaddingFromControlSize):
        (WebCore::RenderThemeSafari::adjustButtonStyle):
        (WebCore::RenderThemeSafari::buttonSizes):
        (WebCore::RenderThemeSafari::buttonMargins):
        (WebCore::RenderThemeSafari::setButtonSize):
        (WebCore::RenderThemeSafari::paintButton):
        (WebCore::RenderThemeSafari::paintTextField):
        (WebCore::RenderThemeSafari::adjustTextFieldStyle):
        (WebCore::RenderThemeSafari::paintTextArea):
        (WebCore::RenderThemeSafari::adjustTextAreaStyle):
        (WebCore::RenderThemeSafari::popupButtonMargins):
        (WebCore::RenderThemeSafari::popupButtonSizes):
        (WebCore::RenderThemeSafari::popupButtonPadding):
        (WebCore::RenderThemeSafari::setPopupPaddingFromControlSize):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButton):
        (WebCore::RenderThemeSafari::adjustMenuListStyle):
        (WebCore::RenderThemeSafari::adjustMenuListButtonStyle):
        (WebCore::RenderThemeSafari::menuListSizes):
        (WebCore::RenderThemeSafari::minimumMenuListSize):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        (WebCore::RenderThemeSafari::adjustSliderThumbSize):
        (WebCore::RenderThemeSafari::paintSearchField):
        (WebCore::RenderThemeSafari::searchFieldSizes):
        (WebCore::RenderThemeSafari::setSearchFieldSize):
        (WebCore::RenderThemeSafari::adjustSearchFieldStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton):
        (WebCore::RenderThemeSafari::cancelButtonSizes):
        (WebCore::RenderThemeSafari::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeSafari::resultsButtonSizes):
        (WebCore::RenderThemeSafari::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldDecoration):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeSafari::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton):
        * rendering/RenderThemeSafari.h: Added.
        (WebCore::RenderThemeSafari::supportsControlTints):
        * rendering/RenderThemeWin.cpp:

2007-01-21  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Added JSDocumentCustom.cpp.

2007-01-19  Ada Chan  <adachan@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:
        Add SVG files.

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::enabled):
        Use correct class name.

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Remove some unused FrameWin functions.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/FrameWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::status):

2007-01-18  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenu::enabled): Implemented.

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/GlyphMapWin.cpp: Removed.
        * platform/win/GlyphPageTreeNodeWin.cpp: Added.
        (WebCore::GlyphPage::fill):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Fix ownership handling of CFRequestRef. A ResourceRequest holds on to its CFRequestRef 
        and doesn't ref it when returning it. Also, implement willCacheResponse.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::willCacheResponse):
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2007-01-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Final hookup of HTTP Auth plumbing - have the ResourceHandle actually call into
        CFNetwork for HTTP Auth.
        
        Also, deal with svn:eol-style issues on another batch of files that didn't have it set

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedCredential):  Call into CFNetwork
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):  Ditto
        (WebCore::ResourceHandle::receivedCancellation):  Copy Mac behavior by calling cancel on the handle

2007-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Futher improvements/bug fixes to BString

        * platform/win/BString.cpp:
        (WebCore::BString::BString):
        (WebCore::BString::operator=):
        * platform/win/BString.h:

2007-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada, Adam, and Anders oh my!

        Add handle ==/!= operators to BString

        * platform/win/BString.cpp:
        (WebCore::operator ==):
        (WebCore::operator !=):
        * platform/win/BString.h:

2007-01-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4874565> Draw context menus using CG

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::type): Re-worked to be more forgiving.
        * platform/win/ContextMenuWin.cpp: No need for show() and hide()
        since WebKit takes care of this now.

2007-01-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Hook up AuthenticationChallenge to CF network.  
        Call up through appropriate client methods through to WebFrame (FrameLoaderClient) at
        which point my upcoming implementation for the IWebURL<auth> classes will be used

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/AuthenticationCF.cpp: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::createCF):
        (WebCore::core):
        * platform/network/cf/AuthenticationCF.h: Added.
        * platform/network/cf/ResourceErrorCF.cpp: Added.
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::operator CFStreamError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveChallenge):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add ProgressTracker.[cpp|h]

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::didChangeTitle):
        Copied here from FrameLoaderMac.mm
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        Removed setting referrer and user-agend and added a check for null page.
        
        (WebCore::ResourceHandle::cancel):
        Don't call didFail.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::getAppletInstanceForWidget):
        Use LOG_NOIMPL here.

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        Add getter that I forgot to commit.
        
2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by NOBODY.

        Make it build after my HTTP Auth OpenSource checkin

        * WebCore.vcproj/WebCore.vcproj:

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::advanceToNextMisspelling):

2007-01-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        <rdar://problem/4818840> Crash occurs after selecting Print Preview from under the File menu if no printer is selected
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::computePageRects): removed calls to setupRootForPrinting
        * bridge/win/FrameWin.h: removed setupRootForPrinting

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Yet another build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (DocumentLoader::getResponseModifiedHeader):

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Another build fix.
        
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::setDefersLoading):

2007-01-09  Steve Falkenburg  <sfalken@apple.com>

        Production build fix

        * WebCore.vcproj/WebCore.vcproj:

2007-01-09  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TextBoundariesWin.cpp:

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Remove FrameLoader functions that have been implemented.
        
        * platform/win/TemporaryLinkStubs.cpp:

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Update temporary link stubs.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::referrer):
        (FrameLoader::overrideMediaType):
        (FrameLoader::checkLoadCompleteForThisFrame):
        (DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (MainResourceLoader::create):
        (ResourceLoader::cancel):
        (ResourceLoader::load):
        (ResourceLoader::releaseResources):
        (ResourceLoader::addData):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceLoader::cancel):
        (FrameLoader::didChangeTitle):
        (DocumentLoader::unreachableURL):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CheckCacheObjectStatus):

2007-01-04  David Hyatt  <hyatt@apple.com>

        Always use 1.0 as the synthetic bold offset for now.  Fixes bug 9534.

        Reviewed by olliej

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):

2007-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - removed some obsolete source files

        * WebCore.vcproj/WebCore.vcproj: Removed obsolete files.

2007-01-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Add stubs for all of the localized context menu item titles. The 
        stubs just return English Strings until we have a localization 
        solution in WebKit.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):

2007-01-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4857027>
        ragnarok online misrenders (due to lack of support for windowless plugins)

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateWindow):
        Rename from updateHwnd since this now handles updating the clip rect for windowless plugins.
        
        (WebCore::PluginViewWin::paintMissingPluginIcon):
        New function which paints the missing plugin icon.
        
        (WebCore::PluginViewWin::paint):
        Do windowless painting here.
        
        (WebCore::PluginViewWin::handleKeyboardEvent):
        (WebCore::PluginViewWin::handleMouseEvent):
        (WebCore::PluginViewWin::handleEvent):
        New functions for handling mouse and keyboard events, translating them and handing them to the plugin.
        
        (WebCore::PluginViewWin::setNPWindowRect):
        Set correct window rect for windowless plugins.
        
        (WebCore::PluginViewWin::getValue):
        Add variable for containing HWND.
        
        (WebCore::PluginViewWin::setValue):
        Add windowless and transparent variables.
        
        (WebCore::PluginViewWin::invalidateRect):
        (WebCore::PluginViewWin::invalidateRegion):
        (WebCore::PluginViewWin::forceRedraw):
        Implement these.
        
        (WebCore::PluginViewWin::determineQuirks):
        Set quirks now that we support windowless flash.
        
        (WebCore::PluginViewWin::PluginViewWin):
        Only create the window if the plugin isn't windowless.
        
        * plugins/win/PluginViewWin.h:
        New declarations.
        
        * plugins/win/npapi.cpp:
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):
        Implement these and forward them to the plugin view.

2007-01-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Lou

        Temporary Link Stub fix for Back/Forward cache landing in OpenSource

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (DocumentLoader::request):
        (DocumentLoader::originalRequest):
        (DocumentLoader::title):
        (DocumentLoader::unreachableURL):
        (DocumentLoader::urlForHistory):
        (DocumentLoader::setCommitted):
        (DocumentLoader::prepareForLoadStart):
        (DocumentLoader::replaceRequestURLForAnchorScroll):
        (DocumentLoader::isClientRedirect):
        (DocumentLoader::isLoading):
        (DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (FrameLoader::applyUserAgent):
        (FrameLoader::dataURLBaseFromRequest):
        (FrameLoader::load):
        (FrameLoader::opened):
        (ResourceHandle::willLoadFromCache):
        (WebCore::userIdleTime):
        (PageCache::close):

2007-01-02  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

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

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::bindingRootObject):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::bindingInstance):

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

        Build fix

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::getHBITMAP):

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

        Fixed build. Tsk, tsk, Oliver.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Oliver Hunt.

        Removed WebCoreSettings, cleaned up WebCore::Settings.

        * WebCore.vcproj/WebCore.vcproj: Added Settings.cpp to the project.

        * bridge/win/FrameWin.cpp: Updated to use new preferences names.
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::windowScriptNPObject):

        * loader/win/FrameLoaderWin.cpp: ditto.
        (WebCore::FrameLoader::partClearedInBegin):

        * plugins/win/PluginViewWin.cpp: ditto.
        (WebCore::PluginViewWin::load):

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

        Reviewed by Anders.

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

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

        Build fix.
        
        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Kevin Decker

        Renamed stub method name to match change in WebCore

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        renamed from markMisspellingsInAdjacentWords

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

        Reviewed by Hyatt.

        Fix: <rdar://4769797> REGRESSION: No focus rings

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::focusRingColor): Changed to match the Aqua focus ring color.

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

        Remove line width setting in font rendering now that GraphicsContext sets
        it for us.

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

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

        Add support for stroking and filling of text to CSS.  Boomer side.  Same code as in FontMac.

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

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

        Remove non-existent header from vcproj

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Ada

        -Changed CFNetwork debugging output to use a logging channel
        -Added the url to each logging message - the debugging output was quite crippled without this
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):

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

        Reviewed by Geoff.

        <rdar://problem/4876963>
        Crash launching Boomer after all options deselected in pref->security
        
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        Add check for JavaScript.

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

        Reviewed by Kevin Decker.

        Add (currently disabled) plugin quirks. This is necessary in order to get the Flash plugin
        to request windowless plugins (which it only will do if it think it's running on a Mozilla browser).
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::userAgent):
        (WebCore::PluginViewWin::determineQuirks):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:
        (WebCore::):
        * plugins/win/npapi.cpp:
        (NPN_UserAgent):

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

        Change by Lou, reviewed by Brady

        Scrolling caused Desktop flickering as well as other strange
        flickering in the case of a missing plug-in

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):

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

        * WebCore.vcproj/WebCore.vcproj:
        Update for SVG changes.

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

        Reviewed by Adam.

        Removed scheduleClose() from FrameWin.  The implementation has
        been moved to Frame.cpp.                

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::mimeTypeForFileName):

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

        Reviewed by Adam and Oliver.

        <rdar://problem/4856014> Target weekly ad doesn't work.
        
        Store the real base URL and use it for requests.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::handlePost):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

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

        * platform/win/FontWin.cpp: (WebCore::Font::drawGlyphs): Fix build,
        wrong variable name.

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

        Boomer side of my changes for filling/stroking of text.

        Reviewed by olliej

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

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

        Reviewed by Adam.

        <rdar://problem/4853363> hook up various deletion-related functions in WebView

        * WebCore.vcproj/WebCore.vcproj:
        Added file EditorDeleteAction.h

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

        Reviewed by Oliver.

        - Remove CG header includes in OpenSource files

        * config.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivate.h:

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

        Build fixes.

        * WebCore.vcproj/WebCore.vcproj: Removed deleted files.
        * platform/win/CursorWin.cpp: Added missing method.
        (WebCore::noneCursor):

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

        Reviewed by Adam (and partially Geoff).

        Boomer side of making WebCore Context Menus support state and
        enabled/disabled, and re-architecture of ContextMenuItem.

        * platform/win/ContextMenuItemWin.cpp: ContextMenuItem class holds
        the platformDescription as the sole member variable. Changes to
        account for this.
        (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/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::insertItem): Takes ownership of the item by
        calling releasePlatformDescription()
        (WebCore::ContextMenu::appendItem): Same.
        (WebCore::ContextMenu::itemWithAction): This is the new at(). Since
        we are no longer using notifybypos, we instead need a way to find a
        menu item by its action. (Its ID.)
        (WebCore::ContextMenu::setPlatformDescription): No longer use
        notifybypos.

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

        RS by Adam.

        Removed TextField, RenderLineEdit classes.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

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

        Reviewed by Adam.

        Added PopupMenu and theme code for:
        <rdar://problem/4463829> Switch to use new search field implementation for <input type="search"> 

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::Icon):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setFocusedIndex):
        (WebCore::PopupWndProc):
        * platform/win/SearchPopupMenuWin.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::autosaveKey):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchField):
        (WebCore::RenderThemeWin::adjustSearchFieldStyle):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWin::paintSearchFieldDecoration):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        * rendering/RenderThemeWin.h:

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

        * platform/win/TemporaryLinkStubs.cpp:
        Remove DocumentLoader::isStopped because it's now in DocumentLoader.cpp.
        
2006-12-15  Geoffrey Garen  <ggaren@apple.com>

        I'm in ur prjct, fxng ur build.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::loadResourceSynchronously):

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

        Reviewed by Brady Eidson.
        
        Fixed <rdar://problem/4760682> Crash clicking nav links at left loading 
        www.tivofaq.com
        
        The underlying problem is that we can't resize framesets. I've filed that
        as <rdar://problem/4885227>.
        
        I've fixed the proximate problem: we were interpreting a click as a frameset
        resize, because the subframe event handler was returning false. A Subframe 
        event handler needs to return true to indicate that the subframe has handled 
        the event. This is how the Mac works, despite the plethora of convoluted code 
        suggesting otherwise.
        
        We should really remove these meaningless return values and unify Mac and 
        Windows event handling, but that's beyond the scope of this patch.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):

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

        Reviewed by Adam. 

        Update PopupMenu code to use new PopupMenuClient instead of RenderMenuList.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::setFocusedIndex):
        (WebCore::PopupMenu::focusedIndex):
        (WebCore::PopupMenu::focusFirst):
        (WebCore::PopupMenu::focusLast):
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::PopupMenu::paint):
        (WebCore::PopupWndProc):

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

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp:
        (SubresourceLoader::didCancel):

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

        Production build fix. Added JSSVGPODTypeWrapper.h to the vcproj.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Adele.

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp:
        (DocumentLoader::URL):
        (ResourceHandle::loadResourceSynchronously):

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

        Fix the build.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::loadResourceSynchronously):
        (ResourceHandle::loadResourceSynchronously):

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

        Fix the build.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (PolicyCheck::call):
        (DocumentLoader::URL):

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

        Reviewed by Darin Adler, Dave Hyatt.
        
        Fixed <rdar://problem/4840261> Frame::setIsActive not called when frames 
        are focused/unfocused
        
        Minor problems remain with focus in frames, but basic editing / cursor
        focus works.
        
        I moved tracking of the focused frame from the Widget hiearchy to Page's
        FocusController. Not all widgets are frames, so this change cleaned up a 
        dubious static cast. Also, the DOM needs to track frame focus because (1) 
        it needs to respond to focus changes and (2) you can focus an element / 
        frame even before it has a renderer / widget.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::focusDocumentView): Implemented. This function is
        poorly named, based on the Mac design.
        (WebCore::PluginViewWin::hasFocus): Added for completeness. It's not really
        used on Windows, though.

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

        Reviewed by Adam.

        Add missing ForwardingHeaders to project

        * WebCore.vcproj/WebCore.make: Fixed line endings
        * WebCore.vcproj/WebCore.vcproj: Added missing headers

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

        Reviewed by Adam.

        Production build fix

        * WebCore.vcproj/build-generated-files.sh:

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

        Reviewed by Geoff.

        Fixed <rdar://problem/4853199> extra whitespace at beginning and end of pasted fragment into contenteditable region
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::documentFragment):

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

        Reviewed by Anders.

        Fixed use of min/max macros (again).

        * WebCore.vcproj/WebCore.vcproj: Make sure we include ForwardingHeaders
        before any include directories so that we get the newest versions
        of our headers.
        * config.h: Move the fake #defines of min/max out of #if
        PLATFORM(WIN_OS) since this is useful in general.
        * platform/win/BString.cpp: Include windows.h
        * platform/win/BString.h: Forward-declare BSTR so we don't have to
        include windows.h.

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

        Reviewed by Adam Roben, Dave Hyatt, Darin Adler.

        Added FocusController to project.

        * WebCore.vcproj/WebCore.vcproj:

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

        * loader/win/ResourceLoaderWin.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/win/TemporaryLinkStubs.cpp:
        (ResourceHandle::loadsBlocked):
        Update for changes to ResourceHandle.

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

        - fix build

        * WebCore.vcproj/WebCore.vcproj: Added missing files, removed obsolete files.

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

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Added missing files to project.

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

        Production build fix.
        Remove platform/UChar.h from our vcproj, since it doesn't exist anymore.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by ggaren.

        Fixed <rdar://problem/4854901> "Copy Link" and "Copy Image Address" context menu items don't work
        And some cleanup of PlatformMouseEvent(Win)

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::handleDrag):
        Removed unnecessary check for mouse event type
        
        * platform/win/PasteboardWin.cpp:
        
        (WebCore::PasteboardOwnerWndProc):
        (WebCore::createGlobalData):
        Added more overloaded implemtations and renamed from createHandle
        
        (WebCore::markupToCF_HTML):
        Changed to handle less-specific input and renamed from createCF_HTML
        
        (WebCore::urlToMarkup):
        (WebCore::Pasteboard::writeURL):
        Added these. 
        
        (WebCore::replaceNBSP):
        Moved out of Pasteboard class
        
        (WebCore::Pasteboard::clear):
        Renamed from clearTypes.
        
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        Trivial cleanup of these.
        
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Removed anything having to do with unnecessary m_type

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

        * WebCore.vcproj/WebCore.vcproj: Update for added files.

        * bridge/win/FrameWin.h:
        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::FrameWin):
        * loader/win/FrameLoaderWin.cpp: (WebCore::FrameLoader::createFrame):
        Changed to use HTMLFrameOwnerElement.

        * platform/win/TemporaryLinkStubs.cpp: (FrameLoader::load):
        Changed to use HTMLFormElement.

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

        Reviewed by Adam.

        Build fix from Nick Zimmerman's last check-in.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Hyatt.

        Use num-cpus to determine the number of jobs make should run
        concurrently.

        * WebCore.vcproj/build-generated-files.sh:

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

        Reviewed by Hyatt.

        Fix: <rdar://problem/4860184> Can't select context menu items with the
        right mouse button

        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::show):

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

        Reviewed by Darin.

        Build fixes after OpenSource r18098 and r18106.

        * WebCore.vcproj/WebCore.vcproj:
            - Changed include paths to reflect the now-flattened JSCore headers.
            - Added missing files to project.
            - Changed post-build step to also copy ForwardingHeaders.
            - Removed unnecessary definition of WTF_PLATFORM_CF from project
              file (it's already defined in config.h).
        * platform/win/TextBoundariesWin.cpp: Fixed up includes and renamed
        function calls.
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):

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

        Rubberstamped by Anders.

        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Fix use of min().

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

        Build fix.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Maciej.

        Add a new member variable to ContectMenuItem to hold on to the sub-
        menu. The new member variable is an OwnPtr<ContextMenu>. Not doing 
        this breaks sub-menus on Boomer since the menu items are no longer 
        static.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):

2006-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by.

        Fixed previous comment

        * ChangeLog:

2006-12-07  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        - keyDown events must be followed by keyPressed events and before keyUp events.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):

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

        Reviewed by Brady.

        New link stub for load() function used by 
        ContextMenuItemTagOpenLink action.

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::load):

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

        Reviewed by Steve and Anders.

        <rdar://4866288> Crash on boomer quit
        - don't close the themes on termination, since uxtheme should do that anyway.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::~RenderThemeWin):

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

        Reviewed by Maciej.

        Fixed a couple of things while investigating <rdar://4866288> (note this doesn't fix the crash yet):
        - we forgot to initialize m_sliderTheme
        - we did the wrong null check when getting the slider theme.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::sliderTheme):

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

        Fix the build.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveData):
        (WebCore::didFail):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):

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

        Reviewed by Adam.

        Modify PluginStreamWin to use a SubresourceLoader instead of a ResourceHandle.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::didReceiveResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFail):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):

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

        Build fixes.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::scheduleClose):

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

        Try to keep the windows build happy with Frame -> Editor changes...

        * bridge/win/FrameWin.h:
        removed declarations of spelling and grammar functions

        * platform/win/TemporaryLinkStubs.cpp:
        changed spelling and grammar functions from FrameWin:: to Editor::
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsInAdjacentWords):
        (WebCore::Editor::advanceToNextMisspelling):

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

        Reviewed by Maciej.

        Don't delete the internal pointer anymore since it's an OwnPtr now.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):

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

        Fix the build

        * platform/win/TemporaryLinkStubs.cpp:

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

        Production build fix.
        ...and add ImageAnimationObserver.h into its new location.

        * WebCore.vcproj/WebCore.vcproj:

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

        Production build fix.
        Remove ImageAnimationObserver.h from vcproj.

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Geoff Garen

        Changes to keep up with Frame -> Editor changes in WebCore

        * bridge/win/FrameWin.h:
        remove ignoreSpelling() and learnSpelling()

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::Editor::ignoreSpelling):
        moved from FrameWin to Editor
        (WebCore::Editor::learnSpelling):
        ditto

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

        Build fix.
        
        * platform/win/CursorWin.cpp:
        (WebCore::copyCursor):

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

        Build fix.
        
        * bridge/win/FrameWin.h:
        added missing declarations for the functions in John's checkin, below. 

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

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::isSelectionUngrammatical):
        (WebCore::FrameWin::guessesForUngrammaticalSelection):
        added stubs to correspond to new Frame functions

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

        Reviewed by Darin.

        * WebCore.vcproj/WebCore.vcproj:
        Add SubresourceClient.h
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveResponse):
        Get rid of the receivedResponse call.
        
        (WebCore::didFinishLoading):
        Get rid of the receivedAllData call, that's handled by the subresource loader now.

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

        Reviewed by Adele.

        * WebCore.vcproj/WebCore.vcproj: Update for new UIEventWithKeyState.cpp file.

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

        Reviewed by Darin.

        - 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/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):
        * config.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):

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

        Reviewed by Alice.

        * platform/win/PasteboardWin.cpp: (WebCore::Pasteboard::generalPasteboard):
        Got rid of s_generalPasteboard. Also removed definition of destructor.

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

        Reviewed by Darin, Geoff.

        Get rid of ref() in ResourceHandle::start() and remove all uses of kill().
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::ResourceHandle::start):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::stop):

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

        Reviewed by Oliver.

        Fixed <rdar://problem/4822632> clicks don't work if you move mouse immediately
        This bug was fixed by implementing EventHandler::handleDrag.  The part of that
        function after the drag hysteresis is exceeded remains unimplemented until 
        drag&drop is implemented. 

        * page/win/EventHandlerWin.cpp:
        (WebCore::dragState):
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::shouldDragAutoNode):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

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

        Reviewed by Adam.

        Support for sub-menus in WebCore context menus. Also some
        adjustments to make ContextMenuItem class a wrapper for the
        platformDescription. (In this case, a wrapper for LPMENUITEMINFO.)

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ContextMenuItemWin.cpp:
        (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/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::insertItem):

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.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):

2006-11-30  Adam Roben  <aroben@apple.com>

        Lather, rinse, repeat.

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::contextForImage):

2006-11-30  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/graphics/cg/GraphicsContextCG.cpp: Removed. This file was
        un-forked a while ago.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::platformDescription):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::contextForImage):

2006-11-30  Adam Roben  <aroben@apple.com>

        Build fix. 


        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        (WebCore::SVGResourceFilter::createFilterEffect):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp:
        (WebCore::SVGResourceMasker::applyMask):

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/4844838> Whole document leak seen 
        running HTML iBench

        * loader/win/FrameLoaderWin.cpp: Removed custom implementation
        for detachFromParent, since FrameLoader has a cross-platform
        version now.

2006-11-30  Steve Falkenburg  <sfalken@apple.com>

        Production build fix.  Add missing header files to vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Remove unused function.

2006-11-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Fix fast/dom/xmlhttprequest-get layout test failure.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        Initialize the status code to 0 for non-http responses.

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.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        * platform/network/cf/ResourceRequestCFNet.h: Removed.
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.h: Removed.
        * platform/win/MimeTypeRegistryWin.cpp:

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/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * bridge/win/FrameWin.h:

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Add platform-specific constructor/destructor to ContextMenu so we can
        properly dispose of the HMENU.

        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::at):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::show):

2006-11-28  Steve Falkenburg  <sfalken@apple.com>

        B&I build fix

        * WebCore.vcproj/WebCore.vcproj:

2006-11-28  Anders Carlsson  <acarlsson@apple.com>

        Fix the build by doing the same changes that were done in the open source WebCore repo.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::cfURLRequest):
        (WebCore::addHeadersFromHashMap):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.h:

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Ada and Beth.

        Fix: <rdar://problem/4601523> Contextual Menus (in web content)

        * WebCore.vcproj/WebCore.vcproj: Defined WEBCORE_CONTEXT_MENUS to turn
        on the context menus. Added new ContextMenuItem files.
        * platform/win/ContextMenuItemWin.cpp: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::itemCount): Updated to match ContextMenu.h and
        ContextMenuItem changes.
        (WebCore::ContextMenu::insertItem): Ditto.
        (WebCore::ContextMenu::appendItem): Ditto.
        (WebCore::ContextMenu::at): New method, similar to Vector<T>::at.
        (WebCore::ContextMenu::setPlatformDescription): Use MIM_APPLYTOSUBMENUS
        to make sure all submenus get the MNS_NOTIFYBYPOS style.
        (WebCore::ContextMenu::show): Implemented.

        Updates to match OpenSource changes.

        * loader/win/FrameLoaderWin.cpp: Added missing #include.
        * page/win/EventHandlerWin.cpp: Return bools to signify whether the
        event was handled.
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h: Ditto.
        * platform/win/PlatformScrollBarWin.cpp: Ditto.
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):

        Small fix inspired by WebView.cpp changes.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Use ::ClientToScreen to
        do coordinate conversion instead of doing it ourselves.

2006-11-28  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/4850883>
        Crash loading pdf page (W4 form)
        
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::redirectDataToPlugin):
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::redirectDataToPlugin):
        Move the function to FrameLoaderWin.cpp and get rid of STOP_NOIMPL() for now, 
        we do things differently on Windows so this function doesn't need do do anything.
        I've filed 4852889 about redoing this once the loader has been ported.

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

        Reviewed by Ada, Adam, and Lou.

        * WebCore.vcproj/WebCore.vcproj:
        Added the files listed below
        
        * platform/win/ClipboardWin.h: Added.
        * platform/win/ClipboardWin.cpp: Added.
        Added the minimum stubs for the ClipboardWin class
        (WebCore::ClipboardWin::isForDragging):
        (WebCore::ClipboardWin::dropEffect):
        (WebCore::ClipboardWin::setDropEffect):
        (WebCore::ClipboardWin::effectAllowed):
        (WebCore::ClipboardWin::setEffectAllowed):
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::setData):
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::dragLocation):
        (WebCore::ClipboardWin::dragImage):
        (WebCore::ClipboardWin::setDragImage):
        (WebCore::ClipboardWin::dragImageElement):
        (WebCore::ClipboardWin::setDragImageElement):
        (WebCore::ClipboardWin::setAccessPolicy):
        (WebCore::ClipboardWin::~ClipboardWin):

        * platform/win/EditorWin.cpp: Added.
        Added this to make dispatchCPPEvent happy. 
        (WebCore::Editor::newGeneralClipboard):

        * platform/win/PasteboardWin.cpp: Added.
        The pasteboard class follows a singleton pattern
        Implemented the following to support CF_HTML, CF_UNICODE, and CF_TEXT
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::~Pasteboard):
        (WebCore::Pasteboard::registerSelectionPasteboardTypes):
        (WebCore::Pasteboard::clearTypes):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::createHandleFromString):
        (WebCore::Pasteboard::createHandleFromCString):
        (WebCore::Pasteboard::createCF_HTMLFromRange):
        (WebCore::Pasteboard::replaceNBSP):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::PasteboardOwnerWndProc):

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

        Reviewed by Anders Carlsson.

        Fixed <rdar://problem/4844863> REGRESSION: screen flashes when scrolling/
        resizing page with plug-in (@ cnn.com, for example).

        LockWindowUpdate was to blame. It turns out that using LockWindowUpdate
        was wrong to begin with. It's really only intended for use in drag-n-drop
        operations, which explains why only one window can be locked at a time.
        (See http://blogs.msdn.com/oldnewthing/archive/2004/06/10/152612.aspx.)
        
        The new solution I've implemented for avoiding plug-in fragments while scrolling
        is simply to clip the plug-in to the zero rect before moving it, and
        then to un-clip it when done.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):

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  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Stub out functions in order to remove FIXMEs from ContextMenu.cpp

        * bridge/win/FrameWin.h: Spell checker functions pushed down from 
        WebKit.
        * platform/win/TemporaryLinkStubs.cpp: Stubs for spelling 
        functions.
        (WebCore::FrameWin::isSelectionMisspelled):
        (WebCore::FrameWin::guessesForMisspelledSelection):

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.vcproj/WebCore.vcproj:

2006-11-27  Anders Carlsson  <acarlsson@apple.com>

        Remove addMessageToConsole from FrameWin.
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        
2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Various fixes that make file upload possible.
        
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):
        Change submitForm to take a FrameLoadRequest.
        
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        Pass kCFURLWindowsPathStyle to CFURLCreateWithFileSystemPath.
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Call the client method.

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Maciej.

        Fork the CF loader.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/cf/FormDataStreamCFNet.cpp: Added.
        (WebCore::getStreamFormDatas):
        (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):
        (WebCore::httpBodyFromStream):
        * platform/network/cf/FormDataStreamCFNet.h: Added.
        * platform/network/cf/ResourceHandleCFNet.cpp: Added.
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::didReceiveChallenge):
        (WebCore::addHeadersFromHashMap):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::arrayFromFormData):
        (WebCore::emptyPerform):
        (WebCore::runLoaderThread):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        * platform/network/cf/ResourceRequestCFNet.cpp: Added.
        (WebCore::getResourceRequest):
        (WebCore::addHeadersFromHashMap):
        (WebCore::cfURLRequest):
        * platform/network/cf/ResourceRequestCFNet.h: Added.
        * platform/network/cf/ResourceResponseCFNet.cpp: Added.
        (WebCore::getResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.h: Added.

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Lou, Dave Hyatt.

        <rdar://problem/4761639>
        Group label in list box doesn't appear as bold
        
        <rdar://problem/4805795>
        <optgroup> labels should be bold in popup menus
        
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::enumStylesCallback):
        (WebCore::FontPlatformData::FontPlatformData):
        Enumerate the existing font styles and decide what to synthesize
        depending on what styles are available.

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Add the same include paths to the debug build.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebCore.vcproj/WebCore.vcproj:
        * kcanvas/device/quartz/KCanvasFilterQuartz.cpp: Removed.
        * platform/graphics/svg/cg/SVGResourceFilterCg.cpp: Added.
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):

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

        Reviewed by Adam.

        Boomer part of context menu actions.

        * bridge/win/FrameWin.h: New spelling functions on Frame.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::show):
        (WebCore::ContextMenu::hide):
        * platform/win/TemporaryLinkStubs.cpp: New stubs.
        (FrameWin::ignoreSpelling):
        (FrameWin::learnSpelling):
        (FrameLoader::reload):

2006-11-18  Adam Roben  <aroben@apple.com>

        Build fix from OpenSource r17841.

        * platform/win/CursorWin.cpp: New method stubs.
        (WebCore::aliasCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):

2006-11-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add #defines in config.h to prevent the min and max macros from being used.

        * bridge/win/FrameWin.cpp:
        * config.h:
        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/win/PopupMenuWin.cpp:
        * plugins/win/PluginStreamWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handlePost):

2006-11-17  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Fixes Targetted Form Submission to now work. Radar: 4762693

        * ChangeLog:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):

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

        Reviewed by Adam.

        Added theme for sider.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::sliderTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::determineSliderThumbState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::paintSliderThumb):
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        * rendering/RenderThemeWin.h:

2006-11-15  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Added new ContextMenuClient and ContextMenuController classes.

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/ContextMenuWin.cpp: Added method implementations Beth
        forgot to check in in r11129.
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::appendItem):

2006-11-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Fixed flash of plug-in content outside its containing iframe while 
        scrolling the iframe.
        
        The problem was that the plug-in would draw between our call to MoveWindow
        and our call to SetWindowRgn. The solution here is to lock all updates in 
        the plug-in's HWND until we've called both MoveWindow and SetWindowRgn.
        
        Tested with Quicktime and Flash.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::geometryChanged):
        * plugins/win/PluginViewWin.h: Removed bogus invalidate parameter to updateHwnd.

2006-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Adding RenderSlider class, and removing DeprecatedSlider and Slider classes.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-15  Beth Dakin  <bdakin@apple.com>
        &   Adam Roben  <aroben@apple.com>

        Reviewed by Adam and Beth.

        Internal side of r17796.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ContextMenuWin.cpp: Added.
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::setPlatformMenuDescription):

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

        Reviewed by Darin.
    
        Remove some (now) obsolete methods.
        
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::unfocusWindow):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::issuePasteCommand):
        (FrameWin::respondToChangedSelection):

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Remove header from vcproj that no longer exists

        * WebCore.vcproj/WebCore.vcproj:

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Fix the B&I build

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Anders.

        - update for creation of EventHandler

        * WebCore.vcproj/WebCore.vcproj: Added EventHandler.cpp/h/Win.cpp.

        * bridge/win/FrameWin.h: Moved virtual functions lastEventIsMouseUp,
        tabsToLinks, and tabsToAllControls to EventHandler.
        * bridge/win/FrameWin.cpp: Ditto.

        * bridge/win/FrameViewWin.cpp: Moved passMousePressEventToSubframe and similar
        functions to EventHandler.

        * page/win/EventHandlerWin.cpp: Added. Code from FrameViewWin and FrameWin.

        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent): Call the setMousePressed
        function in its new home in EventHandler.

        * platform/win/TemporaryLinkStubs.cpp: Moved lastEventIsMouseUp stub to EventHandler.

2006-11-13  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Maciej

        Windows half of 17755 - Make FormData shared

        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::submitForm):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::handlePost):

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

        Reviewed by Adam.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):
        Make sure to call valueChanged after hiding the popup so that change events will 
        be delivered correctly.

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

        Reviewed by Anders, Lou.

        Fix merge script

        * WebCore.vcproj/merge-opensource.sh: Don't copy cairo, pixman

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

        Reviewed by Beth Dakin.
        
        Added project-wide setting to disable Microsoft's made-up deprecation 
        warnings related to std:: functions. (Doesn't have any affect yet,
        since we currently disable all deprecation warnings.)

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Oliver.

        Rename keyPress to keyEvent, it's used for both key presses
        and releases.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyEvent):
        * bridge/win/FrameWin.h:

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

        Reviewed by Geoff.

        Move graphics-related files to platform/graphics to stay in sync with
        changes from OpenSource r17727.

        Also, as discussed with Darin and Steve, we now copy all our headers to
        a flat include/WebCore directory instead of copying the directory
        structure of WebCore. This mirrors how Mac builds.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/cg/ColorCG.cpp: Removed.
        * platform/cg/GraphicsContextCG.cpp: Removed.
        * platform/cg/GraphicsContextPlatformPrivate.h: Removed.
        * platform/win/IconWin.cpp: Removed.
        * platform/win/ImageWin.cpp: Removed.

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

        - blind attempt to fix the build

        * platform/win/CursorWin.cpp:
        (WebCore::verticalTextCursor): Added. Just returns the pointer cursor.
        (WebCore::cellCursor): Ditto.
        (WebCore::contextMenuCursor): Ditto.

2006-11-10  Steve Falkenburg  <sfalken@apple.com>

        Build fix for opensource/internal merge script.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Implement findNextWordFromIndex using ICU.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::findSentenceBoundary):
        * platform/win/TextBoundariesWin.cpp:
        (WebCore::findNextWordFromIndex):

2006-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Added Windows side of MIME Type registry, and updated 
        objectContentType and ImageWin to make use of it
        
        This fixes <rdar://problem/4791483> 

        * WebCore.vcproj/WebCore.vcproj:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::objectContentType):
        * platform/win/ImageWin.cpp:
        * platform/win/MimeTypeRegistryWin.cpp: Added.
        (WebCore::getMIMETypeForUTI):
        (WebCore::mimeTypeForExtension):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):

2006-11-09  Lou Amadio  <lamadio@apple.com>

        Reviewed by mjs
        Corrected positioning of text for find overlay on subframes

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::imageFromRect):

2006-11-08  Lou Amadio  <lamadio@apple.com>

        Reviewed by ggaren

        Moved CookieJar to OpenSourceWin
        Ported CookieJar to CFNetwork
        Corrected an uninitialized variable which crashed on Vista in the Wininet code

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):

2006-11-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - added ResourceError class and didFailWithError client method
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didFailLoadingWithError):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:

2006-11-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Updated Windows to use the new platform abstraction for Screen.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        * platform/win/ScreenWin.cpp:
        (WebCore::monitorInfoForWidget):
        (WebCore::deviceInfoForWidget):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

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

        - fix the build

        * bridge/win/FrameWin.h: Add a forward declaration of FormData.

        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::keyPress):
        Call resetMultipleFormSubmissionProtection instead of prepareForUserAction.

        * platform/win/TemporaryLinkStubs.cpp: Remove the parameter from the
        TextField constructor.

2006-11-08  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Adam.

        Windows buildbot fix.
        Remove /d from xcopy commands that merge opensource/internal components.
        Sync debug and release post-build event.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-07  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        Make the Slider implementation call LOG_NOIMPL() instead of STOP_NOIMPL() so the RSS feed page can load.

        * platform/win/TemporaryLinkStubs.cpp:
        (Slider::Slider):
        (Slider::sizeHint):
        (Slider::setValue):
        (Slider::setMaxValue):
        (Slider::setMinValue):
        (Slider::~Slider):
        (Slider::setFont):
        (Slider::value):

2006-11-07  Lou Amadio  <lamadio@apple.com>

        Reviewed by sfalken, adam

         Implemented Find banner, overlay, bouncy.
         plummed some find, search and marking in WebCore & WebKit
         Added SDC - a DC wrapper with knowledge of CG
         Added button element
         Ported AppKit's oval button drawing code
         Abstracted the high performance animations

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::imageFromRect):
        (WebCore::FrameWin::imageFromSelection):
        * bridge/win/FrameWin.h:
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/win/TemporaryLinkStubs.cpp:
        (Frame::setNeedsReapplyStyles):

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        Use m_frame instead of this, include the correct files.
        
2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        (I'm not doing this to get commit 11000)
        
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):
        It's m_frame, not frame. 
        
2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        It's FrameLoader, not FrameWin.
        
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameLoader::partClearedInBegin):

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        A blind attempt at fixing the build.
        
        * bridge/win/FrameWin.cpp:
        * loader/win/FrameLoaderWin.cpp:
        (WebCore::FrameWin::partClearedInBegin):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameLoader::restoreDocumentState):

2006-11-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        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.
        
        Fixed bug where Screen would query the default screen instead of the screen
        on which the active window was located. (The code is written in Klingon,
        but that's cool.)
        
        Implemented some missing screen functionality on Win.
        
        I can't fully verify this code because I can't load files without crashing
        in CFNetwork, but I exercised most of it with javascript: URLs and the
        debugger reported reasonable values.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ScreenWin.cpp: Added. Merged over from opensource tree.
        (WebCore::getWindow):
        (WebCore::getMonitorInfo):
        (WebCore::getDeviceInfo):
        (WebCore::Screen::depth):
        (WebCore::Screen::depthPerComponent):
        (WebCore::Screen::isMonochrome):
        (WebCore::Screen::rect):
        (WebCore::Screen::usableRect):

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

        Reviewed by Geoff.

        - moved loader code from Frame/FrameMac to FrameLoader

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/FrameWin.h:
        * loader/win/FrameLoaderWin.cpp: Added.
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::objectContentType):
        (WebCore::FrameLoader::createPlugin):
        (WebCore::FrameLoader::createFrame):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::setTitle):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::markMisspellings):
        (FrameWin::respondToChangedSelection):
        (FrameWin::clearUndoRedoOperations):
        (IconLoader::notifyIconChanged):
        (PolicyCheck::PolicyCheck):
        (PolicyCheck::clear):
        (PolicyCheck::call):
        (PolicyCheck::clearRequest):
        (FrameLoader::saveDocumentState):
        (FrameLoader::restoreDocumentState):
        (FrameLoader::partClearedInBegin):
        (FrameLoader::goBackOrForward):
        (FrameLoader::historyURL):
        (FrameLoader::canGoBackOrForward):
        (FrameLoader::getHistoryLength):
        (DocumentLoader::setupForReplaceByMIMEType):
        (ResourceLoader::cancel):
        (DocumentLoader::stopLoading):
        (DocumentLoader::setLoading):
        (DocumentLoader::updateLoading):
        (DocumentLoader::setFrame):
        (DocumentLoader::stopRecordingResponses):
        (DocumentLoader::isStopping):
        (DocumentLoader::setPrimaryLoadComplete):
        (DocumentLoader::finishedLoading):
        (DocumentLoader::URL):
        (DocumentLoader::isLoadingInAPISense):
        (DocumentLoader::frameLoader):
        (FrameLoader::overrideMediaType):
        (FrameLoader::redirectDataToPlugin):
        (FrameLoader::checkLoadCompleteForThisFrame):
        (FrameLoader::loadEmptyDocumentSynchronously):
        (FrameLoader::startLoading):
        (FrameLoader::referrer):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::userAgent):

2006-11-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Let the Frame client know when the window object is available.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::partClearedInBegin):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::unfocusWindow):
        (FrameWin::markMisspellings):
        (FrameWin::restoreDocumentState):

2006-11-07  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp: Remove no-longer-needed stub.

2006-11-07  Steve Falkenburg  <sfalken@apple.com>

        Fixes for B&I submission

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/merge-opensource.sh:

2006-11-06  Kevin McCullough  <kmccullough@apple.com>

        -Fix test fields accepting text.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/4778180>
        wikipedia.org crashes when loading
        
        * platform/win/GlyphMapWin.cpp:
        (WebCore::GlyphMap::fillPage):
        Don't call GetGlyphIndices on buffers larger than the page size. GetGlyphIndicies doesn't know anything about
        Unicode supplementary characters and will overwrite the local buffer if the passed-in buffer is bigger than  the page size.

2006-11-06  Anders Carlsson  <acarlsson@apple.com>

        Fork GlyphMapWin.cpp
        
        * platform/win/GlyphMapWin.cpp: Added.
        (WebCore::GlyphMap::fillPage):

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Hooked up the Chrome and Screen clients on Windows.
        
        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/PageWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize):
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Copy npfunctions.h to WebKitOutputDir.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-06  Steve Falkenburg  <sfalken@apple.com>

        Fix double-include of FormData.cpp/.h.

        * WebCore.vcproj/WebCore.vcproj:

2006-11-06  Maciej Stachowiak  <mjs@apple.com>
        
        - build fixes, adjusted for file move

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Steve and Anders.

        Add client() fucntion to FrameWin to return the FrameClient.

        * bridge/win/FrameWin.h:
        (WebCore::FrameWin::client):

2006-11-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * WebCore.vcproj/WebCore.vcproj:

2006-11-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build breaks

        * bridge/win/FrameWin.cpp:
        * bridge/win/PageWin.cpp:

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

        Reviewed by Maciej.

        * bridge/win/FrameWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected): Updated for change of const Event* to Event*.
        (WebCore::FrameWin::submitForm): Added Event* parameter.

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.vcproj/WebCore.vcproj: Added new files
        * platform/win/TemporaryLinkStubs.cpp: Removed unneeded link stubs

2006-11-03  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * config.h: Touched to cause re-build w/ SVG_SUPPORT enabled
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CachedResource::setResponse): Added

2006-11-03  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Removed DeprecatedRenderSelect and ListBox classes.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Remove SVGRenderAsText files from the project.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CachedResource::setPlatformResponse):

2006-11-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, Beth.

        Updated to use ChromeClient.
        
        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/PageWin.cpp:
        * loader/win/ResourceLoaderWin.cpp: Added.
        (WebCore::ResourceLoader::loadsBlocked):
        * platform/win/TemporaryLinkStubs.cpp:

2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        * WebCore.vcproj/WebCore.vcproj:
        Use the forked CursorWin.cpp
        
        * platform/win/CursorWin.cpp:
        (WebCore::moveCursor):
        Implement this.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Get rid of it here.
        
2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Add forked copy of CursorWin.cpp
        
        * platform/win/CursorWin.cpp: Added.

2006-11-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Adding SVG_SUPPORT to Boomer.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * kcanvas/device/quartz/KCanvasFilterQuartz.cpp: Added.
        (WebCore::KCanvasFilterQuartz::KCanvasFilterQuartz):
        (WebCore::KCanvasFilterQuartz::~KCanvasFilterQuartz):
        (WebCore::KCanvasFilterQuartz::prepareFilter):
        (WebCore::KCanvasFilterQuartz::applyFilter):
        (WebCore::KCanvasFilterQuartz::imageForName):
        (WebCore::KCanvasFilterQuartz::setImageForName):
        (WebCore::KCanvasFilterQuartz::setOutputImage):
        (WebCore::KCanvasFilterQuartz::inputImage):
        * platform/graphics/svg/cg/SVGResourceMaskerCg.cpp: Added.
        (WebCore::SVGResourceMasker::applyMask):

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

        Reviewed by Adam.

        Build fix from Sam Weinig's check-in. i.p in the PaintInfo is now 
        i.context

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):

2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createJavaAppletWidget):
        Ask the plugin database to create a java applet plugin.

        * platform/win/TemporaryLinkStubs.cpp:
        Remove FrameWin::createJavaAppletWidget.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Don't look for the Sun Java plugin anymore.

2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        Build fix.
        
2006-11-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Convert plugin code over to using ResourceResponse.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::didReceiveResponse):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Yet more B&I build fixes
        Another missing .h file from the vcproj

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Another fix for B&I submission
        (missing .h files from the WebCore vcproj prevents proper merging of OpenSource/Internal WebCore trees)

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Remove extra files I accidently added

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Build fixes for submission merge script

        * WebCore.vcproj/WebCore.vcproj:

2006-10-31  Adam Roben  <aroben@apple.com>

        Build fixes.

        * WebCore.vcproj/WebCore.vcproj: Add new platform/graphics directory to
        our include path, and copy headers from there for WebKit's benefit.
        * bridge/win/FrameWin.cpp: Update accessors of FrameLoadRequest.
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        * plugins/win/PluginViewWin.cpp: Ditto.
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h: Correct forward declaration of
        FrameLoadRequest.

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - remove BrowserExtension

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * platform/win/TemporaryLinkStubs.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-30  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        If there's no plug-in for a given mime type, or if the plug-in fails
        to initialize, draw the "missing plug-in" icon.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        If no plug-in can be found, create a null plugin view.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::paint):
        If the plugin hasn't been started, paint the missing plugin image.
        
        (WebCore::PluginViewWin::setNPWindowSize):
        Return early if the plugin hasn't been started.
        
        (WebCore::PluginViewWin::start):
        Return if the plugin couldn't be created.
        
        (WebCore::PluginViewWin::createNullPluginView):
        New function which just creates a plugin view and doesn't try to start its plugin
        (because there is none).
        
        (WebCore::PluginViewWin::PluginViewWin):
        New constructor for the null plugin view.
        
2006-10-31  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * WebCore.vcproj/WebCore.vcproj: Added new source files from the
        loader directory.

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - added ResourceResponse class and didReceiveResponse delegate call

        * WebCore.vcproj/WebCore.vcproj: Added new files.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest): Changed prototype to match
        new version.

2006-10-29  Darin Adler  <darin@apple.com>

        - update for the WebCore renames

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::windowScriptNPObject):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::load):
        (WebCore::PluginViewWin::bindingInstance):

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Darin.

        - renamed ResourceLoader to ResourceHandle (and same for related classes)

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        * platform/network/win/ResourceHandleWin.cpp: Added.
        (WebCore::):
        (WebCore::addToOutstandingJobs):
        (WebCore::lookupResourceHandle):
        (WebCore::ResourceHandleWndProc):
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::onRequestRedirected):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::initializeOffScreenResourceHandleWindow):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::startHTTPRequest):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):
        * platform/network/win/ResourceHandleWin.h: Added.
        * platform/network/win/ResourceLoaderWin.cpp: Removed.
        * platform/network/win/ResourceLoaderWin.h: Removed.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceHandle::assembleResponseHeaders):
        (WebCore::ResourceHandle::retrieveResponseEncoding):
        (IconLoader::receivedResponse):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginStreamWin.h:

2006-10-28  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Adding new HitTestResult.{cpp,h}
        files.

2006-10-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        <rdar://problem/4730678> Plug-ins should be able to open URLs

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4764502> PluginStreams should cancel their loader jobs on error

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::receivedAllData):
        Modify assertions. None of the above functions should be run after aborting the load.

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginPath):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Look for plugins in a plugins directory which is relative to the executable directory.
        
        (WebCore::PluginDatabaseWin::createPluginView):
        Use reverseFind instead of findRev here.
        
2006-10-26  Adam Roben  <aroben@apple.com>

        Reviewed by Beth.

        Fix: <rdar://problem/4799084> Text and dropdown button too close
        together in <select>s
        Fix: <rdar://problem/4800493> Popup menus should be positioned so that
        their text is horizontally aligned with the <select> control's text

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Switch alignment of LTR
        vs. RTL popups, and add padding to align the text.
        (WebCore::PopupMenu::paint): Add padding from the <select> control to
        align the text with the <select> control's text.
        * rendering/RenderThemeWin.cpp: Set svn:eol-style native.
        (WebCore::RenderThemeWin::systemFont): Clean up line endings.
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle): Add some extra
        padding between the dropdown button and text.
        (WebCore::RenderThemeWin::paintMenuListButton): Clean up code a bit.

2006-10-26  Adam Roben  <aroben@apple.com>

        Forgot to make the change to Release as well in my last checkin.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-26  Adam Roben  <aroben@apple.com>

        Rubberstamped by Steve.

        Add some missing '/d' flags to xcopy calls to only copy headers if
        they've been modified.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::drawLineForMisspellingOrBadGrammar):
        Build fix from Oliver.
        
2006-10-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Use FrameLoadRequest and ResourceRequest instead of passing around
        the individual components.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::destroyStream):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginRequestWin::PluginRequestWin):
        (WebCore::PluginRequestWin::frameLoadRequest):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::load):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h:

2006-10-26  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4794162> Implement type-ahead find for popup menus
        Fix: <rdar://problem/4800486> Pressing TAB while a popup is focused
        should close the popup and move selection in the page

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu): Don't cache the focused index.
        (WebCore::PopupMenu::focusedIndex): Always get the focused index from
        the HTMLSelectElement.
        (WebCore::PopupMenu::setFocusedIndex): Invalidate before calling
        valueChanged(), as this will change the result of focusedIndex().
        (WebCore::PopupMenu::scrollToRevealSelection):
        (WebCore::PopupMenu::updateFromElement): New method to repaint/rescroll
        the popup.
        (WebCore::PopupWndProc): Send TAB keypresses and printable characters
        back to the WebView for handling. Also omove handling of Return/Escape
        into the WM_CHAR event, as this is recommended by MSDN.

2006-10-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Checked in Luke's CG printing code

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::setupRootForPrinting): Added
        (WebCore::FrameWin::computePageRects): Added
        * bridge/win/FrameWin.h: Added setupRootForPrinting, computePageRects

2006-10-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - updated for ResourceRequest changes.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::setRequestHeaders):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::loadURL):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h:

2006-10-24  Steve Falkenburg  <sfalken@apple.com>

        Build fix for official builds

        * WebCore.vcproj/WebCore.make:

2006-10-24  Steve Falkenburg  <sfalken@apple.com>

        Fix build so it can be submitted.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/merge-opensource.sh:
        * rendering/RenderThemeWin.cpp:

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Rolling back in, now fixed:
        
        Nixed a few more redundant loading functions in Frame.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::lastEventIsMouseUp):

2006-10-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - update for ResourceLoader API changes

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ServeSynchronousRequest):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginStreamWin.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Rolling out my last change because it broke the world.
        
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::openURL):

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4760429> Crash in PluginStreamWin::~PluginStreamWin when 
        navigating away from mcdonalds.com
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::fetchInfo):
        Use fastFree instead of free when memory is allocated by fastMalloc. 
        If the plugin name or description is null, don't try to fetch info about the plugin.
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::setRequestHeaders):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        * plugins/win/PluginStreamWin.h:
        Change type of header map to ResourceRequest::HTTPHeaderMap. When a plugin is stopped,
        set its state to StreamStopped.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::loadURL):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginViewWin::handlePost):
        * plugins/win/PluginViewWin.h:
        Update for type changes to the header map.

2006-10-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Nixed a few more redundant loading functions in Frame.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::lastEventIsMouseUp):

2006-10-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Bradee.

        Removed methods from BrowserExtension.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::canPaste):
        (FrameWin::canGoBackOrForward):
        (FrameWin::goBackOrForward):
        (FrameWin::getHistoryLength):
        (FrameWin::historyURL):
        (Page::canRunModal):
        (Page::canRunModalNow):
        (Page::runModal):
        (BrowserExtensionWin::BrowserExtensionWin):

2006-10-23  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4796994> Styled <select>s should still use Windows
        theme

        The fix is to do most of our drawing for menulists in
        RenderThemeWin::paintMenuListButton (which is called for styled
        <select>s), and then do any extra drawing for unstyled <select>s in
        RenderThemeWin::paintMenuList.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::getThemeData): Case for
        MenulistButtonAppearance should be the same as MenulistAppearance.
        (WebCore::RenderThemeWin::paintMenuList): Draw the border, then defer
        to paintMenuListButton to handle the rest of painting.
        (WebCore::RenderThemeWin::adjustMenuListStyle): Reset the border so we
        can draw our own, then defer to adjustMenuListStyle.
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle): Code moved from
        adjustMenuListStyle, less the call to resetBorder().
        (WebCore::RenderThemeWin::paintMenuListButton): Code moved from
        paintMenuList, less the border-drawing code.
        * rendering/RenderThemeWin.h:

2006-10-23  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4786759> PageUp/PageDown/Home/End don't work in
        <select> menus

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setFocusedIndex): Only call ::UpdateWindow if we
        didn't scroll, because scrolling will do the update for us.
        (WebCore::PopupMenu::focusFirst): New method.
        (WebCore::PopupMenu::focusLast): New method.
        (WebCore::PopupMenu::down): Add a parameter to specify how far we
        should try to move the selection.
        (WebCore::PopupMenu::up): Ditto.
        (WebCore::PopupMenu::invalidateItem): Cleanup code by using IntRect
        instead of RECT.
        (WebCore::PopupMenu::scrollTo): Return a boolean to say whether
        scrolling actually happened.
        (WebCore::PopupMenu::scrollToRevealSelection): Ditto.
        (WebCore::PopupWndProc): Handle PageUp/PageDown/Home/End.

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Copy headers from new platform/network
        directory and subdirectories.

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * plugins/win/PluginStreamWin.h: Rename methods to match Maciej's
        changes.

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Copied AdditionalIncludeDirectories
        from Release to All Configurations.

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber-stamped by Anders.

        - fixed for ResourceLoader refactoring.

        * platform/network/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::onRequestComplete):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::didReceiveData):
        (WebCore::PluginStreamWin::didFinishLoading):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest):

2006-10-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - updated for new ResourceLoader file locations.

        * WebCore.vcproj/WebCore.vcproj: Updated file paths.
        * platform/win/ResourceLoaderWin.cpp: Moved to platform/network/win
        * platform/win/ResourceLoaderWin.h: ditto

2006-10-22  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix some crashes caused by the <select> element being detached while
        the popup is open.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupWndProc):

2006-10-21  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fix: <rdar://problem/4794151> Popup should scroll to reveal selected
        item, not just one line at a time
        Fix: <rdar://problem/4794229> Popup hot-tracking should not change text
        in <select> control

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Cleaned up code by
        translating into screen coordinates right away.
        (WebCore::PopupMenu::setFocusedIndex): Added parameter to specify
        whether the text in the <select> control should be updated.
        (WebCore::PopupMenu::scrollTo): Extracted scrolling code from
        PopupWndProc to here.
        (WebCore::PopupMenu::scrollToRevealSelection): New method.
        (WebCore::PopupWndProc): Use scrollToRevealSelection() instead of
        manually scrolling one line at a time. Fixed a bug in detecting a
        mouse drag.  Pass in HDC from ::BeginPaint to PopupMenu::paint.

2006-10-21  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebCore.vcproj/WebCore.vcproj: Add new DeleteButton* files to
        project.

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.

        Turn on CFNetwork

        * config.h:

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.

        <rdar://4778502> Boomer userAgent string needs to support pulling in proper build #, plus customization

        Useragent/versioning changes
        
        Stamp auto-generated version number into DLL and into user agent.
        Generate a real user agent string instead of hardcoding one.
        Support client supplying an application name for the user agent.
        Support client overriding the useragent (for debug menu).
        Support per-URL user agents (not used at least for now).

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::userAgent): Now calls userAgentForURL
        (WebCore::FrameWin::originalRequestURL): Implemented
        * bridge/win/FrameWin.h: changed userAgent to userAgentForURL, added originalRequestURL
        * platform/win/TemporaryLinkStubs.cpp: Removed originalRequestURL

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

        Reviewed by Steve.

        Adding knowledge of the Editor and EditorClient to Windows WebCore

        No layout tests needed
        
        * WebCore.vcproj/WebCore.vcproj:
        added Sound.h, SoundWin.cpp, EditorClient.h, Editor.h&.cpp

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        added client to constructor params

        * bridge/win/FrameWin.h:
        added client to constructor params

        * platform/win/SoundWin.cpp: Added.
        (WebCore::systemBeep):
        Calls windows system beep

2006-10-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        <rdar://4771958> Holding down Ctrl when a redirect happens opens the redirected page in a new tab
        
        Send triggering event to url selection.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected): Add triggeringEvent parameter
        * bridge/win/FrameWin.h: Add triggeringEvent parameter
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Call GetKeyState instead of GetAsyncKeyState
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Call GetKeyState instead of GetAsyncKeyState

2006-10-19  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        This is a partial reimplementation of PopupMenu for Windows. The old
        implementation used the Win32 ListBox control, but as we needed to
        customize the behavior more and more it began to make sense to roll our
        own popup from scratch. That is what this patch accomplishes. And...

        Fix: <rdar://problem/4709416>
        Implement mouse hot-tracking for <select> menus
        Fix: <rdar://problem/4786763>
        Can select disabled options in <select> menus using mouse
        (It was easier to implement these than to leave them broken.)

        * WebCore.vcproj/WebCore.vcproj: Removed PopupMenu.cpp from project.
        * platform/win/PopupMenuWin.cpp: Carnage. PopupMenu has gained a slew
        of new private instance variables to maintain the window state.
        m_container has been removed as it is no longer needed.
        (WebCore::PopupMenu::PopupMenu): Initialize new variables.
        (WebCore::PopupMenu::~PopupMenu): Clean up new variables.
        (WebCore::PopupMenu::show): Now that we don't have m_container, m_popup
        gets the WS_BORDER and WS_POPUP styles. Also moved code to animate the
        window out of the old PopupMenu::setPositionAndSize() into this method
        since it fits the purpose of this method better.
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::calculatePositionAndSize): Renamed from
        setPositionAndSize(), as this method no longer actually sets the window
        position and size, just calculates it. It also now makes sure the
        window is sized to never show partial items, and takes into account the
        window's border when calculating the size.
        (WebCore::PopupMenu::setFocusedIndex): New method to handle setting the
        selected index of the <select> and highlighting the item in the popup menu.
        (WebCore::PopupMenu::down): Use setSelectedIndex() to do the dirty work.
        (WebCore::PopupMenu::up): Ditto.
        (WebCore::PopupMenu::invalidateItem): New method to invalidate the
        rectangle in the popup menu for this item.
        (WebCore::PopupMenu::clientRect): New method to calculate an IntRect
        for the client area of the window.
        (WebCore::PopupMenu::incrementWheelDelta): New method to add the wheel
        delta obtained from a WM_MOUSEWHEEL message to any pre-existing delta.
        (WebCore::PopupMenu::reduceWheelDelta): New method to reduce the
        pre-existing wheel delta by a given amount towards 0.
        (WebCore::PopupMenu::paint): Does the work that PopupMenu::drawItem
        did, but for every item contained within the damageRect. Can also paint
        into a passed-in HDC (needed for window animations and smooth-scrolling).
        (WebCore::registerPopup): Changed a void* to a PopupMenu*, since that's
        what it really is.
        (WebCore::PopupWndProc): Added code to handle all the messages any
        self-respecting window would handle, and removed messages only relevant
        to the ListBox control.
        * platform/win/TemporaryLinkStubs.cpp: Removed unneeded #include.

2006-10-19  Adam Roben  <aroben@apple.com>

        Rubberstamped by Maciej.

        Build fix.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm):

2006-10-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Steve.

        - speculative build fix for Windows for my recent changes.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm):

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

       * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ResourceLoader::retrieveResponseEncoding):
        Build fix.

2006-10-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - remove remnants of KXMLCore name.

        * WebCore.vcproj/WebCore.vcproj:
        * config.h:

2006-10-18  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::historyURL):
        (BrowserExtensionWin::BrowserExtensionWin):

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix

        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::createNewWindow):

2006-10-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Added WindowFeatures.h to the project.

        * WebCore.vcproj/WebCore.vcproj:

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Turn off a very noisy warning (unknown pragma) caused by an Interfacer include

        * WebCore.vcproj/WebCore.vcproj:

2006-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Fixed alpha in favicons, added composite operation conversion
        for cg
        
        rdar://problem/4758934

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/win/ImageWin.cpp:
        (WebCore::Image::getHBITMAP):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::drawLineForMisspelling):

2006-10-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.

        Added HTMLFrameElementBase to the project.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-10-17  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        A couple of cleanups that Geoff suggested after my last checkin.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setPositionAndSize):

2006-10-17  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix: <rdar://problem/4772506> <select> popup menu should not clip items
        when width: is set.

        Popups are now sized and positioned as follows:
        1. Popups are at least as wide as the <select> control on the page.
        2. Popups for LTR <select>s are right-aligned with the <select>, popups
           for RTL <select>s are left-aligned. This means the scrollbar in the
           popup will always line up with the dropdown button in the <select>.
        3. Popups try to be wide enough to fit their widest item, but will
           shrink to ensure they don't extend off the screen.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::setPositionAndSize):

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

        Reviewed by Kevin.

        Fix: <rdar://problem/4758923> <select> menu text doesn't draw right
        aligned on right-to-left sites

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show): Pass appropriate styles to CreateWindowEx
        so that we get a left-aligned scrollbar in RTL popups.
        (WebCore::PopupMenu::drawItem): Set text to be right-aligned and draw
        RTL when direction:rtl is set.
        (WebCore::PopupWndProc): Add 1px of vertical height to each menu item
        to match RenderListBox.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Draw the dropdown button on
        the left when in RTL.
        (WebCore::RenderThemeWin::adjustMenuListStyle): Set padding to allow
        for the dropdown button being on the left in RTL.

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

        Reviewed by John.

        Forgot to save these changes John suggested before checking in.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::drawItem):

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

        Reviewed by John.

        Fix: <rdar://problem/4709480> Implement option groups
        Fix: <rdar://problem/4785693> Use CG to draw popup menu items
        Fix: <rdar://problem/4709487> Implement separators in <select> popups
        Fix: <rdar://problem/4709358> Move CreateWindowEx calls out of PopupMenu constructor

        * platform/win/PopupMenuWin.cpp: Added some now-required #includes,
        moved some constants into the WebCore namespace.
        (WebCore::PopupMenu::PopupMenu): Moved CreateWindowEx calls into PopupMenu::show().
        (WebCore::PopupMenu::show): Pass LBS_OWNERDRAWFIXED to CreateWindowEx
        to assume responsibility for drawing menu itesm. Removed call to set
        the font on the popup menu, as CG will take care of this.
        (WebCore::addString): Added to help with the PopupMenu::add* methods.
        (WebCore::PopupMenu::addOption): Use addString.
        (WebCore::PopupMenu::addGroupLabel): Ditto, and moved from TemporaryLinkStubs.cpp.
        (WebCore::PopupMenu::addSeparator): Ditto.
        (WebCore::PopupMenu::down): Skip items that are not enabled <option>
        elements, and tell the popup menu to set the selection to the element
        we end up on.
        (WebCore::PopupMenu::up): Ditto.
        (WebCore::PopupMenu::drawItem): Added. This is the method that is
        called to draw each item in the menu.
        (WebCore::PopupWndProc): Add cases for WM_MEASUREITEM and WM_DRAWITEM
        messages (required now that we're drawing the menu items ourselves). In
        the cases for arrow key presses, return -2 to signify that we're
        handling all aspects of changing the selection.
        * platform/win/TemporaryLinkStubs.cpp: Removed PopupMenu::addSeparator
        and PopupMenu::addGroupLabel.

2006-10-15  Adam Roben  <aroben@apple.com>

        Build fix.

        Merge OpenSource r17056 to TemporaryLinkStubs.cpp.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::CacheObjectExpiresTime):
        (WebCore::ResponseIsMultipart):
        (WebCore::ResponseMIMEType):
        (WebCore::IsResponseURLEqualToURL):
        (WebCore::ResponseURL):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::setAllData):

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.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::createNewWindow):
        (IconLoader::notifyIconChanged):

2006-10-13  Dave Hyatt  <hyatt@apple.com>

        Make form controls work inside transparency layers by having
        them draw into bitmap that is then turned into a CGImageRef
        and blended into the CG transparency layer.

        Reviewed by aroben

        * platform/cg/GraphicsContextPlatformPrivate.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer):
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        * platform/win/IconWin.cpp:
        (WebCore::Icon::paint):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::drawControl):

2006-10-12  Dave Hyatt  <hyatt@apple.com>

        Voting Cairo off the island

        or

        Jeff Probst: "Cairo, the tribe has spoken.  It's time for you
        to go."

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp:
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/win/GraphicsContextWin.cpp:
        * platform/win/IconWin.cpp:
        * platform/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContextPlatformPrivate::clip):
        (GraphicsContext::drawLineForMisspelling):

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

        RS by Geoff.

        Renamed uploadControlDetaching to disconnectUploadControl.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::disconnectUploadControl):

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

        Reviewed by Alice. 

        Fixed a small oversight from the last checkin.  The populate method was calling itself, 
        instead of the newly renamed addItems method.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::populate):

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.

        Also fixes <rdar://problem/4710456> Get rid of RenderPopupMenu{Win,Mac}
        classes.

        * WebCore.vcproj/WebCore.vcproj: Move files within project.
        * platform/win/PopupMenuWin.cpp: Moved from
        rendering/RenderPopupMenuWin.cpp. Rename RenderPopupMenuWin to
        PopupMenu.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::setPositionAndSize):
        (WebCore::PopupMenu::addOption):
        (WebCore::PopupMenu::focusedIndex): New method to get the index of the
        element that is currently highlighted. This won't always be the same as
        the selectedIndex because of mouse hot-tracking.
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::registerPopup):
        (WebCore::PopupWndProc): Use focusedIndex() instead of sending messages
        to the popup window.
        * platform/win/TemporaryLinkStubs.cpp: Rename RenderPopupMenuWin to PopupMenu.
        (PopupMenu::addSeparator):
        (PopupMenu::addGroupLabel):
        * rendering/RenderPopupMenuWin.cpp: Removed.
        * rendering/RenderPopupMenuWin.h: Removed.
        * rendering/RenderThemeWin.cpp: Get rid of createPopupMenu() method.
        * rendering/RenderThemeWin.h: Ditto.

2006-10-12  Dave Hyatt  <hyatt@apple.com>

        Implement full-blown double buffering (keeping a bitmap in the WebView that holds the backing store for it).
        
        Reviewed by mjs

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::addToDirtyRegion):
        (WebCore::FrameWin::scrollBackingStore):
        (WebCore::FrameWin::updateBackingStore):
        * bridge/win/FrameWin.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::windowClipRect):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollViewPrivate::windowClipRect):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::windowResizerRect):
        (WebCore::ScrollView::addToDirtyRegion):
        (WebCore::ScrollView::scrollBackingStore):
        (WebCore::ScrollView::updateBackingStore):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::suppressInvalidation):
        (WebCore::Widget::invalidateRect):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::windowClipRect):

2006-10-11  Adam Roben  <aroben@apple.com>

        Rubberstamped by Brady.

        Clean up logic in Icon::newIconForFile.

        * platform/win/IconWin.cpp:
        (WebCore::Icon::newIconForFile): Error case should return early.

2006-10-11  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fixes <rdar://problem/4777719>
        Icons don't paint with CG

        * platform/win/IconWin.cpp:
        (WebCore::Icon::paint): Remove Cairo-specific code now that we have
        GraphicsContextWin.

2006-10-11  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Clean up FileChooser::create, Icon::create.

        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::create): Just return a FileChooser* and let the
        implicit cast happen.
        * platform/win/IconWin.cpp:
        (WebCore::Icon::newIconForFile): Ditto for Icon*.

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

        Reviewed by Oliver.

        Fixes <rdar://problem/4731316>
        Crash when <input type="file"> element removed while file chooser is open

        * platform/win/FileChooserWin.cpp: Make FileChooser ref-counted.
        (WebCore::FileChooser::create):
        (WebCore::FileChooser::openFileChooser): Add a protector RefPtr around
        the call to GetOpenFileName so we don't get deleted while the file
        chooser window is open.

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

        Reviewed by Anders.

        Fixes <rdar://problem/4772428>
        <select> popup menus positioned incorrectly within frames

        * rendering/RenderPopupMenuWin.cpp:
        (WebCore::RenderPopupMenuWin::setPositionAndSize): Use
        contentsToWindow() instead of scrollOffset() to correct menu location.

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

        Reviewed by Adele.

        Fixes <rdar://problem/4763246>
        Using arrow keys in <select> popup fires onChange event

        Also updates text shown in <select> element on page when using arrow
        keys to change selection within the popup menu, and makes onChange fire
        in the same cases as Firefox/IE.

        * rendering/RenderPopupMenuWin.cpp:
        (WebCore::RenderPopupMenuWin::down): Update text of the <select>
        control. Change call to valueChanged() so that onChange doesn't fire.
        (WebCore::RenderPopupMenuWin::up): Ditto.
        (WebCore::PopupWndProc): Don't fire onChange anytime selection changes.
        Fire onChange when pressing Enter

2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Fix <rdar://problem/4756255>
        PDF/Acrobat Reader plugin don't work
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::getObjectInstanceForWidget):
        (WebCore::FrameWin::getEmbedInstanceForWidget):
        Implement these, getting the instance from the plugin view.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Remove functions that are now implemented.
        
        * plugins/win/PlugInInfoStoreWin.cpp:
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        Implement this, returning whether we a plugin exists for a given mime type.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::parseVersionString):
        (WebCore::compareVersions):
        New functions for handling versions.
        
        (WebCore::addMozillaPluginPaths):
        (WebCore::addWindowsMediaPlayerPluginPath):
        (WebCore::addQuickTimePluginPath):
        (WebCore::addJavaPluginPath):
        (WebCore::addAdobeAcrobatPluginPath):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Factor out checks into separate functions, add checks for Java and Adobe Acrobat.

        (WebCore::PluginDatabaseWin::isMIMETypeRegistered):
        Handle null MIME types.
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Add some missing functions. Unload the library if the load failed.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        Uncomment code for getting the element object.
        
        (WebCore::PluginViewWin::bindingInstance):
        * plugins/win/PluginViewWin.h:
        New function which fetches the plugin NPObject and wraps it in an instance.

2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/4773320>
        Safari didn't pick up quicktime that was already installed
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        
2006-10-09  Anders Carlsson  <acarlsson@apple.com>

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::createJavaAppletWidget):
        Fix build.

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

        Reviewed by Adele.

        Fixes <rdar://problem/4773142>
        Crash in Settings::mediumFontSize() on ebay.com

        Call cancelAndClear() from ~FrameWin (just like Mac does) so we don't
        end up calling the Frame::saveDocumentState, which is pure virtual.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):

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

        Reviewed by Maciej.

        Port of OpenSource r16526, r16528

        Break up ResourceLoaderWndProc into callback functions.

        * platform/win/ResourceLoaderWin.cpp: Fix up #includes
        (WebCore::): Remove loadStatusMessage, struct JobLoadStatus, add
        messageHandlers array.
        (WebCore::ResourceLoaderWndProc): Split handling of different messages
        into callbacks.
        (WebCore::ResourceLoader::onHandleCreated): New callback.
        (WebCore::ResourceLoader::onRequestRedirected): New callback.
        (WebCore::ResourceLoader::onRequestComplete): New callback.
        (WebCore::initializeOffScreenResourceLoaderWindow): No need to register
        loadStatusMessage anymore.
        (WebCore::transferJobStatusCallback): Change how information is passed
        into ResourceLoaderWndProc.

2006-10-08  Dave Hyatt  <hyatt@apple.com>

        Add support for the Win2k/Classic theme for all controls.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::buttonTheme):
        (WebCore::RenderThemeWin::textFieldTheme):
        (WebCore::RenderThemeWin::menuListTheme):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::getClassicThemeData):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::m_state):

2006-10-07  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Fix <rdar://4772205> Regression (r10623): WinInet loader doesn't ever write to the cache.        

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc): Apply POST related flags only for posts.
        (WebCore::ResourceLoader::startHTTPRequest): Don't add no-cache-write flag to non-post transactions.

2006-10-07  Dave Hyatt  <hyatt@apple.com>

        Add code to paint the Windows 2000 and "Windows Classic" theme look for scrollbars.

        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):

2006-10-07  Dave Hyatt  <hyatt@apple.com>

        Make sure frames and iframes honor scrolling="no" and
        margins.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::createFrame):

2006-10-07  Dave Hyatt  <hyatt@apple.com>

        Fix the resizer rect so that it is in the ScrollView's coordinate space and not in the document's coordinate space.
        (Fixes all the layout errors with the scrollbar overlapping the resizer.)
        
        Fill scroll corners with white, since it matches Mac (and our chosen resizer look) and looks nicer anyway.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Make sure to update plugin clip regions when scrollbars come and go on a scrollview.
       
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Revise the cached clip rect so that it is in the HWND's coordinate space.  This way SetWindowRgn
        doesn't get wastefully called when the plugin is scrolled.
       
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Implement flawless clipping of windowed plugins, including
        respecting nested frames, CSS overflow and CSS clip.  (This
        puts Boomer way ahead of Mac as far as plugin clipping is
        concerned).
        
        Implement support for correct blitting of scrolled subframes,
        even when clipped by enclosing scrollviews.

        Fix a crash caused by focused children not being cleaned up
        when they are removed from a scrollview.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::geometryChanged):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::updateHwnd):
        (WebCore::PluginViewWin::windowClipRect):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::geometryChanged):
        * plugins/win/PluginViewWin.h:

2006-10-06  Geoffrey Garen  <ggaren@apple.com>

        Fixed <rdar://4768789> Crash on ebay.com in Frame::didOpenURL
        
        The issue was a resource loader making a callback to a
        frame after the frame had been destroyed. This doesn't happen on Mac
        because Mac WebKit cancels all loads before tearing down frames.
        
        The solution is to add a callback to Win WebKit to allow a frame
        to cancel its main resource load. This is a temporary work-around.
        It is temporary because it doesn't address pending subresource loads.
        The long-term solution we anticipate is to have a legitimate loader
        inside WebCore.

        * ChangeLog:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/FrameWin.h:

2006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Lou.

        Resizer fixes.
        We now properly invalidate and draw overlapping contents or opaque.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::resizerOverlapsContent):

2006-10-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        Add (commented out) WMP plugin check.

2006-10-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady and Geoff.

        <rdar://problems/4769023>
        Crash on cnettv.com - PluginStreamWin::receivedResponse
        
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        If the Content-Type header is missing, try to figure o ut the content type
        from the file extension. Failing that, just use "application/octet-stream".

2006-10-06  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Some loader improvements, courtesy of Steve.

        Functionally, the improvements are these:
        1. Support HTTP Authentication
        2. Respect WinInet errors better

        There are also some general code cleanups, like extracting the creation
        of an HTTP request into its own method.

        * platform/win/ResourceLoaderWin.cpp: Add dwError field to
        JobLoadStatus to store WinInet error codes. Also removed the
        globalInternetHandle() function as the global HINTERNET is now only
        needed within startHTTPRequest.
        (WebCore::ResourceLoaderWndProc): Respect error codes and add HTTP
        Authentication support. Also, process HTTP status codes as ints instead
        of strings.
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal): Cleanup
        m_formData
        (WebCore::transferJobStatusCallback): Cleanup the code, and set
        dwError.
        (WebCore::ResourceLoader::startHTTPRequest): New method to start a new
        HTTP request.
        (WebCore::ResourceLoader::start): Restructure code.

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Fix the plugins on cnn.com.  Don't let the scroll view move child plugins around if it hasn't even been parented yet.
        
        Fix an assert in widget destructors caused by not unparenting a ScrollView's scrollbars in its destructor.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::~ScrollViewPrivate):
        (WebCore::ScrollView::setFrameGeometry):

2006-10-06  Dave Hyatt  <hyatt@apple.com>

        Make sure that plugin windows get properly moved if an ancestor scrollview is shifted without changing its size (meaning
        that layout doesn't get called on the scrollview to update the widget positions).
        
        Fixes the plugins on osnews.com.
        
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::setFrameGeometry):

2006-10-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Scrollbars now dodge resizing gripper.

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::windowResizerRect): added.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::windowResizerRect): added.
        * bridge/win/FrameWin.h:
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollbars): Scrollbars now dodge resizing gripper.

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Fix a bug where scrollbars would incorrectly show up for iframes when they weren't needed.
        Change the flow of control to be more like Mac.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::setFrameGeometry):

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Fix clipping and transforms by making sure to propagate them as they happen on the CGContext over into the HDC.
        
        * platform/cg/GraphicsContextPlatformPrivate.h:
        * platform/win/GraphicsContextWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContextPlatformPrivate::clip):

2006-10-05  Geoffrey Garen  <ggaren@apple.com>

        build fix.
        
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::~Widget):
        (WebCore::Widget::setParent):
        (WebCore::Widget::parent):
        (WebCore::Widget::removeFromParent):

2006-10-05  David Hyatt  <hyatt@apple.com>

        Stub out GraphicsContextPlatformPrivate methods so that the HDC can
        be updated when clips/transforms are applied.

        Reviewed by darin

        * 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):

2006-10-05  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::BrowserExtensionWin): Change Frame* to FrameWin*

2006-10-05  Adam Roben  <aroben@apple.com>

        Build fix. Remove RenderImageButton.{h,cpp}.

        * WebCore.vcproj/WebCore.vcproj:

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.

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h:
        (WebCore::):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        (WebCore::PlatformScrollbar::~PlatformScrollbar):
        (WebCore::PlatformScrollbar::updateThumbPosition):
        (WebCore::PlatformScrollbar::updateThumbProportion):
        (WebCore::PlatformScrollbar::invalidateTrack):
        (WebCore::PlatformScrollbar::invalidatePart):
        (WebCore::PlatformScrollbar::width):
        (WebCore::PlatformScrollbar::height):
        (WebCore::PlatformScrollbar::setRect):
        (WebCore::PlatformScrollbar::setEnabled):
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::backButtonRect):
        (WebCore::PlatformScrollbar::forwardButtonRect):
        (WebCore::PlatformScrollbar::trackRect):
        (WebCore::PlatformScrollbar::thumbRect):
        (WebCore::PlatformScrollbar::gripperRect):
        (WebCore::PlatformScrollbar::splitTrack):
        (WebCore::PlatformScrollbar::thumbPosition):
        (WebCore::PlatformScrollbar::thumbLength):
        (WebCore::PlatformScrollbar::trackLength):
        (WebCore::PlatformScrollbar::paintButton):
        (WebCore::PlatformScrollbar::paintTrack):
        (WebCore::PlatformScrollbar::paintThumb):
        (WebCore::PlatformScrollbar::paintGripper):
        (WebCore::PlatformScrollbar::hitTest):
        (WebCore::PlatformScrollbar::handleMouseMoveEvent):
        (WebCore::PlatformScrollbar::handleMouseOutEvent):
        (WebCore::PlatformScrollbar::handleMousePressEvent):
        (WebCore::PlatformScrollbar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollbar::startTimerIfNeeded):
        (WebCore::PlatformScrollbar::stopTimerIfNeeded):
        (WebCore::PlatformScrollbar::autoscrollPressedPart):
        (WebCore::PlatformScrollbar::autoscrollTimerFired):
        (WebCore::PlatformScrollbar::pressedPartScrollDirection):
        (WebCore::PlatformScrollbar::pressedPartScrollGranularity):
        (WebCore::PlatformScrollbar::thumbUnderMouse):
        (WebCore::PlatformScrollbar::themeChanged):
        (WebCore::PlatformScrollbar::horizontalScrollbarHeight):
        (WebCore::PlatformScrollbar::verticalScrollbarWidth):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollbar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (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):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::themeChanged):

2006-10-05  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fixes <rdar://problem/4757387>
        Unable to sign on to my.yahoo.com

        This patch fixes a number of bugs that all resulted in not being able
        to log on to many websites. The problems were that we weren't allowing
        redirects between HTTP and HTTPS sites and weren't correctly handling
        redirects from POST requests to GET requests.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::globalInternetHandle): Move internetHandle and callbackHandle
        into file scope, and add this function to initialize them.
        (WebCore::logLastError): Add this debug logging function to give more
        readable WinInet error messages.
        (WebCore::ResourceLoaderWndProc): The most substantial change here is
        to allow redirects from POST to GET to function correctly. To do this
        we have to create a new HINTERNET for the GET. We also have to be sure
        not to try to read from our now-invalid handles after the redirect.
        (WebCore::transferJobStatusCallback): Rename timerId to jobId, since
        that's what it is.
        (WebCore::ResourceLoader::start): Call new static initializer, and pass
        flags to allow HTTP<->HTTPS redirects. Also change a few delete calls
        to kill().

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.

        In addition, keep it ref'd across all of ResourceLoaderWndProc
        to avoid sending messages to jobs that get deleted partway.

        This fixes <rdar://problem/4766859> Crash in ResourceLoaderWndProc - line 232 at televisionwithoutpity.com, washingtonpost.com

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::ResourceLoader::start):
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        * plugins/win/PluginStreamWin.h:

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Make key events work with iframes.  Implement scrolling keyboard behavior.  Fix a bug with mouse wheeling that
        made it fail on iframes nested within iframes.
        
        Reviewed by mjs

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passWheelEventToSubframe):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scroll):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::capturingMouse):
        (WebCore::Widget::setCapturingMouse):
        (WebCore::Widget::capturingTarget):
        (WebCore::Widget::setCapturingChild):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::clearFocus):
        (WebCore::Widget::setFocused):
        (WebCore::Widget::focusedTarget):
        (WebCore::Widget::focusedChild):
        (WebCore::Widget::setFocusedChild):
        (WebCore::Widget::clearFocusFromDescendants):

2006-10-05  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej and Tim H.

        Fixes <rdar://problem/4760991>
        Flash content doesn't go away when navigating to a new page

        Actually destroy subframes when detaching.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::frameDetached): 
        * bridge/win/FrameWin.h:

2006-10-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/4762998>
        REGRESSION: dragging to select text does not work
        
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Set the correct button for WM_MOUSEMOVE events.

2006-10-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        rdar://problem/4757081
        Crashes/hangs when using Flash 8 plugin (Flash 9 works MUCH better)
        
        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::startStream):
        Encode javascript URLs before passing them to the plugin.

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * platform/win/NotImplemented.h: Changed implementation to use Assertions.h.
        Also fixed both macros to be single-statement macros.

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/4764253>
          frame targeting not implemented.

        * bridge/win/FrameWin.h: Added new window boolean to openURL. Also changed
        type from DeprecatedString to String.
        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::urlSelected): Added logic
        to do frame targeting.

        * platform/win/BString.h: Added. Convenience for working with
        BSTR and handling allocation/free.
        * platform/win/BString.cpp: Added.
        * WebCore.vcproj/WebCore.vcproj: Added new files.

2006-10-03  Dave Hyatt  <hyatt@apple.com>

        Land the new ScrollView.
        
        Reviewed by anders

        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::thumbLength):
        (WebCore::PlatformScrollBar::hitTest):
        (WebCore::PlatformScrollBar::horizontalScrollBarHeight):
        (WebCore::PlatformScrollBar::verticalScrollBarWidth):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollViewPrivate::setHasHorizontalScrollBar):
        (WebCore::ScrollView::ScrollViewPrivate::setHasVerticalScrollBar):
        (WebCore::ScrollView::ScrollViewPrivate::valueChanged):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::scrollPointRecursively):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):
        (WebCore::ScrollView::suppressScrollBars):
        (WebCore::ScrollView::setHScrollBarMode):
        (WebCore::ScrollView::setVScrollBarMode):
        (WebCore::ScrollView::setScrollBarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::updateScrollBars):
        (WebCore::ScrollView::scrollbarUnderMouse):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::scrolled):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertChildToSelf):
        (WebCore::Widget::convertSelfToChild):
        (WebCore::Widget::setSuppressInvalidation):
        (WebCore::Widget::invalidateRect):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::scrolled):
        * plugins/win/PluginViewWin.h:

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Improvements to error handling in PluginStreamWin.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::deliverData): Fail quietly if called after
        termination (due to bad error handling in ResourceLoaderWin), ASSERT if
        called before stream has been started.
        (WebCore::PluginStreamWin::receivedData): Ditto.
        (WebCore::PluginStreamWin::receivedAllData): Ditto.

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fixes <rdar://problem/4760963>
        Failed ASSERT in PluginStreamWin::~PluginStreamWin at espn.com

        We now store the state of a stream as a tri-state enum in
        m_streamState. This allows us to differentiate between before and after the
        stream has been started.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin): Initialize members of
        m_stream struct individually.
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::deliverData): Return early if the stream
        isn't started.
        (WebCore::PluginStreamWin::receivedData): Ditto.
        (WebCore::PluginStreamWin::receivedAllData): Ditto.
        * plugins/win/PluginStreamWin.h:
        (WebCore::): Add PluginStreamState enum.

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Fixes <rdar://problem/4603342>
        Keyboard navigability

        Implement tabbing between form elements (in the single-frame case).

        * bridge/win/FrameWin.cpp: Add methods to determine tabbing
        preferences.
        (WebCore::FrameWin::tabsToLinks):
        (WebCore::FrameWin::tabsToAllControls):
        * bridge/win/FrameWin.h: Add tabsToLinks() to FrameWinClient
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollPointRecursively): Implemented for
        single-frame case.
        * platform/win/TemporaryLinkStubs.cpp: Remove stub for now-implemented
        ScrollView::scrollPointsRecursively

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

        Reviewed by Maciej.

        Fixes <rdar://problem/4743497>
        Can't check checkboxes

        Let Windows determine which mouse button is pressed.

        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Use message
        parameter to determine which mouse button is pressed.

2006-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.

        <rdar://4757387> (partial fix) Unable to sign on to my.yahoo.com
        <rdar://4757405> (partial fix) Unable to log onto secure site (www.schwab.com)
        <rdar://4757411> (partial fix) Unable to log onto any AppleConnect site (but using back and resubmiting works)

        WinInet fixes.
        Don't post data using HTTP when HTTPS should be used.
        Fix redirect from POST to GET case.
        
        There is a remaining bug with the way that we queue WinInet callbacks
        still to be addressed.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::addToOutstandingJobs): Skip dwContext of 0 (rollover case).
        (WebCore::ResourceLoaderWndProc): Call default wndproc properly.
            Pass INTERNET_FLAG_SECURE when necessary for HTTPS.
            Fix redirect code.
            Initialize buffers struct.
            Pass proper context in InternetReadFileExA
        (WebCore::initializeOffScreenResourceLoaderWindow): Init a struct to {0} instead of using memset.
        (WebCore::transferJobStatusCallback): Prevent future bugs by making an else a bit more explicit.
        (WebCore::ResourceLoader::start): Pass proper port for HTTP vs. HTTPS.
        (WebCore::ResourceLoader::cancel): Zero out handle when closing.

2006-10-01  Dave Hyatt  <hyatt@apple.com>

        Finish the scrollbar.  Handle arrow and track scrolling.  Everything is finished now except for implementing a Win2k look.

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::~PlatformScrollBar):
        (WebCore::PlatformScrollBar::thumbRect):
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMousePressEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollBar::startTimerIfNeeded):
        (WebCore::PlatformScrollBar::stopTimerIfNeeded):
        (WebCore::PlatformScrollBar::autoscrollPressedPart):
        (WebCore::PlatformScrollBar::autoscrollTimerFired):
        (WebCore::PlatformScrollBar::pressedPartScrollDirection):
        (WebCore::PlatformScrollBar::pressedPartScrollGranularity):
        (WebCore::PlatformScrollBar::thumbUnderMouse):

2006-10-01  Dave Hyatt  <hyatt@apple.com>
        
        Make thumb dragging work on the scrollbar.
        
        Fix mouse and wheel events to use GET_X_LPARAM and GET_Y_LPARAM so that negative coordinates work.
        (This comes up when a widget is capturing events and the mouse moves outside the HWND.)
        
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMousePressEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        (WebCore::PlatformScrollBar::startTimerIfNeeded):
        (WebCore::PlatformScrollBar::stopTimerIfNeeded):
        * platform/win/WheelEventWin.cpp:
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):

2006-10-01  Dave Hyatt  <hyatt@apple.com>

        Hook up the mouse capture architecture so that child widgets capture events while the mouse is pressed.
        
        Hook up tracking the pressed object on a scrollbar and proper painting of the scrollbar's
        pressed state.
        
        * bridge/win/FrameViewWin.cpp:
        (WebCore::FrameView::passMousePressEventToSubframe):
        (WebCore::FrameView::passMousePressEventToScrollbar):
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::paintButton):
        (WebCore::PlatformScrollBar::paintTrack):
        (WebCore::PlatformScrollBar::paintThumb):
        (WebCore::PlatformScrollBar::paintGripper):
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMousePressEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCapturingChild):

2006-09-30  Dave Hyatt  <hyatt@apple.com>

        This patch makes iframes and frames able to receive mouse events.  Down, up, click, selection
        all work.  This patch also fixes bugs in scrolling and makes wheel events work on iframes.
        A capturing system for routing events to the proper subwidget when the mouse has down
        is also stubbed out (but not yet used).
        
        Reviewed by andersca

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/FrameViewWin.cpp: Added.
        (WebCore::FrameView::passMousePressEventToSubframe):
        (WebCore::FrameView::passMouseMoveEventToSubframe):
        (WebCore::FrameView::passMouseReleaseEventToSubframe):
        (WebCore::FrameView::passWheelEventToSubframe):
        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::handleMouseMoveEvent):
        (WebCore::PlatformScrollBar::handleMouseOutEvent):
        (WebCore::PlatformScrollBar::handleMouseReleaseEvent):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::removeChild):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::print):
        (FrameWin::lastEventIsMouseUp):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::capturingMouse):
        (WebCore::Widget::setCapturingMouse):
        (WebCore::Widget::capturingTarget):
        (WebCore::Widget::capturingChild):
        (WebCore::Widget::setCapturingChild):

2006-09-29  Steve Falkenburg  <sfalken@apple.com>

        Fix the build.

        * platform/win/PlatformScrollBarWin.cpp:

2006-09-29  Adele Peterson  <adele@apple.com>

        Adding RenderListBox files.

        * WebCore.vcproj/WebCore.vcproj:

2006-09-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Updated constructor for PlatformScrollBar to include controlSize argument.

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):

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

        Reviewed by hyatt.

        Add error logging to plugin code.

        * WebCore.vcproj/WebCore.vcproj: Added PluginDebug.h
        * platform/win/NotImplemented.h: Add surrounding #ifndef/#endif
        * plugins/win/PluginDebug.h: Added.
        * plugins/win/PluginPackageWin.cpp: Add error logging
        (WebCore::PluginPackageWin::load):
        * plugins/win/PluginStreamWin.cpp: Ditto.
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginViewWin.cpp: Ditto.
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::PluginViewWin::newStream):
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::destroyStream):

2006-09-29  Dave Hyatt  <hyatt@apple.com>

        Fork MouseEventWin.cpp into (the better-named) PlatformMouseEventWin.cpp.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PlatformMouseEventWin.cpp: Added.

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Make scrollbars scroll correctly when setValue is called.  Needed to do float math instead of integer
        math (and also fix some buggy math when computing the thumb position).
 
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::thumbPosition):

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Make scrollbars on Win32 respond to hover events.  The thumb and arrow buttons will now properly hover when
        the mouse enters and exits them.
        
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::invalidatePart):
        (WebCore::PlatformScrollBar::paintButton):
        (WebCore::PlatformScrollBar::paintTrack):
        (WebCore::PlatformScrollBar::paintThumb):
        (WebCore::PlatformScrollBar::paintGripper):
        (WebCore::PlatformScrollBar::hitTest):
        (WebCore::PlatformScrollBar::mouseMoved):
        (WebCore::PlatformScrollBar::mouseExited):

2006-09-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Use $(ConfigSuffix) set via vsprops files to add _debug
        to end of debug filenames.

        Update B&I build script.

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/debug.vsprops: Added.
        * WebCore.vcproj/release.vsprops: Added.

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

        Reviewed by Hyatt.

        Avoid creating LOGFONTs for bitmap fonts under CG, since we don't
        support them anyway.

        * platform/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Set lfOutPrecision to
        OUT_TT_ONLY_PRECIS to avoid bitmap fonts.
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Change the LOG_ERROR
        back to an ASSERT since we should never reach this condition now.

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

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::convertToContainingWindow):
        (WebCore::ScrollView::convertFromContainingWindow):
        (WebCore::ScrollView::scrollBy):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromContainingWindow):

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

        Reviewed by Anders.

        Fail without crashing and log an error when CG encounters a bitmap
        font.

        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Trade LOG_ERROR for
        ASSERT_WITH_MESSAGE

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

        Reviewed by Steve & Adam.

        * WebCore.vcproj/WebCore.vcproj:
        Added files to the project file
        * platform/win/TemporaryLinkStubs.cpp:
        Removed stub for findWordBoundary
        * platform/win/TextBoundariesWin.cpp: Added.
        Implemented cross-platform findWordBoundary.  We're still keeping the mac one intact for now. 
        (WebCore::findWordBoundary):

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

        Reviewed by Adele.

        Remove never-to-be-used PopUpButton

        * WebCore.vcproj/WebCore.vcproj: Remove PopUpButton.h
        * platform/win/TemporaryLinkStubs.cpp: Remove PopUpButton:: methods

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

        Reviewed by Alice.

        Replace notImplemented() with LOG_NOIMPL() and STOP_NOIMPL() macros
        which generate debug output. STOP_NOIMPL() also generates a debug
        break. Replace calls to notImplemented() with
        LOG_NOIMPL()/STOP_NOIMPL() as appropriate. This should stop some unnecessary
        crashes where notImplemented() was called from a method that can fail
        safely.

        * WebCore.vcproj/WebCore.vcproj: Added NotImplemented.h
        * platform/win/FontWin.cpp: Use LOG_NOIMPL() instead of notImplemented().
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/win/NotImplemented.h: Added. Contains new LOG_NOIMPL() and
        STOP_NOIMPL() macros.
        * platform/win/TemporaryLinkStubs.cpp: Use LOG_NOIMPL() and
        STOP_NOIMPL() instead of notImplemented() or nothing.
        (PopUpButton::focusPolicy):
        (PopUpButton::populate):
        (Widget::enableFlushDrawing):
        (Widget::focusPolicy):
        (Widget::disableFlushDrawing):
        (Widget::lockDrawingFocus):
        (Widget::unlockDrawingFocus):
        (JavaAppletWidget::JavaAppletWidget):
        (TextField::selectAll):
        (TextField::addSearchResult):
        (TextField::selectionStart):
        (TextField::hasSelectedText):
        (TextField::selectedText):
        (TextField::setAutoSaveName):
        (TextField::checksDescendantsForFocus):
        (TextField::setSelection):
        (TextField::setMaxResults):
        (TextField::edited):
        (Slider::Slider):
        (Slider::sizeHint):
        (Slider::setValue):
        (Slider::setMaxValue):
        (Slider::setMinValue):
        (Slider::~Slider):
        (Slider::setFont):
        (Slider::value):
        (ListBox::sizeForNumberOfLines):
        (ListBox::isSelected):
        (ListBox::checksDescendantsForFocus):
        (Slider::focusPolicy):
        (ListBox::focusPolicy):
        (TextField::focusPolicy):
        (Cursor::Cursor):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::searchableIndexIntroduction):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::ServeSynchronousRequest):
        (FrameWin::focusWindow):
        (FrameWin::unfocusWindow):
        (FrameWin::locationbarVisible):
        (FrameWin::registerCommandForRedo):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::canRedo):
        (FrameWin::canUndo):
        (FrameWin::canPaste):
        (FrameWin::canGoBackOrForward):
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::openURL):
        (FrameWin::print):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::issueCutCommand):
        (FrameWin::issueCopyCommand):
        (FrameWin::issuePasteCommand):
        (FrameWin::issueUndoCommand):
        (FrameWin::issueRedoCommand):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (FrameWin::issueTransposeCommand):
        (FrameWin::passWheelEventToChildWidget):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::scheduleClose):
        (FrameWin::markMisspellings):
        (FrameWin::menubarVisible):
        (FrameWin::personalbarVisible):
        (FrameWin::statusbarVisible):
        (FrameWin::toolbarVisible):
        (FrameWin::originalRequestURL):
        (FrameWin::isLoadTypeReload):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::createNewWindow):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::historyURL):
        (GraphicsContext::addRoundedRectClip):
        (GraphicsContext::addInnerRoundedRectClip):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::moveCursor):
        (WebCore::inputElementAltText):
        (WebCore::findWordBoundary):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (FrameView::updateBorder):
        (FrameWin::restoreDocumentState):
        (FrameWin::partClearedInBegin):
        (FrameWin::createEmptyDocument):
        (FrameWin::overrideMediaType):
        (FrameWin::markedTextRange):
        (FrameWin::addMessageToConsole):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::saveDocumentState):
        (FrameWin::registerCommandForUndo):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::incomingReferrer):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::respondToChangedContents):
        (BrowserExtensionWin::BrowserExtensionWin):
        (BrowserExtensionWin::setTypedIconURL):
        (BrowserExtensionWin::setIconURL):
        (BrowserExtensionWin::getHistoryLength):
        (WebCore::CheckIfReloading):
        (WebCore::CheckCacheObjectStatus):
        (Widget::setIsSelected):
        (ScrollView::inWindow):
        (ScrollView::scrollPointRecursively):
        (GraphicsContext::setShadow):
        (GraphicsContext::clearShadow):
        (GraphicsContext::beginTransparencyLayer):
        (GraphicsContext::endTransparencyLayer):
        (GraphicsContext::clearRect):
        (GraphicsContext::strokeRect):
        (GraphicsContext::setLineWidth):
        (GraphicsContext::setLineCap):
        (GraphicsContext::setLineJoin):
        (GraphicsContext::setMiterLimit):
        (GraphicsContext::setAlpha):
        (GraphicsContext::clip):
        (GraphicsContext::rotate):
        (GraphicsContext::scale):
        (Path::Path):
        (Path::~Path):
        (Path::contains):
        (Path::translate):
        (Path::boundingRect):
        (Path::operator=):
        (Path::clear):
        (Path::moveTo):
        (Path::addLineTo):
        (Path::addQuadCurveTo):
        (Path::addBezierCurveTo):
        (Path::addArcTo):
        (Path::closeSubpath):
        (Path::addArc):
        (Path::addRect):
        (Path::addEllipse):
        (GraphicsContext::drawFocusRing):
        (GraphicsContext::drawLineForMisspelling):
        (GraphicsContext::setCompositeOperation):
        (TextField::TextField):
        (TextField::~TextField):
        (TextField::setFont):
        (TextField::setAlignment):
        (TextField::setWritingDirection):
        (TextField::maxLength):
        (TextField::setMaxLength):
        (TextField::text):
        (TextField::setText):
        (TextField::cursorPosition):
        (TextField::setCursorPosition):
        (TextField::setEdited):
        (TextField::setReadOnly):
        (TextField::setPlaceholderString):
        (TextField::setColors):
        (TextField::sizeForCharacterWidth):
        (TextField::baselinePosition):
        (TextField::setLiveSearch):
        (PopUpButton::PopUpButton):
        (PopUpButton::~PopUpButton):
        (PopUpButton::setFont):
        (PopUpButton::baselinePosition):
        (PopUpButton::setWritingDirection):
        (PopUpButton::clear):
        (PopUpButton::appendItem):
        (PopUpButton::setCurrentItem):
        (PopUpButton::sizeHint):
        (PopUpButton::frameGeometry):
        (PopUpButton::setFrameGeometry):
        (ListBox::ListBox):
        (ListBox::~ListBox):
        (ListBox::setSelectionMode):
        (ListBox::setFont):
        (ListBox::setWritingDirection):
        (ListBox::clear):
        (ListBox::doneAppendingItems):
        (ListBox::setEnabled):
        (ListBox::appendItem):
        (ListBox::setSelected):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):
        (Image::drawTiled):
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::setValue):

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

        Rubberstamped by sfalken.

        Remove calls to DebugBreak() from plugin code.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        (WebCore::PluginViewWin::setValue):

2006-09-28  Dave Hyatt  <hyatt@apple.com>

        Eliminate the use of MapWindowPoints on Win32. Just use the outermost HWND as the point of reference for events.  
        
        Stub out the mouse methods from the open source checkin and add a new member variable to track the current hovered scrollbar part.

        * platform/win/PlatformScrollBar.h:
        (WebCore::):
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::mouseMoved):
        (WebCore::PlatformScrollBar::mouseExited):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        * platform/win/WheelEventWin.cpp:
        (WebCore::positionForEvent):

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Prefer pulling project dependencies from WebKitOutputDir over
        WebKitSDKDir.  Don't copy build output back over to WebKitSDKDir.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:
        * WebCore.vcproj/dstroot-to-sdk.cmd: Removed.

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        B&I build fixes

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:

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

        Reviewed by sfalken.

        Don't die when plugins try to open a new window.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): Remove call to DebugBreak()

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        B&I build script tweaks.

        * WebCore.vcproj/WebCore.make:

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.

        Turn on CG

        * config.h:

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

        Reviewed by Lou.

        Fix crash in plugins due to Flash on nytimes.com

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin): memset m_stream to 0

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

        Reviewed by sfalken.

        Scroll plugins (at least in some cases).

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollBy): Pass SW_SCROLLCHILDREN to ScrollWindowEx()

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Remove unimplemented from a temporary link stub.

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::addInnerRoundedRectClip):

2006-09-27  Sean Gies  <seangies@apple.com>

        Reviewed by Brady Eidson.

        * WebCore.vcproj/WebCore.vcproj: Added platform/win/WebCoreSystemInterface.h/cpp
        * platform/win/WebCoreSystemInterface.cpp: Added.
        * platform/win/WebCoreSystemInterface.h: Added.

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

        Reviewed by sfalken.

        Fixes <rdar://problem/4751600>
        Hang on Amazon.com involving Flash

        * plugins/win/PluginStreamWin.cpp: Rename m_streamStarted to
        m_isTerminated to match Mac code (m_isTerminated is the negation of
        m_streamStarted)
        (WebCore::PluginStreamWin::PluginStreamWin): Initialize m_isTerminated
        to false to match Mac code.
        (WebCore::PluginStreamWin::~PluginStreamWin): Rename and negate.
        (WebCore::PluginStreamWin::stop): Remove assignment of m_streamStarted
        to match Mac code.
        (WebCore::PluginStreamWin::startStream): Rename and negate. Remove
        now-unnecessary assignment of m_streamStarted to true because we set
        m_isTerminated to false in the constructor.
        (WebCore::PluginStreamWin::destroyStream): Rename and negate.
        * plugins/win/PluginStreamWin.h: Rename m_streamStarted to
        m_isTerminated.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::performRequest): Send the correct response URL
        to the plugin.

2006-09-26  Steve Falkenburg  <sfalken@apple.com>

        More temporary link stubs moved.
        Build tweaks.

        * ChangeLog:
        * WebCore.vcproj/WebCore.make: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (ListBox::isSelected):
        (ListBox::setWritingDirection):
        (ListBox::clear):
        (ListBox::doneAppendingItems):
        (ListBox::setEnabled):
        (ListBox::appendItem):
        (ListBox::setSelected):

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Brady Eidson.

        * platform/win/GraphicsContextWin.cpp:
        (WebCore::CGContextWithHDC):  Make a static function.
        (WebCore::GraphicsContext::getWindowsContext): Assume flipped coordinates.

2006-09-26  Brady Eidson  <beidson@apple.com>

        Nuked another notImplemented() that is getting hit

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::addRoundedRectClip):

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        * WebCore.vcproj/WebCore.vcproj: Use Debug DLL C runtime for debug config.

2006-09-26  Lou Amadio  <lamadio@apple.com>

        Reviewed by ggaren
        Uninitialized variable caused a memory corruption on cnn.com

        WARNING: NO TEST CASES ADDED OR CHANGED

        * plugins/win/PlugInInfoStoreWin.cpp:
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):

2006-09-26  Dave Hyatt  <hyatt@apple.com>

        Fix my buggy invalidateRect implementation for Win32 widgets.
        
        Clean up my rect computation code in scrollbar to use x() and y() instead of
        frameGeometry().x()/y().
        
        Add a new invalidateTrack() method that invalidates the track (and handles
        putting the rect into the right coordinate space for proper invalidation
        now that I fixed invalidateRect).

        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::updateThumbPosition):
        (WebCore::PlatformScrollBar::updateThumbProportion):
        (WebCore::PlatformScrollBar::invalidateTrack):
        (WebCore::PlatformScrollBar::backButtonRect):
        (WebCore::PlatformScrollBar::forwardButtonRect):
        (WebCore::PlatformScrollBar::trackRect):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::invalidate):

2006-09-26  Dave Hyatt  <hyatt@apple.com>

        Teach all our Win32 theme code (RenderTheme and PlatformScrollBar) how to respond correctly to OS theme changes.
        
        Implement painting of scrollbars using theme APIs.  The arrow buttons, track, thumb and gripper all paint properly
        now.  Next up is hit testing and proper hover feedback.
        
        Reviewed by andersca
        
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::paint):
        (WebCore::PlatformScrollBar::backButtonRect):
        (WebCore::PlatformScrollBar::forwardButtonRect):
        (WebCore::PlatformScrollBar::trackRect):
        (WebCore::PlatformScrollBar::gripperRect):
        (WebCore::PlatformScrollBar::splitTrack):
        (WebCore::PlatformScrollBar::thumbPosition):
        (WebCore::PlatformScrollBar::thumbLength):
        (WebCore::PlatformScrollBar::paintButton):
        (WebCore::PlatformScrollBar::paintTrack):
        (WebCore::PlatformScrollBar::paintThumb):
        (WebCore::PlatformScrollBar::paintGripper):
        (WebCore::PlatformScrollBar::themeChanged):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::themeChanged):
        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::enableFlushDrawing):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::isEnabled):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::openButtonTheme):
        (WebCore::RenderThemeWin::openTextFieldTheme):
        (WebCore::RenderThemeWin::openMenuListTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::themeChanged):
        * rendering/RenderThemeWin.h:

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

        Rubberstamped by sfalken.

        Set svn:eol-style to native and cleanup line endings on plugins files.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::receivedData):
        (WebCore::PluginStreamWin::receivedAllData):

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

        Reviewed by Brady.

        Fixes <rdar://problem/4749494>
        Crash/ASSERT in plugins at Fark.com

        * platform/win/ResourceLoaderWin.cpp: 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.
        (WebCore::ResourceLoaderWndProc): Ask the job whether it has received a
        response instead of assuming it hasn't.
        (WebCore::ResourceLoader::setHasReceivedResponse): Added.
        (WebCore::ResourceLoader::hasReceivedResponse): Added.

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

        Rubberstamped by sfalken.

        Continuing the removal of unnecessary notImplemented() calls.

        * platform/win/TemporaryLinkStubs.cpp:
        (PlatformMouseEvent::PlatformMouseEvent):
        (FrameWin::passWheelEventToChildWidget):

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

        Rubberstamped by sfalken.

        More notImplemented()-ectomy.

        * platform/win/TemporaryLinkStubs.cpp:
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):

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

        Rubberstamped by sfalken.

        Remove calls to notImplemented() from functions that can fail safely.

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::originalRequestURL):
        (FrameWin::isLoadTypeReload):
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):

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

        Rubberstamped by sfalken.

        Make notImplemented() crash even when not linked against the debug CRT.

        * platform/win/TemporaryLinkStubs.cpp:
        (notImplemented): Change _CrtDbgBreak() to ASSERT(0)

2006-09-24  Dave Hyatt  <hyatt@apple.com>

        Update the scrollbar API to match the changes in the public tree.
        
        Start implementing the Win32 scrollbar.  Add some scaffolding for grabbing uxtheme.dll info and also
        add some utility functions for breaking the scrollbar into individual components.
        
        * platform/win/PlatformScrollBar.h:
        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::PlatformScrollBar):
        (WebCore::PlatformScrollBar::updateThumbPosition):
        (WebCore::PlatformScrollBar::updateThumbProportion):
        (WebCore::PlatformScrollBar::paint):
        (WebCore::PlatformScrollBar::backButtonRect):
        (WebCore::PlatformScrollBar::forwardButtonRect):
        (WebCore::PlatformScrollBar::trackRect):
        (WebCore::PlatformScrollBar::splitTrack):

2006-09-22  Steve Falkenburg  <sfalken@apple.com>

        Fix release build some more.

        * WebCore.vcproj/WebCore.vcproj:

2006-09-22  Brady Eidson  <beidson@apple.com>

        Extremely urgent update to my last two patches (without it, many urls will fail to load)

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::onRequestComplete):

2006-09-22  Brady Eidson  <beidson@apple.com>

        Forgot some lines we needed to keep for the internal build in my last checkin

        * platform/win/ResourceLoaderWin.cpp:

2006-09-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        Landed from OpenSource - that version now supports Redirect like we need, and is a little cleaner design

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::):
        (WebCore::ResourceLoaderWndProc):
        (WebCore::initializeOffScreenResourceLoaderWindow):
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::onHandleCreated):
        (WebCore::ResourceLoader::onRequestRedirected):
        (WebCore::ResourceLoader::onRequestComplete):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):

2006-09-22  Dave Hyatt <hyatt@apple.com>

        Implement support for CSS2 system fonts on Win32.  Implement support for our special control font so that controls now
        pick up the correct font from the system.  This fixes the crazy form control font sizes on e.g., www.google.com.

        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::fillFontDescription):
        (WebCore::RenderThemeWin::systemFont):

2006-09-22  Dave Hyatt <hyatt@apple.com>

        Scrollbar preparation work.
        
        (1) Add support for enabling/disabling widgets.
        (2) Add support for invalidation of part or all of a widget.
        (3) Clean up some of the Win32 scrollbar code.  All that's left is painting
        and event handling. (Oh, is that all...) :)

        Reviewed by anders

        * platform/win/PlatformScrollBarWin.cpp:
        (WebCore::PlatformScrollBar::setScrollBarValue):
        (WebCore::PlatformScrollBar::setKnobProportion):
        (WebCore::PlatformScrollBar::setEnabled):
        (WebCore::PlatformScrollBar::paint):
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2006-09-21  Brady Eidson <beidson@apple.com>

        Build was broken for at least some, and I think my checkin that messed with 
        #include orders was to blame (and it was messy, broken or not) - this cleans that up

        * platform/win/ResourceLoaderWin.cpp:

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

        Reviewed by Hyatt.

        windows build fix

        * platform/win/GraphicsContextWin.cpp:
        wrapped a CG #include in #if PLATFORM(CG)

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

        Reviewed by Maciej, Hyatt, Steve.
    
        frames!
        
        Prep work:
            - moved ScrollViewWin into OpenSourceWin
            - set eol-style:native on some files and corrected line endings
            - updated the WebCore project so that you don't need cygwin in your Windows path
              to build correctly.

        Real work:

            On Windows, Widgets are no longer interfaces to Windows UI tookit objects. They're 
            just positioned objects.
                
            Widgets position themselves relative to their parents. The top-level widget technically
            has a position relative to the WebView, but that's academic, since it's always (0, 0).
            All widgets draw inside a common containing window (the WebView window). ScrollView 
            handles transformation, clipping, and dirty rect management.
            
            I've filed a bunch of bugs on remaining frames work. Most notably, closing a page with
            a frame in it causes a crash because WebCore depends on WebKit to manage frame lifetime.
            I'm going to fix that by integrating frame ownership into the DOM.
            
2006-09-21  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.
        
        <rdar://4516072>
        <rdar://4601320>
        
        Implemented JavaScript alert/confirm/prompt inside app.
        This is done via IWebUIDelegate.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::userAgent):
        (WebCore::FrameWin::runJavaScriptAlert):
        (WebCore::FrameWin::runJavaScriptConfirm):
        (WebCore::FrameWin::runJavaScriptPrompt):
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::registerCommandForRedo):

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by NOBODY.

        Unfork GraphicsContextCG.cpp.

        * WebCore.vcproj/WebCore.vcproj: Unfork GraphicsContextCG.cpp and add GraphicsContextWin.cpp
        * platform/win/GraphicsContextWin.cpp: Added.

2006-09-21  Luke Wallis  <wallis@apple.com>

        Rubber stamped by Steve.

        Added (commented out for now) defines for building on PLATFORM(CG).

        * config.h:

2006-09-21  Luke Wallis <wallis@apple.com>

        Reviewed by Adam Roben.

        Fix build. Added #if PLATFORM(CG) around variable defined only for CG.

        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Draw form controls when rendering with CG.

        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::CGContextWithHDC): New function to create CGContext given an HDC.
        (WebCore::GraphicsContext::GraphicsContext): New constructor that takes an HDC.
        (WebCore::GraphicsContext::getWindowsContext): Return underlying HDC to client.
        (WebCore::GraphicsContext::releaseWindowsContext): Restore underlying HDC after client mucked with it.
        * platform/cg/GraphicsContextPlatformPrivate.h: Add field to hold HDC.
        * rendering/RenderThemeWin.cpp: Implement prepareForDrawing and doneDrawing for CG.

2006-09-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Support getting the plugin element as an NPObject.
        
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Forked GraphicsContextCG.cpp and GraphicsContextPlatformPrivate.h from open source #16504.

        * platform/cg/GraphicsContextCG.cpp: Added.
        * platform/cg/GraphicsContextPlatformPrivate.h: Added.

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Support synthetic bold and/or oblique with CG.

        * platform/win/FontCacheWin.cpp: Pass new arguments to updated FontPlatformData constructor.
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit): Choose synthetic bold offset.
        (WebCore::FontData::platformWidthForGlyph): Take synthetic bold offset into account.
        * platform/win/FontPlatformData.h: Add fields for synthetic styles.
        * platform/win/FontPlatformDataWin.cpp: Ask HFONT if it supports bold or italics.
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs): Restore code for implementing synthetic stlyes.

2006-09-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Fixed one definite bug and did alot of cleanup to make it resemble the unforked version of the file
        in preparation for merging it back out

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::transferJobStatusCallback): Fixed a bug here!  :)
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):

2006-09-21  2006-09-21  Dave Hyatt <hyatt@apple.com>

        Implement mouse wheel scrolling on Win32.  Also forked ScrollViewWin.cpp and fixed some bugs in it.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ScrollViewWin.cpp: Added.
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (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::maximumScroll):
        (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::updateScrollInfo):
        (WebCore::ScrollView::updateScrollBars):
        (WebCore::ScrollView::wheelEvent):
        * platform/win/WheelEventWin.cpp: Added.
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2006-09-20  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Added platform/cg/ColorCG.cpp

        * WebCore.vcproj/WebCore.vcproj: Add ColorCG.cpp
        * platform/cg/ColorCG.cpp: Added.

2006-09-20  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Fixed ugly text spacing issues with CG for Windows.

        * platform/win/FontDataWin.cpp: Reimplement platformWidthForGlyph using CG APIs.

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

        Reviewed by Dave Hyatt.
        
        <rdar://problem/4734743> Crash accessing YouTube.
        
        * config.h:
        Enable some more of the JSC bindings code on Windows.
        
2006-09-18  Brady Eidson  <beidson@apple.com>

        YABF, and merged a change from open source ResourceLoaderWin.cpp

        * bridge/win/FrameWin.h:
        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoader::fileLoadTimer):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::isLoadTypeReload):

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Support bold & italics.

        * platform/win/FontPlatformDataWin.cpp: Use GetOutlineTextMetrics instead of GetTextFace to
            query HFONT name.

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Changes to bring up CoreGraphics on Windows.

        * WebCore.vcproj/WebCore.vcproj: Search platform/cg for headers.  Compile platform/cg/*.cpp.
             Add AffineTransform.cpp to build.
        * platform/win/FontDataWin.cpp: Include CG before using it.
        * platform/win/FontPlatformDataWin.cpp: Fixed typo.
        * platform/win/ImageWin.cpp: Include CG and winsock2.  Implement CG version of Image::getHBITMAP.
             In Cairo version of Image::getHBITMAP, use correct bitmapInfo field and return true for success.
             Fixed image loading bug.

2006-09-18  Brady Eidson  <beidson@apple.com>

        Rubberstamp by Adam

        Build fix

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::originalRequestURL):

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Forked FontCacheWin.cpp from OpenSource tree r16421.

        * WebCore.vcproj/WebCore.vcproj: Point to Internal file.
        * platform/win/FontCacheWin.cpp: Added.

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

        Reviewed by Steve.

        * WebCore.vcproj/WebCore.vcproj:
        Add JavaScriptCore/ to include path.

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

        Reviewed by sfalken.

        Implement historyContains() on Windows (rdar://4733770)

        * WebCore.vcproj/WebCore.vcproj: Add
        platform\win\WebCoreHistory.{cpp,h} and bridge\win\HistoryWin.cpp to
        project.
        * bridge/win/HistoryWin.cpp: Added.
        (WebCore::historyContains):
        * platform/win/TemporaryLinkStubs.cpp: Remove stub for
        WebCore::historyContains()
        * platform/win/WebCoreHistory.cpp: Added.
        (WebCore::WebCoreHistory::setHistoryProvider):
        (WebCore::WebCoreHistory::historyProvider):
        * platform/win/WebCoreHistory.h: Added.

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

        Reviewed by Lou Amadio.

        iBench fix - fix WinInet form post code to not reference a stale pointer.
        (found by Application Verifier)

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):

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

        Reviewed by sfalken.

        A little #include cleanup

        * WebCore.vcproj/WebCore.vcproj: Add loader/icon to
        AdditionalIncludeDirectories
        * platform/win/TemporaryLinkStubs.cpp: Remove "loader/icon" from
        #include of IconLoader.h

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

        Build Fix

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (IconLoader::receivedResponse):
        (IconLoader::notifyIconChanged):

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

        Fixes for submission of WebCore.  Doesn't affect build.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/merge-opensource.sh:

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

        Rubber-stamped by Ada.

        Get Boomer ready for B&I submission.
       
        Projects can now all build independent of one another
        without groping for headers or source across trees.

        * WebCore.vcproj/WebCore.sln: Fix standalone sln for use by B&I.
        * WebCore.vcproj/WebCore.vcproj: Update to new obj layout.
        * WebCore.vcproj/build-generated-files.sh: Build derived sources into obj, update to new obj layout.
        * WebCore.vcproj/dstroot-to-sdk.cmd: Copy built bits back to WebKitSDKDir for dependent builds.

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

        Build fix

        * WebCore.vcproj/WebCore.vcproj: Rename KHTML_XSLT to XSLT_SUPPORT,
        remove KHTML_NO_XBL
        * config.h: Ditto.

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

        Reviewed by beidson.

        Initial implementation of Icon, FileChooser on Windows.

        * WebCore.vcproj/WebCore.vcproj: Added FileChooserWin.cpp, IconWin.cpp
        * platform/win/FileChooserWin.cpp: Added.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::openFileChooser):
        (WebCore::FileChooser::basenameForWidth):
        (WebCore::FileChooser::uploadControlDetaching):
        (WebCore::FileChooser::chooseFile):
        * platform/win/IconWin.cpp: Added.
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        * platform/win/TemporaryLinkStubs.cpp: Removed FileChooser, Icon stub
        functions

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

        Reviewed by Tim O.

        Implement postURL and postURLNotify.

        * plugins/win/PluginStreamWin.cpp:
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::loadURL):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::startsWithBlankLine):
        (WebCore::locationAfterFirstBlankLine):
        (WebCore::findEOL):
        (WebCore::capitalizeRFC822HeaderFieldName):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginViewWin::handlePost):
        (WebCore::PluginViewWin::postURLNotify):
        (WebCore::PluginViewWin::postURL):
        * plugins/win/PluginViewWin.h:

2006-09-13  Lou Amadio  <lamadio@apple.com>

        Reviewed by sfalken

        * WebCore.vcproj/WebCore.vcproj:

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

        Build fix

        * WebCore.vcproj/build-generated-files.sh: Export SOURCE_ROOT which is
        now used by CodeGenerator.pm

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

        Reviewed by Tim O.

        Add scripting support for plugins.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::addPluginRootObject):
        (WebCore::FrameWin::cleanupPluginObjects):
        (WebCore::FrameWin::bindingRootObject):
        (WebCore::FrameWin::windowScriptNPObject):
        * bridge/win/FrameWin.h:
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::getValue):
        * plugins/win/npapi.cpp:
        (NPN_RequestRead):
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):

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

        Reviewed many times by darin, hyatt.

        Add stubs for new engine-based file upload control implementation and
        Icon class.

        * WebCore.vcproj/WebCore.vcproj: Add new engine-based files, remove old
        widget-based files.
        * platform/win/TemporaryLinkStubs.cpp: Add stubs for FileChooser and
        Icon methods, and add two new LocalizedString methods.
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (FileChooser::uploadControlDetaching):
        (Icon::~Icon):
        (Icon::paint):

2006-09-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O.

        Add stream and URL handling to PluginViewWin. Include PluginStreamWin.cpp in the build.
        Also fix a number of bugs discovered when loading various plugins.
        
        * WebCore.vcproj/WebCore.vcproj:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginRequestWin::PluginRequestWin):
        (WebCore::PluginRequestWin::url):
        (WebCore::PluginRequestWin::target):
        (WebCore::PluginRequestWin::notifyData):
        (WebCore::PluginRequestWin::sendNotification):
        (WebCore::scriptStringIfJavaScriptURL):
        (WebCore::registerPluginView):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::updateSize):
        (WebCore::PluginViewWin::setFrameGeometry):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::createUTF8String):
        (WebCore::PluginViewWin::performRequest):
        (WebCore::PluginViewWin::requestTimerFired):
        (WebCore::PluginViewWin::scheduleRequest):
        (WebCore::PluginViewWin::loadURL):
        (WebCore::makeURL):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::newStream):
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::destroyStream):
        (WebCore::PluginViewWin::userAgent):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:

2006-09-11  Anders Carlsson  <acarlsson@apple.com>

        * WebCore.vcproj/WebCore.vcproj:
        Fix build.
        
2006-09-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim O and Maciej.

        Add plugin stream object.
        
        * plugins/win/PluginStreamWin.cpp: Added.
        (WebCore::PluginStreamWin::PluginStreamWin):
        (WebCore::PluginStreamWin::~PluginStreamWin):
        (WebCore::PluginStreamWin::setRequestHeaders):
        (WebCore::PluginStreamWin::setPostData):
        (WebCore::PluginStreamWin::start):
        (WebCore::PluginStreamWin::stop):
        (WebCore::PluginStreamWin::startStream):
        (WebCore::PluginStreamWin::cancelAndDestroyStream):
        (WebCore::PluginStreamWin::destroyStream):
        (WebCore::PluginStreamWin::delayDeliveryTimerFired):
        (WebCore::PluginStreamWin::deliverData):
        (WebCore::PluginStreamWin::receivedResponse):
        (WebCore::PluginStreamWin::receivedData):
        (WebCore::PluginStreamWin::receivedAllData):
        * plugins/win/PluginStreamWin.h: Added.

2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Steven Falkenburg

        Added IconDatabase related code and forked ImageWin for its HBITMAP blit

        * WebCore.vcproj/WebCore.vcproj: Added in all WebCore::IconDatabase stuffs
        * platform/win/ImageWin.cpp: Added. (forked from OpenSource)
        (WebCore::Image::initPlatformData):
        (WebCore::Image::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::supportsType):
        (WebCore::Image::getHBITMAP): Added - blit the image to an HBITMAP 
        
2006-09-10  David Hyatt  <hyatt@apple.com>

        Remove the addIntrinsicMargins code from the theme.  I did this
        in the open source version but forgot to do it in the internal
        version.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        (WebCore::RenderThemeWin::adjustMenuListStyle):

2006-09-10  Brady Eidson  <beidson@apple.com>

        Reviewed by YABF, and Adam's suggestive rubberstamp before he hopped offline

        Build fix + FIXME/Radar to reflect an OpenSource change to the Font.h header

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs): Added the parameter and a FIXME 

2006-09-10  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamp by aroben.
        
        * WebCore.vcproj/WebCore.vcproj:

2006-09-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Added missing CF files to fix CFNetwork build variant

        * WebCore.vcproj/WebCore.vcproj: Use include paths, libs, DLLs from %SystemDrive%\AppleInternal
        * WebCore.vcproj/build-generated-files.sh: Don't copy open source DLLs from WebKitLibraries

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

        Reviewed by hyatt.

        Remove unnecessary calls to setAffectedBy{Active,Hover}Rules

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListStyle): Remove unnecessary calls

2006-09-06  Brady Eidson  <beidson@apple.com>

        YABF (Yet another build fix)

        * platform/win/FontDataWin.cpp: Added missing header

2006-09-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve's rubberstamp

        Three stubs were added this morning, however the methods were already implemented in
        Internal/OpenSourceWin/WebCoreWin/bridge/win/FrameWin.cpp

        * platform/win/TemporaryLinkStubs.cpp: Nuked some repeat symbols

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

        Reviewed by Darin.

        Fixed various Windows build issues caused by previous checkins.

        * bridge/win/FrameWin.h: Added missing #include, updated Selection to SelectionController.
        * platform/win/FontWin.cpp: Reorganized #includes.
        (WebCore::Font::drawGlyphs): Used a const_cast hack to fix ultimately broken code.
        * platform/win/ResourceLoaderWin.cpp: Added missing #include of CString.h and removed double #include of config.h.
        (WebCore::ResourceLoaderWndProc): Removed use of String::ascii.
        (WebCore::ResourceLoader::start): Ditto.
        * platform/win/TemporaryLinkStubs.cpp: Added missing stubs.
        (FrameWin::markMisspellings):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::respondToChangedContents):
        (FrameWin::handledOnloadEvents):
        (FrameWin::createPlugin):
        (FrameWin::objectContentType):
        * rendering/RenderPopupMenuWin.cpp: Added missing #include.

2006-09-05  Darin Adler  <darin@apple.com>

        - build fix part of http://bugzilla.opendarwin.org/show_bug.cgi?id=10728
          text encodings should work without a numeric ID

        * WebCore.vcproj/WebCore.vcproj: Update for new headers.

2006-09-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adachan.

        Process redirects received in networking layer through to application.
        With this change, the address bar url edit field shows the proper
        redirected URL.

        * platform/win/ResourceLoaderWin.cpp:
        (WebCore::ResourceLoaderWndProc):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):

2006-09-01  Ada Chan  <adachan@apple.com>

        Reviewed by lamadio.

        Fixed build break.

        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::respondToChangedContents):

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve.

        Add our own internal config.h so we can make changes to it.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add config.h to the file list, move the KXMLCORE_PLATFORM_CF to the new config.h file 
                       
        * config.h: Added.
        
        * platform/win/ResourceLoaderWin.cpp:
        Include config.h        

2006-08-31  Dave Hyatt <hyatt@apple.com>

        Add a platform scrollbar class for Windows.  It doesn't really work yet.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/win/PlatformScrollBarWin.cpp

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.

        * WebCore.vcproj/WebCore.vcproj:

2006-08-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada Chan.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm): Pass form values to submit form delegate
        * bridge/win/FrameWin.h: Pass form values to submit form delegate

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

        Make project changes so that the forked Font files (and Cairo/JPG/PNG) are all used.

        * WebCore.vcproj/WebCore.vcproj:

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

        This patch lands all the font changes.  It does not patch the project file
        yet, since this was done on Mac.  Will switch to Win32 after landing this
        and then fix any glitches.

        * platform/cairo/cairo-all.c: Added.
        * platform/cairo/pixman-all.c: Added.
        * platform/image-decoders/jpeg/jpeg-part1.c: Added.
        * platform/image-decoders/jpeg/jpeg-part2.c: Added.
        * platform/image-decoders/jpeg/jpeg-part3.c: Added.
        * platform/image-decoders/png/png-part1.c: Added.
        * platform/image-decoders/png/png-part2.c: Added.
        * platform/win/FontDataWin.cpp:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::platformDestroy):
        (WebCore::FontData::platformWidthForGlyph):
        * platform/win/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp:
        (WebCore::m_size):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):

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

        Forking the font files in preparation for dropping in CG code.

        Reviewed by adam

        * WebCore.vcproj/WebCore.vcproj:
        * 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/FontPlatformData.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/win/FontPlatformDataWin.cpp: Added.
        (WebCore::m_size):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/win/FontWin.cpp: Added.
        (WebCore::notImplemented):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):

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

        Reviewed by Maciej.

        Landed CFNetwork loader, off by default. To enable, define:
            KXMLCORE_PLATFORM_CF
            KXMLCORE_USE_CFNETWORK

        CFNetwork uses winsock2. If you do this, you need to make sure that winsock2.h
        is included before windows.h in any translation unit in which it's used.
        A lot of the jiggering in this patch is devoted to that.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/ResourceLoaderWin.cpp: Removed reliance on PlatformData
        since it wasn't being used, and removing it made easy work of integrating
        CFNetwork in a Windows-independent way.
        (WebCore::ResourceLoaderWndProc):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * platform/win/TemporaryLinkStubs.cpp:
        (Path::contains):
        * platform/win/WidgetWin.cpp:
        * plugins/win/PluginDatabaseWin.cpp:
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        * rendering/RenderPopupMenuWin.cpp:
        * rendering/RenderPopupMenuWin.h:
        * rendering/RenderThemeWin.cpp:

2006-08-28  Ada Chan  <adachan@apple.com>

        Reviewed by ggaren.

        Fixed build.

        * platform/win/TemporaryLinkStubs.cpp:
        (Path::contains):

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

        Land CG/Cairo refactoring (and add some winsock2.h).  (I do not really
        understand why the winsock2.h stuff would suddenly be needed.)

        * platform/win/ResourceLoaderWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::setAlpha):
        (GraphicsContext::drawFocusRing):
        (GraphicsContext::drawLineForMisspelling):
        (GraphicsContext::setCompositeOperation):
        * plugins/win/PluginPackageWin.h:
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::prepareForDrawing):
        (WebCore::doneDrawing):

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 holding the
        page's HWND. Refactoring aside, I think this makes more sense.

2006-08-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Hyatt.

        Branching PageWin.cpp from r15969.

        * WebCore.vcproj/WebCore.vcproj:
        * bridge/win/PageWin.cpp: Added.
        (WebCore::Page::Page):
        (WebCore::Page::windowRect):
        (WebCore::Page::setWindowRect):

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

        Reviewed by Ada.

        Fixed placement of popups when document is scrolled.

        * rendering/RenderPopupMenuWin.cpp:
        (WebCore::RenderPopupMenuWin::setPositionAndSize):

2006-08-23  Steve Falkenburg  <sfalken@apple.com>

        Build fix (many of our include paths were wrong!)

        * WebCore.vcproj/WebCore.vcproj:

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

        Reviewed by Darin, Lou, Adele.

        Initial implementation of <select> elements on Windows.

        * WebCore.vcproj/WebCore.vcproj:
            Added RenderPopupMenuWin.cpp
        * platform/win/TemporaryLinkStubs.cpp:
        (RenderPopupMenuWin::addGroupLabel):
        * rendering/RenderPopupMenuWin.cpp: Added.
        (WebCore::RenderPopupMenuWin::RenderPopupMenuWin):
        (WebCore::RenderPopupMenuWin::~RenderPopupMenuWin):
        (WebCore::RenderPopupMenuWin::clear):
        (WebCore::RenderPopupMenuWin::populate):
        (WebCore::RenderPopupMenuWin::showPopup):
        (WebCore::RenderPopupMenuWin::hidePopup):
        (WebCore::RenderPopupMenuWin::setPositionAndSize):
        (WebCore::RenderPopupMenuWin::addOption):
        (WebCore::RenderPopupMenuWin::down):
        (WebCore::RenderPopupMenuWin::up):
        (WebCore::registerPopup):
        (WebCore::PopupWndProc):
        * rendering/RenderPopupMenuWin.h:
            Added useful properties.
        (WebCore::RenderPopupMenuWin::popupHandle):
        (WebCore::RenderPopupMenuWin::containerHandle):
        (WebCore::RenderPopupMenuWin::wasClicked):
        (WebCore::RenderPopupMenuWin::setWasClicked):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
        (WebCore::RenderThemeWin::openButtonTheme):
        (WebCore::RenderThemeWin::openTextFieldTheme):
        (WebCore::RenderThemeWin::openMenuListTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
            Refactored the above methods and added cases for
            MenulistAppearance where appropriate.
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::adjustMenuListStyle):
            Implemented the above methods.
        * rendering/RenderThemeWin.h:

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

        My first Windows build fix.

        * WebCore.vcproj/WebCore.vcproj:
            - Link against version.lib, since the new plug-in stuff requires it
            - Sync the release and debug header search paths, so release
              finds the JS bindings.

2006-08-18  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::write):
        (WebCore::PluginViewWin::destroyStream):
        Another attempt at fixing the build. Make these two functions into instance methods of PluginViewWin.

2006-08-18  Anders Carlsson  <acarlsson@apple.com>

        * plugins/win/PluginViewWin.cpp:
        (WebCore::write):
        (WebCore::destroyStream):
        * plugins/win/PluginViewWin.h:
        Fix build by removing unneeded parameters.

2006-08-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adele.

        Have the NPN functions call into the plugin view. Implement some of the plugin view methods.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::setCurrentPluginView):
        (WebCore::PluginViewWin::currentPluginView):
        (WebCore::PluginViewWin::getURLNotify):
        (WebCore::PluginViewWin::getURL):
        (WebCore::PluginViewWin::postURLNotify):
        (WebCore::PluginViewWin::postURL):
        (WebCore::PluginViewWin::newStream):
        (WebCore::write):
        (WebCore::destroyStream):
        (WebCore::PluginViewWin::userAgent):
        (WebCore::PluginViewWin::status):
        (WebCore::PluginViewWin::getValue):
        (WebCore::PluginViewWin::setValue):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h:
        * plugins/win/npapi.cpp:
        (pluginViewForInstance):
        (NPN_ReloadPlugins):
        (NPN_GetURLNotify):
        (NPN_GetURL):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_NewStream):
        (NPN_Write):
        (NPN_DestroyStream):
        (NPN_UserAgent):
        (NPN_Status):
        (NPN_GetValue):
        (NPN_SetValue):

2006-08-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve and Maciej.

        Add initial implementation of plugin view.

        * WebCore.vcproj/WebCore.vcproj:
        Add files.
        
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::objectContentType):
        (WebCore::FrameWin::createPlugin):
        Implement these functions.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Remove implemented functions.
        
        * platform/win/WidgetWin.cpp: Add this file from the open source repo
        (WebCore::Widget::~Widget):
        Call DestroyWindow on the hWnd.
        
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::PluginDatabaseWin::createPluginView):
        New function which creates a plugin view.
        
        * plugins/win/PluginDatabaseWin.h:
        
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackageWin::load):
        Assign the browser functions. They are just stubs for now.
               
        * plugins/win/PluginViewWin.cpp: Added.
        (WebCore::registerPluginView):
        (WebCore::PluginViewWndProc):
        (WebCore::PluginViewWin::invokeSetWindow):
        (WebCore::PluginViewWin::start):
        (WebCore::PluginViewWin::stop):
        (WebCore::createUTF8String):
        (WebCore::createUTF8StringArray):
        (WebCore::freeStringArray):
        (WebCore::PluginViewWin::~PluginViewWin):
        (WebCore::PluginViewWin::PluginViewWin):
        * plugins/win/PluginViewWin.h: Added.
        (WebCore::PluginViewWin::plugin):
        (WebCore::PluginViewWin::instance):
        * plugins/win/npapi.cpp: Added.
        (NPN_MemAlloc):
        (NPN_MemFree):
        (NPN_MemFlush):
        (NPN_ReloadPlugins):
        (NPN_RequestRead):
        (NPN_GetURLNotify):
        (NPN_GetURL):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_NewStream):
        (NPN_Write):
        (NPN_DestroyStream):
        (NPN_UserAgent):
        (NPN_Status):
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):
        (NPN_GetValue):
        (NPN_SetValue):
        (NPN_GetJavaEnv):
        (NPN_GetJavaPeer):

2006-08-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Add initial implementation of plugin database.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add new files.
        
        * platform/win/TemporaryLinkStubs.cpp:
        Get rid of the PlugInInfoStore stubs.

        * plugins/win/PlugInInfoStoreWin.cpp: Added.
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        * plugins/win/PluginDatabaseWin.cpp: Added.
        (WebCore::PluginDatabaseWin::installedPlugins):
        (WebCore::PluginDatabaseWin::refresh):
        (WebCore::PluginDatabaseWin::plugins):
        (WebCore::PluginDatabaseWin::getPluginsInPaths):
        (WebCore::PluginDatabaseWin::defaultPluginPaths):
        (WebCore::PluginDatabaseWin::isMIMETypeRegistered):
        (WebCore::PluginDatabaseWin::pluginForMIMEType):
        (WebCore::PluginDatabaseWin::pluginForExtension):
        * plugins/win/PluginDatabaseWin.h: Added.
        (WebCore::PluginDatabaseWin::setPluginPaths):
        * plugins/win/PluginPackageWin.cpp: Added.
        (WebCore::PluginPackageWin::~PluginPackageWin):
        (WebCore::getVersionInfo):
        (WebCore::splitString):
        (WebCore::PluginPackageWin::PluginPackageWin):
        (WebCore::PluginPackageWin::fetchInfo):
        (WebCore::PluginPackageWin::load):
        (WebCore::PluginPackageWin::unload):
        (WebCore::PluginPackageWin::unloadWithoutShutdown):
        (WebCore::PluginPackageWin::createPackage):
        (WebCore::PluginPackageWin::hash):
        (WebCore::PluginPackageWin::equal):
        * plugins/win/PluginPackageWin.h: Added.
        (WebCore::PluginPackageWin::name):
        (WebCore::PluginPackageWin::description):
        (WebCore::PluginPackageWin::fileName):
        (WebCore::PluginPackageWin::mimeToDescriptions):
        (WebCore::PluginPackageWin::mimeToExtensions):
        (WebCore::PluginPackageWin::pluginFuncs):
        (WebCore::PluginPackageWinHash::hash):
        (WebCore::PluginPackageWinHash::equal):
        (WTF::):
        * plugins/win/npfunctions.h: Added.

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

        Removing this unintentionally added file.

        * rendering/RenderPopupMenuWin.cpp: Removed.

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

        Reviewed by Steve.

        Branching files from OpenSource tree r15924 to prepare for <select>
        element implementation.

        * WebCore.vcproj/WebCore.vcproj:
        * rendering/RenderPopupMenuWin.h: Added.
        (WebCore::RenderPopupMenuWin::RenderPopupMenuWin):
        * rendering/RenderThemeWin.cpp: Added.
        (WebCore::theme):
        (WebCore::m_textFieldTheme):
        (WebCore::RenderThemeWin::~RenderThemeWin):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeWin::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeWin::addIntrinsicMargins):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::adjustButtonStyle):
        (WebCore::prepareForDrawing):
        (WebCore::doneDrawing):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::setCheckboxSize):
        (WebCore::RenderThemeWin::setRadioSize):
        (WebCore::RenderThemeWin::adjustTextFieldStyle):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::adjustTextAreaStyle):
        (WebCore::RenderThemeWin::paintTextArea):
        (WebCore::RenderThemeWin::createPopupMenu):
        * rendering/RenderThemeWin.h: Added.
        (WebCore::ThemeData::m_state):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::RenderThemeWin::paintCheckbox):
        (WebCore::RenderThemeWin::paintRadio):

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Pull TemporaryLinkStubs.cpp into internal tree to fix the build.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp: Added.
        (notImplemented):
        (FrameView::updateBorder):
        (FrameView::isFrameView):
        (PopUpButton::focusPolicy):
        (PopUpButton::populate):
        (Widget::enableFlushDrawing):
        (Widget::isEnabled):
        (Widget::focusPolicy):
        (Widget::disableFlushDrawing):
        (Widget::lockDrawingFocus):
        (Widget::unlockDrawingFocus):
        (JavaAppletWidget::JavaAppletWidget):
        (TextField::selectAll):
        (TextField::addSearchResult):
        (TextField::selectionStart):
        (TextField::hasSelectedText):
        (TextField::selectedText):
        (TextField::setAutoSaveName):
        (TextField::checksDescendantsForFocus):
        (TextField::setSelection):
        (TextField::setMaxResults):
        (TextField::edited):
        (Slider::Slider):
        (Slider::sizeHint):
        (Slider::setValue):
        (Slider::setMaxValue):
        (Slider::setMinValue):
        (Slider::~Slider):
        (Slider::setFont):
        (Slider::value):
        (ListBox::setSelected):
        (ListBox::sizeForNumberOfLines):
        (ListBox::isSelected):
        (ListBox::appendItem):
        (ListBox::doneAppendingItems):
        (ListBox::setWritingDirection):
        (ListBox::setEnabled):
        (ListBox::clear):
        (ListBox::checksDescendantsForFocus):
        (FileButton::FileButton):
        (FileButton::click):
        (FileButton::sizeForCharacterWidth):
        (FileButton::focusPolicy):
        (FileButton::frameGeometry):
        (FileButton::setFilename):
        (FileButton::baselinePosition):
        (FileButton::setFrameGeometry):
        (FileButton::setDisabled):
        (Slider::focusPolicy):
        (ListBox::focusPolicy):
        (TextField::focusPolicy):
        (Cursor::Cursor):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::searchableIndexIntroduction):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::ServeSynchronousRequest):
        (FrameWin::focusWindow):
        (FrameWin::unfocusWindow):
        (FrameWin::locationbarVisible):
        (FrameWin::issueRedoCommand):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::canRedo):
        (FrameWin::canUndo):
        (FrameWin::registerCommandForRedo):
        (FrameWin::runJavaScriptPrompt):
        (FrameWin::shouldInterruptJavaScript):
        (FrameWin::openURL):
        (FrameWin::print):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::issueCutCommand):
        (FrameWin::issueCopyCommand):
        (FrameWin::passWheelEventToChildWidget):
        (FrameWin::issueUndoCommand):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::issuePasteCommand):
        (FrameWin::scheduleClose):
        (FrameWin::markMisspellings):
        (FrameWin::menubarVisible):
        (FrameWin::personalbarVisible):
        (FrameWin::statusbarVisible):
        (FrameWin::toolbarVisible):
        (FrameWin::issueTransposeCommand):
        (FrameWin::canPaste):
        (FrameWin::objectContentType):
        (FrameWin::canGoBackOrForward):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (FrameWin::createPlugin):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::createNewWindow):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::historyURL):
        (GraphicsContext::addRoundedRectClip):
        (GraphicsContext::addInnerRoundedRectClip):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::moveCursor):
        (WebCore::historyContains):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::findWordBoundary):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (WebCore::ResourceLoader::assembleResponseHeaders):
        (WebCore::ResourceLoader::retrieveCharset):
        (FrameWin::restoreDocumentState):
        (FrameWin::partClearedInBegin):
        (FrameWin::createEmptyDocument):
        (FrameWin::overrideMediaType):
        (FrameWin::handledOnloadEvents):
        (FrameWin::markedTextRange):
        (FrameWin::passSubframeEventToSubframe):
        (FrameWin::lastEventIsMouseUp):
        (FrameWin::addMessageToConsole):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::createFrame):
        (FrameWin::saveDocumentState):
        (FrameWin::registerCommandForUndo):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::incomingReferrer):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::respondToChangedContents):
        (BrowserExtensionWin::BrowserExtensionWin):
        (BrowserExtensionWin::setTypedIconURL):
        (BrowserExtensionWin::setIconURL):
        (BrowserExtensionWin::getHistoryLength):
        (WebCore::CheckIfReloading):
        (WebCore::CheckCacheObjectStatus):
        (Widget::setEnabled):
        (Widget::paint):
        (Widget::setIsSelected):
        (ScrollView::addChild):
        (ScrollView::removeChild):
        (ScrollView::scrollPointRecursively):
        (ScrollView::inWindow):
        (GraphicsContext::setShadow):
        (GraphicsContext::clearShadow):
        (GraphicsContext::beginTransparencyLayer):
        (GraphicsContext::endTransparencyLayer):
        (GraphicsContext::clearRect):
        (GraphicsContext::strokeRect):
        (GraphicsContext::setLineWidth):
        (GraphicsContext::setLineCap):
        (GraphicsContext::setLineJoin):
        (GraphicsContext::setMiterLimit):
        (GraphicsContext::setAlpha):
        (GraphicsContext::setCompositeOperation):
        (GraphicsContext::clip):
        (GraphicsContext::translate):
        (GraphicsContext::rotate):
        (GraphicsContext::scale):
        (Path::Path):
        (Path::~Path):
        (Path::contains):
        (Path::translate):
        (Path::boundingRect):
        (Path::operator=):
        (Path::clear):
        (Path::moveTo):
        (Path::addLineTo):
        (Path::addQuadCurveTo):
        (Path::addBezierCurveTo):
        (Path::addArcTo):
        (Path::closeSubpath):
        (Path::addArc):
        (Path::addRect):
        (Path::addEllipse):
        (TextField::TextField):
        (TextField::~TextField):
        (TextField::setFont):
        (TextField::setAlignment):
        (TextField::setWritingDirection):
        (TextField::maxLength):
        (TextField::setMaxLength):
        (TextField::text):
        (TextField::setText):
        (TextField::cursorPosition):
        (TextField::setCursorPosition):
        (TextField::setEdited):
        (TextField::setReadOnly):
        (TextField::setPlaceholderString):
        (TextField::setColors):
        (TextField::sizeForCharacterWidth):
        (TextField::baselinePosition):
        (TextField::setLiveSearch):
        (PopUpButton::PopUpButton):
        (PopUpButton::~PopUpButton):
        (PopUpButton::setFont):
        (PopUpButton::baselinePosition):
        (PopUpButton::setWritingDirection):
        (PopUpButton::clear):
        (PopUpButton::appendItem):
        (PopUpButton::setCurrentItem):
        (PopUpButton::sizeHint):
        (PopUpButton::frameGeometry):
        (PopUpButton::setFrameGeometry):
        (PlatformScrollBar::PlatformScrollBar):
        (PlatformScrollBar::~PlatformScrollBar):
        (PlatformScrollBar::width):
        (PlatformScrollBar::height):
        (PlatformScrollBar::setEnabled):
        (PlatformScrollBar::paint):
        (PlatformScrollBar::setScrollBarValue):
        (PlatformScrollBar::setKnobProportion):
        (PlatformScrollBar::setRect):
        (ScrollBar::ScrollBar):
        (ScrollBar::setSteps):
        (ScrollBar::scroll):
        (ScrollBar::setValue):
        (ScrollBar::setKnobProportion):
        (ListBox::ListBox):
        (ListBox::~ListBox):
        (ListBox::setSelectionMode):
        (ListBox::setFont):
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):
        (Image::drawTiled):
        (RenderPopupMenuWin::~RenderPopupMenuWin):
        (RenderPopupMenuWin::clear):
        (RenderPopupMenuWin::populate):
        (RenderPopupMenuWin::showPopup):
        (RenderPopupMenuWin::addSeparator):
        (RenderPopupMenuWin::addGroupLabel):
        (RenderPopupMenuWin::addOption):
        (RenderThemeWin::paintMenuList):
        (RenderThemeWin::adjustMenuListStyle):
        (RenderThemeWin::systemFont):

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Fix the build with TOT.

        * WebCore.vcproj/WebCore.vcproj:

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Get this building.

        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/build-generated-files.sh:

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Initial check-in.

        * ChangeLog: Added.
        * WebCore.vcproj/WebCore.sln: Added.
        * WebCore.vcproj/WebCore.vcproj: Added.
        * WebCore.vcproj/build-generated-files.sh: Added.
        * bridge/win/FrameWin.cpp: Added.
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::~FrameWin):
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::submitForm):
        (WebCore::FrameWin::userAgent):
        (WebCore::FrameWin::runJavaScriptAlert):
        (WebCore::FrameWin::runJavaScriptConfirm):
        (WebCore::FrameWin::keyPress):
        (WebCore::FrameWin::setTitle):
        (WebCore::FrameWin::setStatusBarText):
        (WebCore::FrameWin::textFieldDidBeginEditing):
        (WebCore::FrameWin::textFieldDidEndEditing):
        (WebCore::FrameWin::textDidChangeInTextField):
        (WebCore::FrameWin::doTextFieldCommandFromEvent):
        (WebCore::FrameWin::textWillBeDeletedInTextField):
        (WebCore::FrameWin::textDidChangeInTextArea):
        * bridge/win/FrameWin.h: Added.
        (WebCore::Win):
        * platform/win/ResourceLoaderWin.cpp: Added.
        (WebCore::addToOutstandingJobs):
        (WebCore::removeFromOutstandingJobs):
        (WebCore::lookupResourceLoader):
        (WebCore::ResourceLoaderWndProc):
        (WebCore::initializeOffScreenResourceLoaderWindow):
        (WebCore::ResourceLoaderInternal::~ResourceLoaderInternal):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::fileLoadTimer):
        (WebCore::ResourceLoader::cancel):
        * platform/win/ResourceLoaderWin.h: Added.

=== End of merged changes from branches/WindowsMerge ===

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

         Reviewed by Maciej.
 
         Disable whole-view editing for the Gdk port in order to improve the browsing experience.
 
         * platform/gdk/EditorClientGdk.cpp:
         (WebCore::EditorClientGdk::isEditable): Return false to disable whole-view editing
 
2007-06-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=14044
        Autogenerate the JS bindings for HTMLCollection

        - also moves JSHTMLAllCollection into it's own file.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAllCollection.h: Added.
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::toBoolean):
        (WebCore::JSHTMLAllCollection::masqueradeAsUndefined):
        * bindings/js/JSHTMLCollectionCustom.cpp: Added.
        (WebCore::getNamedItems):
        (WebCore::JSHTMLCollection::callAsFunction):
        (WebCore::JSHTMLCollection::implementsCall):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/kjs_html.cpp:
        (WebCore::ImageConstructorImp::ImageConstructorImp):
        (WebCore::ImageConstructorImp::construct):
        * bindings/js/kjs_html.h:
        (WebCore::ImageConstructorImp::implementsConstruct):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::namedItemGetter):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::tags):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::collectionType):
        * html/HTMLCollection.idl:
        * html/HTMLOptionsCollection.idl:

2007-06-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.
        
        <rdar://problem/5232159> REGRESSION: Cannot select text in RSS view

        The selection is updated both on mouse movement and
        when the autoscroll timer fires.  The autoscroll
        code wasn't converting mouse coordinates to layer
        coordinates correctly, and was then using those
        coordinates to create a bad selection.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Use convertToLayerCoordinates.

2007-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Store the root object in a hash set, keyed by the plugin view. This is in preparation for 
        letting plugins invalidate the root object upon destruction

        * page/Frame.cpp:
        (WebCore::Frame::createRootObject):
        (WebCore::Frame::cleanupScriptObjects):
        * page/FramePrivate.h:

2007-06-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add qwebobjectpluginconnector to the build.

        * WebCore.pro:

2007-06-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tristan.
        
        <rdar://problem/5250997> A crash occurs when selecting Undo Typing for a page that has been closed in tab

        * WebCore.exp: Added clearUndoRedoOperations.
        * page/Page.cpp:
        (WebCore::Page::clearUndoRedoOperations): Added.
        * page/Page.h:
        
2007-06-07  David Hyatt  <hyatt@apple.com>

        Fix crash.  Null check layer.  Bug 13984.

        Reviewed by andersca

        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRectForLayer):

2007-06-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Justin.

        Remove incorrect assertions.
        
        These assertions were made on the assumption that 
        TSM would always call with a range that was contained 
        by an editable region.
        
        TSM may call -[WebHTMLView characterIndexForPoint:] on a mouse
        event that is otherwise unrelated to editing, which may
        be outside the current editing region, triggering these 
        assertions.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge convertToNSRange:]):

2007-06-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John.
        
        <rdar://problem/5237074> REGRESSION: editing/unsupported-content/table-delete-003 is failing (13931)
        
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        We wouldn't expand the selection to include a special element 
        at the start of the selection unless the end of the selection 
        was at the end of a special element. Avoid a special 
        element at the start as long as it's fully selected. Ditto for 
        the end.
        * editing/htmlediting.cpp:
        (WebCore::positionBeforeContainingSpecialElement):
        (WebCore::positionAfterContainingSpecialElement):

2007-06-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Patch for  http://bugs.webkit.org/show_bug.cgi?id=14028
        Finish autogenerating the JS bindings for Node

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::JSNode::mark):
        (WebCore::toJS):
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        (WebCore::createJSSVGWrapper):
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorPrototypeFunction::callAsFunction):
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::getDOMNodeForDocument):
        (KJS::ScriptInterpreter::putDOMNodeForDocument):
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        (KJS::ScriptInterpreter::updateDOMNodeDocument):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.cpp:
        (WebCore::toAttr):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h: Removed.
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Node.h:
        (WebCore::Node::parentElement):
        * dom/Node.idl:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Another Gdk and Qt build fix.

        * WebCore.pro:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Gdk and Qt build fix.

        * WebCore.pro:

2007-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13973
        Autogenerate most of the rest of kjs_dom.h/cpp

        - Autogenerate JSNodeList and JSNamedNodeMap.
        - Move JSEventTargetNode, JSNamedNodesCollection, and JSDOMExceptionConstructor 
          into their own files.
        - Rename KJS::DOMEventTargeNode to WebCore::JSEventTargetNode to adhere
          to convention and allow easier code generation.
        - Add JS constructors for JSNodeList and JSNamedNodeMap.
        - Moved more toJS methods into the correct (corresponding) header files.
        - Cleaned up code in order for changes to work.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionConstructor.cpp: Added.
        (WebCore::):
        (WebCore::JSDOMExceptionConstructor::JSDOMExceptionConstructor):
        (WebCore::JSDOMExceptionConstructor::getOwnPropertySlot):
        (WebCore::JSDOMExceptionConstructor::getValueProperty):
        (WebCore::getDOMExceptionConstructor):
        * bindings/js/JSDOMExceptionConstructor.h: Added.
        (WebCore::JSDOMExceptionConstructor::classInfo):
        * bindings/js/JSDOMWindowCustom.cpp: Added.
        (WebCore::JSDOMWindow::customGetOwnPropertySlot):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::mark):
        (WebCore::toJS):
        * bindings/js/JSEventTargetNode.cpp: Added.
        (WebCore::JSEventTargetNode::JSEventTargetNode):
        (WebCore::JSEventTargetNode::getOwnPropertySlot):
        (WebCore::JSEventTargetNode::getValueProperty):
        (WebCore::JSEventTargetNode::put):
        (WebCore::JSEventTargetNode::putValueProperty):
        (WebCore::JSEventTargetNode::setListener):
        (WebCore::JSEventTargetNode::getListener):
        (WebCore::JSEventTargetNode::pushEventHandlerScope):
        (WebCore::JSEventTargetNodePrototypeFunction::callAsFunction):
        (WebCore::toEventTargetNode):
        * bindings/js/JSEventTargetNode.h: Added.
        (WebCore::JSEventTargetNode::):
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp: Added.
        (WebCore::JSNamedNodeMap::canGetItemsForName):
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp: Added.
        (WebCore::):
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        (WebCore::JSNamedNodesCollection::lengthGetter):
        (WebCore::JSNamedNodesCollection::indexGetter):
        (WebCore::JSNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/JSNamedNodesCollection.h: Added.
        (WebCore::JSNamedNodesCollection::classInfo):
        * bindings/js/JSNodeCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/JSNodeListCustom.cpp: Added.
        (WebCore::JSNodeList::callAsFunction):
        (WebCore::JSNodeList::implementsCall):
        (WebCore::JSNodeList::canGetItemsForName):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_events.cpp:
        (KJS::JSLazyEventListener::parseCode):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollection::getNamedItems):
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_window.cpp:
        (WebCore::toJS):
        * bindings/js/kjs_window.h:
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/mac/WebCoreAXObject.mm:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * page/DOMWindow.idl:

2007-06-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.
        
        <rdar://problem/5245519> CrashTracer: [USER] 457 crashes in Mail at WebCore::CSSComputedStyleDeclaration::copyInheritableProperties()
        
        If the user pastes something into a region that ends up being
        invisible, or if the pasted content contains style spans 
        that are render-less, we'll crash when we try to remove
        redundant styles from style spans.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties):
        Add null checks.

2007-06-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/4889598> Problems with moveDown: and moveUp: in Notes with ToDos
        
        The caret would disappear when moving from content above or below
        a ToDo if that ToDo doesn't have any content in it with the same
        x position as the caret. That's because closestLeafChildForXPos
        would return non-editable leaves, and which turn into non-editable
        VisiblePositions, which are invisible.

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Ask closestLeafForXPos to only
        return editable leaves.
        (WebCore::nextLinePosition): Ditto.
        * rendering/RootInlineBox.cpp:
        (WebCore::isEditableLeaf): Added.
        (WebCore::RootInlineBox::closestLeafChildForXPos): If requested,
        return the closest editable leaf. Removed an early return if the
        position is before the first leaf, it's not really much of an
        optimization.
        * rendering/RootInlineBox.h:

2007-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Fix release build.

        * bindings/objc/DOM.mm:
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]): Add missing null initialization.
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]): Add missing null initialization.

2007-06-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13947
        Finish autogenerating the JS DOM traversal code

        - Completely generate JSNodeFilter.
        - Move JSNodeFilterCondition into its own file

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNodeFilterCondition.cpp: Copied from WebCore/bindings/js/kjs_traversal.cpp.
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::mark):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h: Copied from WebCore/bindings/js/kjs_traversal.h.
        * bindings/js/JSNodeFilterCustom.cpp: Added.
        (WebCore::JSNodeFilter::mark):
        (WebCore::toNodeFilter):
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_traversal.cpp: Removed.
        * bindings/js/kjs_traversal.h: Removed.
        * bindings/js/kjs_window.cpp:
        * bindings/objc/DOM.mm:
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]):
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::createNodeIterator):
        (WebCore::Document::createTreeWalker):
        * dom/Document.h:
        * dom/NodeFilter.idl:

2007-06-06  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=14017
        Cairo: Unwanted gradient effect for small stretched images

        * platform/graphics/cairo/ImageCairo.cpp: Use CAIRO_FILTER_NEAREST to
        work around the issue.
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):

2007-06-06  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add an API to create and load plugins.
        Don't include moc files by hand anymore, rather let
        qmake handle them.

        * WebCore.pro:
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::):
        (WebCore::MimeTypeRegistry::getMIMETypeForExtension):
        * platform/qt/QWebPopup.cpp:
        * platform/qt/SharedTimerQt.cpp:

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

        Qt build fix.

        * rendering/RenderTextControl.cpp: Fix case of #include filename.

2007-06-06  Lars Knoll  <lars@trolltech.com>

        Reviewed by Maciej.

        Define WTF_USE_NPOBJECT for Qt. Fix includes
        in HTMLPluginElement and add proper forwarding headers
        from JavaScriptCore.

        * ForwardingHeaders/bindings/npruntime.h: Added.
        * ForwardingHeaders/bindings/runtime.h: Added.
        * config.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:

2007-06-06  David Hyatt  <hyatt@apple.com>

        Bulletproof windowClipRect, since it can be called at crazy times.
        Part of fix for 13972.

        Reviewed by olliej

        * bindings/objc/DOM.mm:
        (-[DOMElement _windowClipRect]):

2007-06-05  Darin Fisher  <darin@chromium.org>

        Reviewed by Dave Hyatt.

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

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcHeight):
        (WebCore::RenderTextControl::calcPrefWidths):

2007-06-05  Kevin McCullough  <kmccullough@apple.com>

        - Respelling Oliver's name right.

2007-06-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Mark and Oliver.

        - http://bugs.webkit.org/show_bug.cgi?id=13352  REGRESSION: Gmail hangs on send message.
        - Now we don't hang, but we do so by avoiding certain legitimate characters, the evangelism bug for this is: <rdar://problem/5252577> gmail does not accept legal characters in the form boundary

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

2007-06-05  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::isValidToken):

2007-06-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5245555> REGRESSION: HTTP header injection in XMLHttpRequest.setRequestHeader
        <rdar://problem/5246208> HTTP injection in XMLHttpRequest.open method parameter
        <rdar://problem/5246242> HTTP header injection in HXMLHttpRequest.setRequestHeader header parameter
        
        Check method names, header names and header values and throw exceptions if any of them are
        invalid. This is what the new XMLHttpRequest spec states that we should do.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::isValidToken):
        (WebCore::isValidHeaderValue):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::setRequestHeader):

2007-06-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Optimize JSCSSStyleDeclaration after performance regression in r21854.

        - Check static table before name getter in JSCSSStyleDeclaration::getOwnPropertySlot()
        - Get rid of a string allocation by keeping string as KJS::Identifier for canGetItemsForName()
          functions.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::canGetItemsForName):
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::canGetItemsForName):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::canGetItemsForName):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::canGetItemsForName):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::canGetItemsForName):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleDeclaration.idl:

2007-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed, tweaked and landed by Anders.

        <rdar://problem/5247178> REGRESSION: With CSS Edit 2.5, a crash occurs at WebCore::DeprecatedString::DeprecatedString when page fails to be extracted
        
        Null check the provisional document loader. If an application stops the load 
        inside of the didFailProvisionalLoad delegate method, the provisional document loader will be nulled out.

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

2007-06-04  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=13986
        Cairo graphics fixes and cleanups

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::surface): Provide surface() accessor.
        * platform/graphics/cairo/AffineTransformCairo.cpp:
        (WebCore::AffineTransform::rotate): Convert from degrees to radians to
        fix rotation.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect): Add save/restore.
        (WebCore::GraphicsContext::rotate): Rename parameter to "radians" to
        avoid further confusion.
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::boundingRect): The cairo_fill_extents() parameters do
        not describe a point/size but rather the two control points of the
        rectangular region.
        (WebCore::Path::contains): Remove needless casts.

2007-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix the buildbot.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):

2007-06-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Kimon Tsinteris.

        <rdar://problem/5241148> REGRESSION: ActivEdit can't perform operations on certain selections
        
        Return valid equivalents from these methods (no [img, 1] for 
        example). ActivEdit was using positions returned from these
        methods to create new DOM Ranges.
        
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::baseNode):
        (WebCore::SelectionController::baseOffset):
        (WebCore::SelectionController::extentNode):
        (WebCore::SelectionController::extentOffset):
        (WebCore::SelectionController::anchorNode):
        (WebCore::SelectionController::anchorOffset):
        (WebCore::SelectionController::focusNode):
        (WebCore::SelectionController::focusOffset):
        * editing/SelectionController.h:

2007-06-04  Rob Buis  <buis@kde.org>

        Fix the svg experimental build.

        * ksvg2/svg/SVGFEFloodElement.cpp:

2007-06-04  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=6170
        CSS1: Properties for :first-letter aren't recalculated on color change

        Mark styles with first-letter as unique.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):

2007-06-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by David Harrison.

        <rdar://problem/5236843> 
        CrashTracer: [USER] 3 crashes in Mail at WebCore::Loader::didReceiveResponse(WebCore::SubresourceLoader*, WebCore::ResourceResponse const&)

        This is by no means the best solution for handling user style sheets. I've filed <rdar://problem/5244734> 
        for tracking that.
        
        * loader/loader.cpp:
        (WebCore::Loader::didReceiveResponse):
        If a load starts while the frame is still in the provisional state 
        (this can be the case when loading the user style sheet), committing the load then causes all
        requests to be removed from the m_requestsLoading map. This means that req might be null here.
        In that case we just return early. 
        
2007-06-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13958
          REGRESSION: Form select menu in iframe destroys form select menu on page

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking): Instead of calling
        the event handler methods directly, post the fake event on the application event
        queue. This ensures that the fake event is handled only after handling of the
        initiating event has ended, and is seen by ancestor frames' event handlers.

2007-06-01  George Staikos  <staikos@kde.org>

        Reviewed by bdash.

        Redo the build fix again after it was backed out

        * WebCore.pro: add an include guard around CSSGrammar.h

2007-05-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/5238177> Continuing after hitting breakpoint doesn't 
        execute the next step.
        
        No test because the only code affected is the debugger, and none of the
        relevant API is exported.
        
        Reverted an accidental change in 21324 that caused originRootObject for
        the window object always to be 0. We could probably just remove the debugger's
        dependency on originRootObject, but I wanted to be safe.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):

2007-05-31  David Hyatt  <hyatt@apple.com>

        Fix for 11768, Flash plugin does not respect clips set via CSS.

        Reviewed by olliej

        * bindings/objc/DOM.mm:
        (-[DOMElement _windowClipRect]):
        * bindings/objc/DOMPrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::windowClipRectForLayer):
        * platform/ScrollView.h:
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):

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

        Reviewed by Adam.

        Fix build bot.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):

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

        Fix Qt and Gdk builds.

        * WebCore.pro: remove bindings/js/JSHTMLAnchorElementCustom.cpp

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

        Reviewed by Geoff.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=10782
        Classes should not override JSObject::toString(ExecState *)

        Remove all overrides of JSObject::toString and JSObject::toPrimitive
        which is a bad practice.  Instead, if an object, like the 
        HTMLAnchorElement, needs to override to toString, it should add
        a function to the JS object which will be called when needed.  This
        also allows developers to override toString and valueOf from within JS.

        Test: fast/js/toString-and-valueOf-override.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp: Removed.
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_window.cpp:
        (KJS::History::):
        (KJS::LocationFunc::callAsFunction):
        (KJS::SelectionFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::toString):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:

2007-05-31  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11272
        Implement currentScale(), setCurrentScale() and currentTranslate() in SVGSVGElement

        Allow zooming and panning, thereby implementing the above methods.

        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::zoomEnabled):
        (WebCore::SVGDocument::startPan):
        (WebCore::SVGDocument::updatePan):
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::setCurrentTranslate):
        * ksvg2/svg/SVGSVGElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::setZoomFactor):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::absoluteTransform):
        * rendering/RenderSVGContainer.h:

2007-05-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Niko.

        Links are activated based on mouse down events instead of click events
        http://bugs.webkit.org/show_bug.cgi?id=12570
        
        Test: svg/custom/prevent-default.svg

        * html/HTMLAnchorElement.cpp: use MiddleButton and RightButton instead of 1 and 2
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): make it function more like the HTML side

2007-05-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - fix layout test editing/style/table-selection.html
        
        This was broken by the change to keep whitespace text nodes in tables. They safely didn't render,
        but the font delta style change command would wrap them in spans, creating extra anonymous table
        cells.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Don't wrap in a span if the text node
        is not rendered.

2007-05-31  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=13941
        Rename WebCore/platform/network/gdk to WebCore/platform/network/curl

        * WebCore.pro:

2007-05-31  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Niko.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13945
        GraphicsContextCairo enhancements necessary for SVG support

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):

2007-05-31  Patti Hoa <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5221920> AXLink is returning a CFString instead of a CFURL for AXURL

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        Convert the url string to an NSURL before returning as the AXURLAttribute

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13943
        Autogenerate the JS bindings for the CSSStyleSheet

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addRule):
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::removeRule):
        * css/CSSStyleSheet.idl:
        * page/DOMWindow.idl:

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13937
        Autogenerate the JS bindings for the CSSValue

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSValueCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSValue.h:
        (WebCore::CSSValue::setCssText):
        * css/CSSValue.idl:

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver the Hun.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13944
        Generate and add missing JS constructors

        * css/CSSRuleList.idl:
        * css/CSSValueList.idl:
        * css/Counter.idl:
        * page/DOMWindow.idl:

2007-05-30  Justin Garcia  <justin.garcia@apple.com>
 
        Reviewed by Darin.
 
        http://bugs.webkit.org/show_bug.cgi?id=13915
        REGRESSION(r21687): editing/inserting/paragraph-separator-* failing pixel test (misspelling markers)

        After r21687, SimplifiedBackwardsTextIterator was no longer 
        emitting a '\n' as it left the first block of a range ending 
        at [block, 0]. So, foo<div>^<br></div> looked like foo^ to
        spell checking (foo wasn't marked as misspelled).

        After r21687, SBTI stopped emitting '\n's in the above case 
        because 1) we stopped incorrectly emitting '\n's for nodes as 
        we entered them and 2) we were and still are incorrectly calling 
        code that should only be called when entering nodes as we leave 
        them and 3) we don't call exitNode(), which is responsible 
        for emitting the '\n' in the above testcase, when we should.

        Before and after r21687, we'd call exitNode() for a node as 
        we traversed in reverse pre-order from its first descendant 
        out to its sibling or one of its ancestors' siblings.  We 
        weren't calling it a) after we'd enter a node that could 
        have children but had none and b) when leaving a container 
        that contained the end of the range used to create the iterator.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::advance): Call exitNode() as we
        leave a childless container node and a node where the range ended.
        * editing/TextIterator.h: Track the end of the range used to create
        the SimplifiedBackwardsTextIterator.

2007-05-30  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Brady.

        Enable logging in the Gdk port.
        http://bugs.webkit.org/show_bug.cgi?id=13936

        * WebCore.pro:
        * platform/NotImplemented.h: Changed to use WTFLogVerbose.
        * platform/gdk/LoggingGdk.cpp: Added.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2007-05-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5198882> CrashTracer: [USER] 7 crashes in 
        Safari at com.apple.WebCore: WebCore::RenderBlock::layoutBlock + 
        2360

        The problem is that we are re-entering layout when we should not. 
        http://trac.webkit.org/projects/webkit/changeset/21778 actually 
        fixed this crash, but we have been inspired to add the same guard 
        in two other possibly-dangerous places.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Add the guard in two more places.

2007-05-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5096134> VO gets stuck on Howto.apple.com
        http://bugs.webkit.org/show_bug.cgi?id=8622
        VisiblePositions aren't canonicalized in some cases
        
        No new test cases added: can't write automated tests 
        for VO.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        VisiblePositions must be recomputed after nodes that
        may have effected their canonicalization are removed.
        * editing/VisiblePosition.cpp:
        (WebCore::canonicalizeCandidate): Added.
        (WebCore::VisiblePosition::canonicalPosition): Canonicalize
        the candidates returned by next/previousCandidate before
        returning them.
        * editing/VisiblePosition.h:
        (WebCore::operator==): Remove the workaround for 8622.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Ditto.

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Dr. Harrison.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13868
        REGRESSION: crash on accessing a new iframe's contentWindow property

        Adds a null check in for the contentWindow property for HTMLIFrameElement
        and HTMLFrameElement.

        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:

2007-05-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13775
          REGRESSION: Popup button text should use "natural" directionality to match the items in the popup menu

        Test: fast/forms/select-writing-direction-natural.html

        * platform/PopupMenu.h: Added the static method itemWritingDirectionIsNatural
        which says whether items in the popup ignore the CSS text-align and direction
        properties and instead are left-aligned and use natural writing direction.
        * platform/gdk/PopupMenuGdk.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/wx/TemporaryLinkStubs.cpp:
        (PopupMenu::itemWritingDirectionIsNatural):
        * rendering/RenderMenuList.cpp:
        (WebCore::textDirectionForParagraph): Added this helper function that uses
        the Unicode Bidi Algorithm rules P2 and P3 to determine the writing direction
        of text.
        (WebCore::RenderMenuList::adjustInnerStyle): Made the alignment and direction
        adjustment conditional on the popup implementation.
        (WebCore::RenderMenuList::setText): Added call to adjustInnerStyle() since
        the style depends on the text when natural writing direction is used.

2007-05-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5200795> REGRESSION (r21057): lineBoxRects doesn't match actual text when wrapping occurs

        Use box->end() instead of box->len().

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):

2007-05-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13919
        Autogenerate the JS bindings for the CSSRule and its subclasses

        - subclasses generated are CSSCharsetRule, CSSFontFaceRule, CSSImportRule
          CSSMediaRule, CSSPageRule and CSSStyleRule.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSCharsetRule.h:
        (WebCore::CSSCharsetRule::setEncoding):
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSPageRule.h:
        * css/CSSPageRule.idl:
        * css/CSSRule.cpp:
        (WebCore::CSSRule::setCssText):
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:
        * css/CSSStyleRule.idl:
        * page/DOMWindow.idl: add new constructors.

2007-05-30  Mark Rowe  <mrowe@apple.com>

        Build fixes after r21889.  Add missing #includes.

        * ForwardingHeaders/kjs/function.h: Added.
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_window.h:

2007-05-30  Mark Rowe  <mrowe@apple.com>

        Gdk build fix.  Update WidgetGdk to use NotImplemented.h.

        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):

2007-05-29  Holger Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Make ScrollView use a GtkLayout. This class matches QScrollView the most and promises
        to ease the implementation of ScrollView::addChild. GtkLayout should be resource friendly
        even with huge width and heights of frames.
        Make Widget aware of GtkLayout to use the right GdkWindow as drawable. For GtkLayout one must
        draw on the bin_window.
        Remove the layer violation from FrameGdk.cpp and ScrollView. FrameGdk is no longer responsible to
        implement scrolling on keyboard events. ScrollView is no longer required to know that it could be
        a FrameView and handles scrolling of Frames magically.

        * platform/ScrollView.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::FrameGdk::keyPress):
        (WebCore::FrameGdk::handleGdkEvent):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::setFrameGeometry):
        (WebCore::ScrollView::updateGeometry):
        (WebCore::ScrollView::setGtkWidget):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gdk/TemporaryLinkStubs.cpp: Move Widget methods to WidgetGdk.cpp
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::setGtkWidget):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::setEnabled):
        (WebCore::Widget::isEnabled):
        (WebCore::Widget::removeFromParent):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2007-05-29  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Curl (linux/gdk) networking improvements: 
        a) POST support
        b) don't use CURL in a re-entrant way.
        c) turn on curl's internal debugging support in a debug build if the DEBUG_CURL environment variable is set.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::setupPOST):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::removeScheduledJob):
        (WebCore::ResourceHandleManager::startScheduledJobs):
        (WebCore::ResourceHandleManager::startJob):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/gdk/ResourceHandleManager.h:
        (WebCore::ResourceHandleList::ResourceHandleList):
        (WebCore::ResourceHandleList::next):
        (WebCore::ResourceHandleList::job):
        (WebCore::ResourceHandleList::setRemoved):
        (WebCore::ResourceHandleList::removed):

2007-05-29  Sam Weinig  <sam@webkit.org>

        Fix the Qt and Gdk builds.

        * WebCore.pro:

2007-05-29  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5109711> REGRESSION: Focus ring artifacts appear around a widget's search field at times (Address Book, Dictionary)

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::paintSearchField):
          We only need this hack for drawing the search field focus ring on Tiger.  On Leopard, drawWithFrame correctly draws the cell's focus ring.

2007-05-29  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13899

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::strokeArc): Use cairo_arc_negative() to fix
        CSS rounded borders.
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer): save/restore is
        redundant. push/pop group does this implicitly.

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13912
        Autogenerate the JS bindings for the MediaList

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/MediaList.idl:
        * page/DOMWindow.idl: Add constructor.

2007-05-29  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Maciej.

        Fixed some rendering issues for <select>s on Windows.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListStyle):
        (WebCore::RenderThemeWin::paintMenuList):
        * rendering/RenderThemeWin.h:

2007-05-29  David Hyatt  <hyatt@apple.com>

        Fold the invalidateVerticalPositions crawl into the bidi iteration.
        This makes it more correct (since we won't drill into elements that
        did not need to be reset) and cuts out an extra walk of all our children.
        We're still O(n^2) as new content streams in, but this at least cuts
        out one separate O(n^2) crawl.

        Reviewed by olliej

        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::invalidateVerticalPosition):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13908
        Autogenerate the JS bindings for the StyleSheet

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSStyleSheetCustom.cpp: Added.
        (WebCore::toJS):
        (WebCore::JSStyleSheet::toBoolean):
        * bindings/js/kjs_css.cpp:
        (KJS::):
        (KJS::DOMCSSStyleSheet::DOMCSSStyleSheet):
        (KJS::DOMCSSStyleSheet::getOwnPropertySlot):
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/StyleSheet.idl:
        * page/DOMWindow.idl: Add new constructor.

2007-05-29  David Hyatt  <hyatt@apple.com>

        Make sure <embed> does not allow an end tag.

        Reviewed by olliej

        * html/HTMLEmbedElement.h:
        (WebCore::HTMLEmbedElement::endTagRequirement):

2007-05-29  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/5213039> REGRESSION: Wells Fargo registration page returns blank

        Roll out updated fix for 11866 that tried to make reset work for hidden inputs.  Since
        all browsers update the value attribute when setting the value, it doesn't really make sense to reset.
        Its true that IE does support resetting these controls, but in this case, it doesn't really make sense to have
        another place to store an alternate version of the value.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::reset):
        * html/HTMLInputElement.h:

2007-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - removed the general case optimization for innerHTML because some sites
          rely on setting innerHTML to trigger loading plug-ins for example; we
          could consider bringing it back some day, perhaps with a list of element
          types to exclude

        * dom/CharacterData.cpp: (WebCore::CharacterData::setData):
        Do nothing if the old data is identical to the new data.

        * html/HTMLElement.cpp:
        (WebCore::replaceChildrenWithFragment): Remove childrenAreEqual optimization.
        (WebCore::replaceChildrenWithText): Remove optimization for cases where the
        text data is identical to the new data, since CharacterData handles that now.
        (WebCore::HTMLElement::setOuterHTML): Remove childrenAreEqual optimization.

2007-05-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13904
          REGRESSION: Search fields with a results popup do not always draw the popup arrow

        Covered by fast/forms/box-shadow-override.html

        The search button draws a popup arrow depending on whether the
        search menu template is set, rather than on the maximum number of recent
        search strings.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration): Removed the
        call to -setMaxmiumRecents:.
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton): Replaced calling
        -setMaximumRecents: with setting the search menu template.
        (WebCore::RenderThemeMac::search): Removed initialization of the menu.
        (WebCore::RenderThemeMac::searchMenuTemplate): Added. Returns an empty
        NSMenu to be used as the search menu template.

2007-05-29  David Hyatt  <hyatt@apple.com>

        Fix for bug 13907, <noscript> should be allowed inside <head> when
        scripting is enabled.

        Reviewed by aroben

        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::checkDTD):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix crash in http://bugs.webkit.org/show_bug.cgi?id=13792
          REGRESSION: WebKit doesn't show this javascript screenshot page (and crashes after click on its "hidden link")

        Test: fast/frames/removal-before-attach-crash.html

        Delayed the queueing of the post-attach callback until attach().

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Replaced call to the
        HTMLElement implementation with a call to the HTMLFrameOwnerElement
        implementation, as the latter is the parent class.
        (WebCore::HTMLFrameElementBase::insertedIntoDocument): Instead of queueing
        the post-attach callback here, just set a flag telling us to do so
        at the beginning of attach().
        (WebCore::HTMLFrameElementBase::removedFromDocument): Reset the above flag.
        (WebCore::HTMLFrameElementBase::attach): If this is the first attach() after
        being inserted into the document, queue a post-attach callback to load the
        frame.
        (WebCore::HTMLFrameElementBase::willRemove): Changed to call up to the correct
        parent class.
        (WebCore::HTMLFrameElementBase::setFocus): Ditto.
        * html/HTMLFrameElementBase.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::mapToEntry): Replaced call to the HTMLElement
        implementation with a call to the HTMLFrameOwnerElement implementation,
        as the latter is the parent class.
        (WebCore::HTMLPlugInElement::parseMappedAttribute): Ditto.
        (WebCore::HTMLPlugInElement::checkDTD): Ditto.
        (WebCore::HTMLPlugInElement::detach): Ditto.

2007-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13602
          Amazon product pages keep repainting over and over again

        - fix first-letter when the text of the affected text node is changed

        Optimize setInnerHTML, setOuterHTML, and setInnerText so they don't change the DOM at all
        if they don't need to.

        Test: fast/dom/HTMLElement/set-inner-outer-optimization.html
        Test: fast/css/first-letter-detach.html

        * html/HTMLElement.cpp:
        (WebCore::equal): Added. Helper function that compares two Text nodes or two NamedAttrMap
        attribute maps.
        (WebCore::shallowEqual): Added. Helper function that compares two Element nodes or two
        arbitrary nodes.
        (WebCore::childrenAreEqual): Added. Helper functions that compare children of nodes.
        (WebCore::hasOneChild): Added. Helper function.
        (WebCore::hasOneTextChild): Added. Helper function.
        (WebCore::replaceChildrenWithFragment): Added. Helper function used by setInnerHTML and
        setInnerText. Optimizes the cases where all the nodes are the same, where both the current
        and the new content are single text nodes, and where the current content is a single node
        that can be replaced with replaceChild.
        (WebCore::replaceChildrenWithText): Added. Helper function used by setInnerText. Optimizes
        the case where the current content is a single text node or a single node that can be
        replaced with replaceChild.
        (WebCore::HTMLElement::setInnerHTML): Changed to call replaceChildrenWithFragment.
        (WebCore::HTMLElement::setOuterHTML): Added special case to optimize when the new content
        exactly matches the current node.
        (WebCore::HTMLElement::setInnerText): Changed to call replaceChildrenWithText in a few
        cases instead of doing removeChildren/appendChild. Changed code that was using
        DeprecatedString to instead use String. Changed general case to use a document fragment
        and replaceChildrenWithFragment.

        * dom/CharacterData.cpp: (WebCore::CharacterData::dispatchModifiedEvent):
        Fixed bug where we would not dispatch the DOMSubtreeModified event unless someone
        was registered for the DOMCharacterDataModified event. Caused trouble in the test.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::updateFirstLetter): Set first-letter
        after the setStyle call so calls to setTextInternal inside setStyle don't clear it.

        * rendering/RenderText.h: Made setTextInternal virtual so that RenderTextFragment can do
        appropriate work when the text changes.

        * rendering/RenderTextFragment.h: Added an override of setTextInternal. Removed the
        firstLetter parameter to the constructor and made it a separate setter. Also changed
        m_generatedContentStr to m_contentString to match the getter function.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::RenderTextFragment): Removed firstLetter parameter.
        (WebCore::RenderTextFragment::setTextInternal): When the text changes, destroy the
        first-letter node and reset the fragment values so that RenderBlock::updateFirstLetter,
        which will run during layout, will create a new first-letter child. Otherwise we end up
        with the first letter of the old text.

2007-05-29  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * platform/NotImplemented.h:

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Consolidate platform dependent notImplemented() macros
        into one platform independent macro that uses WTFLog.

        * platform/NotImplemented.h:

2007-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - a clean-up pass on form-related aspects of the recent JSHTMLElement patch

        * bindings/js/JSHTMLElementCustom.cpp: (WebCore::JSHTMLElement::pushEventHandlerScope):
        Replace the call to formForEventHandlerScope() with a call to the new form() function.
        And removed the now-uneeded code to search for a form ancestor.

        * html/HTMLElement.h: Added a general-purpose form() function. The intent is to return
        the form ancestor if any, but return the associated form for a form control, which isn't
        always an ancestor of the control. To keep form() efficient for form controls, it's an
        inline that calls a virtual, allowing a derived class to override it with an inline.
        This replaces formForEventHandlerScope(). Also added findFormAncestor() to use here and
        to replace the multiple loops found elsewhere to search for the nearest form ancestor.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::findFormAncestor): Added.
        (WebCore::HTMLElement::virtualForm): Added. Calls findFormAncestor().

        * html/HTMLGenericFormElement.h: Suggested name change to HTMLFormControlElement.
        Removed the confusing getForm() function, which is superceded by findFormAncestor.
        Removed the unused onSelect() function. Removed the override of formForEventHandlerScope(),
        replacing it with an override of virtualForm().
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::HTMLGenericFormElement): Use findFormAncestor
        instead of getForm.
        (WebCore::HTMLGenericFormElement::insertedIntoTree): Ditto.
        (WebCore::HTMLGenericFormElement::virtualForm): Added.

        * html/HTMLLabelElement.h: Removed now-unneeded form() and formForEventHandlerScope()
        functions, since base class behavior is now good enough. Renamed formElement() to
        correspondingControl(), since that's the terminology used elsewhere in the code,
        and the old name was unnecessarily confusing.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::correspondingControl): Renamed. Removed unnecessary
        special case for empty ID, since getElementById already returns 0 for that case.
        (WebCore::HTMLLabelElement::setActive): Updated for name change.
        (WebCore::HTMLLabelElement::setHovered): Ditto.
        (WebCore::HTMLLabelElement::defaultEventHandler): Ditto.
        (WebCore::HTMLLabelElement::focus): Ditto.
        (WebCore::HTMLLabelElement::accessKeyAction): Ditto.

        * html/HTMLObjectElement.h: Removed now-unneeded form() and formForEventHandlerScope()
        functions, since base class behavior is now good enough. Also removed forward
        declaration of KJS::Bindings::Instance -- since the type is the return value of a
        function from the base class, it's guaranteed to be declared in the base class header.
        * html/HTMLObjectElement.cpp: Ditto.

        * bridge/mac/WebCoreAXObject.mm: (labelForElement): Updated for name change.

2007-05-29  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by George and Niko

        Making the convenience method notImplemented convenient
        for the Qt port.

        * platform/NotImplemented.h:

2007-05-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13902
          Autogenerate the JS bindings for the CSSStyleDeclaration

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp: Added.
        (WebCore::cssPropertyName):
        (WebCore::isCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::canGetItemsForName):
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        (WebCore::JSCSSStyleDeclaration::customPut):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_css.cpp:
        * bindings/js/kjs_css.h:
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSStyleDeclaration.idl:

2007-05-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13896
          REGRESSION (NativePopup): Reproductible crasher on Google Coop control panel

        Test: fast/forms/select-display-none-style-resolve.html

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::attach): Do not compute style if the parent
        does not have style.
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::attach): Ditto.

2007-05-28  Sam Weinig  <sam@webkit.org>

        Fix Gdk and Qt builds.

        * WebCore.pro:

2007-05-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13894
        Remove the legacy class KJS::JSHTMLElement

        - Now that all of the subclasses of JSHTMLElement are
          autogenerated and no longer rely on the legacy parent,
          we can remove it and update all the HTML idl files to
          reflect so.

        - Also adds JSHTMLBlockquoteElement's JS constructor which
          was mistakingly missing.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp:
        (WebCore::JSHTMLAnchorElement::toString):
        * bindings/js/JSHTMLElementCustom.cpp: Added.
        (WebCore::JSHTMLElement::pushEventHandlerScope):
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::):
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
        (WebCore::JSHTMLInputElementBase::put):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/kjs_html.cpp:
        (KJS::runtimeObjectCustomGetOwnPropertySlot):
        * bindings/js/kjs_html.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::formForEventHandlerScope):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::formForEventHandlerScope):
        * html/HTMLGenericFormElement.h:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::form):
        (WebCore::HTMLLabelElement::formForEventHandlerScope):
        * html/HTMLLabelElement.h:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::formForEventHandlerScope):
        * html/HTMLObjectElement.h:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:
        * page/DOMWindow.idl:

2007-05-28  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by andersca

        Adding Qt related constructor/casting operators
        to the AtomicString and updating the project
        file for new Qt settings api using those.

        * WebCore.pro:
        * platform/AtomicString.h:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Qt and Gdk build fix.

        * WebCore.pro:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Hyatt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13893
        Autogenerate the JS bindings for the HTMLObjectElement, 
        HTMLEmbedElement and HTMLAppletElement

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAppletElementCustom.cpp: Added.
        (WebCore::JSHTMLAppletElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLAppletElement::customPut):
        (WebCore::JSHTMLAppletElement::implementsCall):
        (WebCore::JSHTMLAppletElement::callAsFunction):
        (WebCore::JSHTMLAppletElement::canGetItemsForName):
        (WebCore::JSHTMLAppletElement::nameGetter):
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp: Added.
        (WebCore::JSHTMLEmbedElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLEmbedElement::customPut):
        (WebCore::JSHTMLEmbedElement::implementsCall):
        (WebCore::JSHTMLEmbedElement::callAsFunction):
        (WebCore::JSHTMLEmbedElement::canGetItemsForName):
        (WebCore::JSHTMLEmbedElement::nameGetter):
        * bindings/js/JSHTMLObjectElementCustom.cpp: Added.
        (WebCore::JSHTMLObjectElement::customGetOwnPropertySlot):
        (WebCore::JSHTMLObjectElement::customPut):
        (WebCore::JSHTMLObjectElement::implementsCall):
        (WebCore::JSHTMLObjectElement::callAsFunction):
        (WebCore::JSHTMLObjectElement::canGetItemsForName):
        (WebCore::JSHTMLObjectElement::nameGetter):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::toString):
        (KJS::JSHTMLElement::pushEventHandlerScope):
        (KJS::runtimeObjectGetter):
        (KJS::runtimeObjectPropertyGetter):
        (KJS::runtimeObjectCustomGetOwnPropertySlot):
        (KJS::runtimeObjectCustomPut):
        (KJS::runtimeObjectImplementsCall):
        (KJS::runtimeObjectCallAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::classInfo):
        * bindings/scripts/CodeGeneratorJS.pm: Add support for 
        CustomGetOwnPropertySlot, CustomPutFunction, CustomCall,
        and SVGCheckSecurityDocument properties.
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        * page/DOMWindow.idl: Uncomment constructors.

2007-05-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Gdk build fix.

        * platform/graphics/Path.h:

2007-05-27  Sam Weinig  <sam@webkit.org>

        Gdk build fix.  Forgot to update a few instances of notImplementedGdk() to notImplemented().

        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::ignoreWordInSpellDocument):
        (WebCore::EditorClientGdk::learnWord):
        (WebCore::EditorClientGdk::checkSpellingOfString):
        (WebCore::EditorClientGdk::checkGrammarOfString):
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        (WebCore::EditorClientGdk::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientGdk::showSpellingUI):
        (WebCore::EditorClientGdk::spellingUIIsShowing):
        (WebCore::EditorClientGdk::getGuessesForWord):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::dashboardRegionsChanged):
        * platform/gdk/PlatformScrollBarGdk.cpp:
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Widget::setEnabled):
        (Widget::isEnabled):
        (Widget::removeFromParent):
        (Widget::paint):
        (Widget::setIsSelected):
        (Widget::invalidate):
        (Widget::invalidateRect):

2007-05-27  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Sam and Oliver.

        Implement PathCairo. This patch is based on changes in Mike Emmel's
        WebKit fork with some additional clean-ups and updates.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/CairoPath.h: Added.
        (CairoPath::CairoPath):
        (CairoPath::~CairoPath):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clip):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::translate):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addRect):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArc):
        (WebCore::Path::addArcTo):
        (WebCore::Path::addEllipse):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::boundingRect):
        (WebCore::Path::contains):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::debugString):

2007-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Sam Weinig.

        Consolidate all notImplemented() macro definitions into
        one header file for all platforms.

        * loader/gdk/DocumentLoaderGdk.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGdk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGdk::createPlugin):
        (WebCore::FrameLoaderClientGdk::createFrame):
        (WebCore::FrameLoaderClientGdk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGdk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::overrideMediaType):
        (WebCore::FrameLoaderClientGdk::windowObjectCleared):
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        (WebCore::FrameLoaderClientGdk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGdk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGdk::restoreViewState):
        (WebCore::FrameLoaderClientGdk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGdk::makeDocumentView):
        (WebCore::FrameLoaderClientGdk::makeRepresentation):
        (WebCore::FrameLoaderClientGdk::forceLayout):
        (WebCore::FrameLoaderClientGdk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGdk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGdk::detachedFromParent1):
        (WebCore::FrameLoaderClientGdk::detachedFromParent2):
        (WebCore::FrameLoaderClientGdk::detachedFromParent3):
        (WebCore::FrameLoaderClientGdk::detachedFromParent4):
        (WebCore::FrameLoaderClientGdk::loadedFromCachedPage):
        (WebCore::FrameLoaderClientGdk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGdk::dispatchWillClose):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGdk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGdk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGdk::dispatchShow):
        (WebCore::FrameLoaderClientGdk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGdk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGdk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGdk::willChangeTitle):
        (WebCore::FrameLoaderClientGdk::finishedLoading):
        (WebCore::FrameLoaderClientGdk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGdk::setDefersLoading):
        (WebCore::FrameLoaderClientGdk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGdk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGdk::clearArchivedResources):
        (WebCore::FrameLoaderClientGdk::canHandleRequest):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):
        (WebCore::FrameLoaderClientGdk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGdk::didFinishLoad):
        (WebCore::FrameLoaderClientGdk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGdk::setTitle):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGdk::download):
        (WebCore::FrameLoaderClientGdk::cancelledError):
        (WebCore::FrameLoaderClientGdk::blockedError):
        (WebCore::FrameLoaderClientGdk::cannotShowURLError):
        (WebCore::FrameLoaderClientGdk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGdk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGdk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGdk::shouldFallBack):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToCachedPage):
        (WebCore::FrameLoaderClientGdk::canCachePage):
        (WebCore::FrameLoaderClientGdk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGdk::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientGdk::setMainDocumentError):
        (WebCore::FrameLoaderClientGdk::startDownload):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForReload):
        * loader/qt/DocumentLoaderQt.cpp:
        * page/gdk/ContextMenuClientGdk.cpp:
        (WebCore::ContextMenuClientGdk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGdk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGdk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGdk::downloadURL):
        (WebCore::ContextMenuClientGdk::copyImageToClipboard):
        (WebCore::ContextMenuClientGdk::searchWithGoogle):
        (WebCore::ContextMenuClientGdk::lookUpInDictionary):
        (WebCore::ContextMenuClientGdk::speak):
        (WebCore::ContextMenuClientGdk::stopSpeaking):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * page/qt/EventHandlerQt.cpp:
        * page/qt/FrameQt.cpp:
        * platform/NotImplemented.h: Added.
        * platform/gdk/CursorGdk.cpp:
        (WebCore::Cursor::Cursor):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::shouldDeleteRange):
        (WebCore::EditorClientGdk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGdk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGdk::spellCheckerDocumentTag):
        (WebCore::EditorClientGdk::shouldBeginEditing):
        (WebCore::EditorClientGdk::shouldEndEditing):
        (WebCore::EditorClientGdk::shouldInsertText):
        (WebCore::EditorClientGdk::shouldChangeSelectedRange):
        (WebCore::EditorClientGdk::shouldApplyStyle):
        (WebCore::EditorClientGdk::didBeginEditing):
        (WebCore::EditorClientGdk::respondToChangedContents):
        (WebCore::EditorClientGdk::respondToChangedSelection):
        (WebCore::EditorClientGdk::didEndEditing):
        (WebCore::EditorClientGdk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGdk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGdk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::registerCommandForUndo):
        (WebCore::EditorClientGdk::registerCommandForRedo):
        (WebCore::EditorClientGdk::clearUndoRedoOperations):
        (WebCore::EditorClientGdk::canUndo):
        (WebCore::EditorClientGdk::canRedo):
        (WebCore::EditorClientGdk::undo):
        (WebCore::EditorClientGdk::redo):
        (WebCore::EditorClientGdk::shouldInsertNode):
        (WebCore::EditorClientGdk::pageDestroyed):
        (WebCore::EditorClientGdk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGdk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGdk::handleInputMethodKeypress):
        (WebCore::EditorClientGdk::textFieldDidBeginEditing):
        (WebCore::EditorClientGdk::textFieldDidEndEditing):
        (WebCore::EditorClientGdk::textDidChangeInTextField):
        (WebCore::EditorClientGdk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGdk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGdk::textDidChangeInTextArea):
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::print):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::dragImageForSelection):
        * platform/gdk/NotImplementedGdk.h: Removed.
        * platform/gdk/PopupMenuGdk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::adjustTextFieldStyle):
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::update):
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameView::updateBorder):
        (WebCore::findNextWordFromIndex):
        (WebCore::currentTextBreakLocaleID):
        (ChromeClientGdk::chromeDestroyed):
        (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):
        (ChromeClientGdk::closeWindowSoon):
        (ChromeClientGdk::canTakeFocus):
        (ChromeClientGdk::takeFocus):
        (ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (ChromeClientGdk::addMessageToConsole):
        (ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (ChromeClientGdk::runJavaScriptAlert):
        (ChromeClientGdk::runJavaScriptConfirm):
        (ChromeClientGdk::runJavaScriptPrompt):
        (ChromeClientGdk::setStatusbarText):
        (ChromeClientGdk::shouldInterruptJavaScript):
        (ChromeClientGdk::tabsToLinks):
        (ChromeClientGdk::windowResizerRect):
        (ChromeClientGdk::addToDirtyRegion):
        (ChromeClientGdk::scrollBackingStore):
        (ChromeClientGdk::updateBackingStore):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (SearchPopupMenu::saveRecentSearches):
        (SearchPopupMenu::loadRecentSearches):
        (SearchPopupMenu::SearchPopupMenu):
        (SearchPopupMenu::enabled):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (ResourceHandle::willLoadFromCache):
        (ResourceHandle::loadsBlocked):
        (ResourceHandle::loadResourceSynchronously):
        (Icon::Icon):
        (Icon::~Icon):
        (Icon::newIconForFile):
        (Icon::paint):
        (Font::selectionRectForComplexText):
        (Font::drawComplexText):
        (Font::floatWidthForComplexText):
        (Font::offsetForPositionForComplexText):
        (CachedPage::close):
        (Editor::newGeneralClipboard):
        (Pasteboard::generalPasteboard):
        (Pasteboard::writeSelection):
        (Pasteboard::writeURL):
        (Pasteboard::writeImage):
        (Pasteboard::clear):
        (Pasteboard::canSmartReplace):
        (Pasteboard::documentFragment):
        (Pasteboard::plainText):
        (Pasteboard::Pasteboard):
        (Pasteboard::~Pasteboard):
        (ContextMenu::ContextMenu):
        (ContextMenu::~ContextMenu):
        (ContextMenu::appendItem):
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (WebCore::supportedKeySizes):
        (WebCore::systemBeep):
        (WebCore::userIdleTime):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/gdk/ImageGdk.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/IconQt.cpp:
        * platform/graphics/qt/ImageQt.cpp:
        * platform/network/gdk/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPUT):
        (WebCore::ResourceHandleManager::setupPOST):
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/qt/CursorQt.cpp:
        * platform/qt/DragDataQt.cpp:
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/MimeTypeRegistryQt.cpp:
        * platform/qt/PasteboardQt.cpp:
        * platform/qt/PlatformScrollBarQt.cpp:
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextBoundaries.cpp:
        * platform/qt/WidgetQt.cpp:
        * platform/win/FontWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * platform/wx/ClipboardWx.cpp:
        * platform/wx/FontWx.cpp:
        * platform/wx/ScrollViewWx.cpp:
        * platform/wx/SharedTimerWx.cpp:
        * platform/wx/TemporaryLinkStubs.cpp:

2007-05-27  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=13828
        x/y values on rootmost <svg> elements should be ignored

        Make sure that root-most <svg> elements do not take into account x/y.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcViewport):

2007-05-26  David Hyatt  <hyatt@apple.com>

        Fix for radar bug 5219562, PNG isn't displayed on SVG test suite.
        Improve <object> error handling so that it recovers properly when
        <td> is used inside it.

        Reviewed by olliej

        Added fast/invalid/td-inside-object.html

        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::tagPriority):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-26  David Hyatt  <hyatt@apple.com>

        Don't compare the "isset" variables in background layers, since they
        lead us to turn off the Aqua look incorrectly, even when the background
        matches the default.

        Reviewed by olliej

        * rendering/RenderStyle.cpp:
        (WebCore::BackgroundLayer::operator==):

2007-05-26  David Hyatt  <hyatt@apple.com>

        Improve the </p> -> <p></p> error message to not spew two errors.
        Fix a bug where errors reported inside document.write didn't get
        reported as such because of a mistake in the notation of SegmentedString.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::processCloseTag):
        * platform/SegmentedString.h:
        (WebCore::SegmentedSubstring::clear):

2007-05-26  David Hyatt  <hyatt@apple.com>

        Fix for bug 13887, percentage height block not sized correctly inside
        positioned percentage height containing block.

        Reviewed by mitz

        fast/block/positioning/complex-percentage-height.html

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

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver Hunt.

        - finish fixing http://bugs.webkit.org/show_bug.cgi?id=13871
          Box shadow should not apply to Aqua-themed controls

        Covered by fast/forms/box-shadow-override.html

        I forgot to include adjustSliderThumbStyle in the previous patch and the
        test didn't detect it because of a bug introduced in r21739.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13876
          Box-Shadow disappears if shadow doesn't fit in the window size

        Tests: fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2007-05-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13605
        REGRESSION: Browser crashes when switching Kotoeri input modes

        The problem could no longer be reproduced with Kotoeri thanks to
        a fix in <http://trac.webkit.org/projects/webkit/changeset/21728>,
        but we still need to protect from invalid ranges passed from
        input methods.

        Test: editing/input/replace-invalid-range.html

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge selectNSRange:]): Added a null check.

2007-05-26  Darin Adler  <darin@apple.com>

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        Alexey pointed out that I was wrong about object lifetime, so
        rolling this change out.

2007-05-26  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        Fixed code where a temporary String is used after destroyed.

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13842
          Simplify Color::light() and Color::dark()

        Not testable.

        * platform/graphics/Color.cpp:
        (WebCore::Color::light):
        (WebCore::Color::dark):

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13870
          RenderFrameSet should only allow frame and frameset children

        Covered by fast/frames/inline-object-inside-frameset.html

        * rendering/RenderFrame.h:
        (WebCore::RenderFrame::isFrame): Added.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint): Removed check for inline objects that is
        no longer needed.
        (WebCore::RenderFrameSet::isChildAllowed): Added. Allows the child only
        if it is a frame or another frameset.
        * rendering/RenderFrameSet.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isFrame): Added.

2007-05-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13871
          Box shadow should not apply to Aqua-themed controls

        Test: fast/forms/box-shadow-override.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustCheckboxStyle):
        (WebCore::RenderTheme::adjustRadioStyle):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustButtonStyle):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):

2007-05-26  Holger Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        * platform/gdk/FrameGdk.cpp: Catch up to make it compile
        (WebCore::FrameGdk::FrameGdk): The Settings is now owned by the Page

2007-05-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver of the Hunt.

        Fixed <rdar://problem/5230247> at least 43 xhtml tests fail in 
        Leopard because they are being interpreted as html

        Adds a work around for <rdar://problem/5230154> which explicitly
        sets local .xhtml files to have the MIME type application/xhtml+xml.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2007-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/5055182> The page cache has no global cap.
        
        Beefed up the PageCache class to track which HistoryItems are 
        cached, and decide how to evict old HistoryItems as new ones are
        added.

        * history/BackForwardList.cpp: Removed support for managing the page cache
        through the BackForwardList since this is deprecated in Mac's 
        WebBackForwardList, and doesn't exist on other platforms.
        
        Added a Page* back pointer so that Mac WebBackForwardList can still support 
        its deprecated API, using the new hotness. This isn't a big burden, since 
        Page is responsible for calling BackForwardList::close upon destruction, 
        anyway.

        * history/HistoryItem.cpp: Replaced CachedPage* with boolean that tells
        you whether you're in the page cache. This prevents us from having more
        than one persistent repository for cached pages.

        * history/PageCache.cpp: If you're playing along at home, this code is 
        the reason for the patch.

        * loader/FrameLoader.cpp: If you're playing along at home, the minuses in
        this file are the reason for the patch.
        
        Replaced call to FrameLoaderClient::loadedFromCachedPage with its one-line
        implementation because WebCore calling itself through WebKit is uncivilized.

        * page/Settings.cpp: Added support for removing a Page's HistoryItems from
        the page cache.

2007-05-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13869
          Many leaks seen on buildbot after r21735

        - fix another regression from r21739: ::-webkit-slider-thumb style not
          applied.

        Test: fast/forms/slider-thumb-stylability.html

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setStyle):
        (WebCore::RenderSlider::createThumbStyle):

2007-05-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Harrison.

        <rdar://problem/5228141> 
        REGRESSION: Can't apply style to selection that ends after an image

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        Use range compliant equivalents when creating the Range
        used to compute pastEndNode(), otherwise Range's constructor
        ASSERTs and pastEndNode() returns null. Added a testcase.
        If the incoming Range is collapsed at [br, 0], callers want
        the style to be applied to the br, so expand the Range to include
        it.  We got away without expanding before because pastEndNode
        of a Range from [br, 0] to [br, 0] is the node after the br.
        Using range compliant equivalents changed that. There's already
        test coverage for this change.
        Changed while loop termination for finding the end of a run 
        so that we don't process pastEnd.  end.node() may now be 
        non-atomic and we'd blow past it. There's already test
        coverage for this change.

2007-05-25  Beth Dakin  <bdakin@apple.com>

        Rubber stamped by Hyatt

        Adding an ASSERT for good measure.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2007-05-25  Kevin McCullough  <kmccullough@apple.com>
 
        Reviewed by Geoff.

        - <rdar://problem/5183523> REGRESSION: Excel: Worksheet tabs in spreadsheet saved as web page don't work 
        - Change load to check the URL as well as the referrer since it is possilbe to have a referrer which limits a load even thought the URL would allow it.  There is a bug about how we need to re-evaluate the whole load architecture: <rdar://problem/5227992> Rethink canLoad() to have a consistent and comprehensive architecture.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canLoad):
        * loader/FrameLoader.h:

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        <rdar://problem/5209536>
        http://bugs.webkit.org/show_bug.cgi?id=13757
        REGRESSION: Leaks seen on buildbot after r21497.
        
        Fix multipart data loading so it works like Tiger Safari. When one part of a multipart connection has been loaded,
        move the subresource loader from the subresource loaders set and into a special multipart subresource loader set. This set 
        is not considered when asking a document loader if it's currently loading. 
                
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        Always stop the multipart subresource loaders here.
        
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart):
        New function that moves the loader from m_subresourceLoaders to m_multipartSubresourceLoaders and updates the document loader's state.
        
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        If a progress item already exists, reuse it. This can happen in some rare circumstances when dealing with multipart data.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        Call subresourceLoaderFinishedLoadingOnePart if the response is multipart.

2007-05-25  Patti Hoa  <patti@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4918397> Exception raise inspecting note contents in the background
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):
        Only allow asking the attachmentView for description if attachmentView supports this description attribute

2007-05-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver and Hyatt.

        Fix for <rdar://problem/5228363> REGRESSION: In Mail, attempting to 
        create a To Do results in a crash

        This regressed with r21635. Now that -boundingBox updates layout if 
        it is needed, we infinitely recurse when Mail draws a custom 
        highlight. The fix is to put a guard around laying out the render 
        tree.

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):

2007-05-25  Patti Hoa <patti@apple.com>

        Reviewed by John Sullivan.
        
        <rdar://problem/5221986> selection in web areas doesn't seem to be working for text navigation
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsAttributeSettable:]):
        Fixed up incorrect string comparison for AXSelectedTextMarkerRange ax attribute so 
        this attribute can actually announce its settability. 

2007-05-25  Darin Adler  <darin@apple.com>

        Reviewed by Alice.

        - fix <rdar://problem/5228048> REGRESSION: In a new Mail message, the caret isn't
          immediately inserted when tabbing into or clicking in the message body

        This latent problem was uncovered by <http://trac.webkit.org/projects/webkit/changeset/21476>,
        which removed some code that did extra work whenever setCaretVisible made the caret visible.

        * page/Frame.cpp: (WebCore::Frame::selectionLayoutChanged): Call invalidateCaretRect
        when turning the caret on. All other call sites that touched m_caretPaint were doing
        this, but this was not.

2007-05-25  Darin Adler  <darin@apple.com>

        Reviewed by Harrison.

        * DerivedSources.make: Tweaked spelling.

2007-05-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13872
          REGRESSION: An empty search field can have a cancel button

        Test: fast/forms/search-cancel-button-style-sharing.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createCancelButtonStyle): Prevented sharing of
        the cancel button style between search fields that share style, because
        each search field mutates the style to show and hide the cancel button.

2007-05-25  David Harrison  <harrison@apple.com>

        Reviewed by Kevin and Geoff.

        * DerivedSources.make:
        Add an inclusion guard for CSSGrammar.h and XPathGrammar.h, because older versions of bison do not
        
        * css/maketokenizer:
        Unconditionally define the flex basic types that are not part of newer versions of flex. Was
        only needed on Linux. Now needed on Mac OS 10.5, and is OK to do on 10.4.9.

2007-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Moved JavaScriptCore-related pending public API to public API.

        Moved -JSObject

        * bindings/objc/WebScriptObjectPendingPublic.h: from here
        * bindings/objc/WebScriptObject.h: to here
        * bindings/objc/WebScriptObject.mm: and out of its temporary category

2007-05-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13767
          REGRESSION: Multipart image documents are garbled

        Test: http/tests/multipart/invalid-image-data-standalone.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingMultipartContent): Added.
        * loader/DocumentLoader.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish): If the image is multipart, make a copy
        of the current part instead of using the resource data, which is going to be
        overwritten by the next part.
        * loader/MainResourceLoader.h:
        (WebCore::MainResourceLoader::isLoadingMultipartContent): Added.

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Fix no-svg build.
        
        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5226788> After resizing the window larger than the image, hovering over the image still shows magnify glass
        
        One part of the bug was already fixed by my previous commit. This fixes the case where the window is sized so the image fit
        after it has been zoomed in.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::windowSizeChanged):

2007-05-25  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders and Tim

        - WebCore change for: 
          <rdar://problem/5226000> REGRESSION: In Gmail and Mail, a hang occurs when attempting to grammar/spellcheck a word in a reply 

        * editing/Editor.cpp:
        (WebCore::findFirstBadGrammarInRange):
        Use the more obvious way to check whether a range is empty. In this case the more obvious way
        would also have caused no problem to occur. Also added an assertion. Though this change is
        enough to fix the symptom of the bug, the real fix is in WebKit.

2007-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin (Sorta).

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::restoreImageSize):
        Use removeProperty here.

2007-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Some cleanup to Cache while Fixing <rdar://problem/5055182> The page cache 
        has no global cap.
        
        * loader/Cache.cpp: Removed destructor to help identify this class as a
        singleton.

        * loader/Cache.h: Made constructor and destructor private to match the
        singleton model of PageCache.
        
        Put structs related to Cache inside its declaration to fix some namespace
        conflicts I had while writing my patch. (They don't exist anymore, but
        I figured this might help future development.)

2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a bug with Settings where a number of different objects held bare 
        Settings* data members, even though the Page owns the Settings object and 
        deletes it upon destruction.

        Added NULL checks since the Page can be deleted before the frame/document.

        * page/Settings.cpp: Removed reliance on setNeedsReapplyStylesForSettingsChange.

        * css/cssstyleselector.cpp: CSSStyleSelector was the worst offender. It 
        held a number of back pointers that were not guaranteed. I removed the 
        Settings*, Frame*, and FrameView* back pointers, but others could probably 
        go, too. I replaced them with a single Document* pointer, which is guaranteed
        because the Document owns the CSSStyleSelector.

        * page/Page.cpp: Removed setNeedsReapplyStylesForSettingsChange -- the 
        Settings object is now a proper subcontroller of Page, so it doesn't need
        to use a global table to find its page anymore. Also, this function
        confusingly implied that the Frames in a page can have heterogeneous settings,
        which is not true.

2007-05-25  David Hyatt  <hyatt@apple.com>

        Make sure -webkit-border-fit accounts for padding as well as border.

        Reviewed by aroben

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

2007-05-25  David Hyatt  <hyatt@apple.com>

        Rework line numbering (again).  This time I finally think I have
        it right for all the document.write insanity that can occur.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserDocumentWriteMessage):
        * html/HTMLParserErrorCodes.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::lineNumberPtr):
        (WebCore::HTMLTokenizer::processingContentWrittenByScript):
        * platform/SegementedSring.cpp
        (WebCore::SegmentedString::setExcludeLineNumbers):
        * platform/SegmentedString.h:
        (WebCore::SegmentedSubstring::SegmentedSubstring):
        (WebCore::SegmentedSubstring::clear):
        (WebCore::SegmentedSubstring::excludeLineNumbers):
        (WebCore::SegmentedSubstring::setExcludeLineNumbers):
        (WebCore::SegmentedString::excludeLineNumbers):
        (WebCore::SegmentedString::advance):

2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Added a debug-only CachedPage counter. This helped me track down an SVG 
        timer bug in my recent page cache work.
                
        * history/CachedPage.cpp:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Improve <form> error reporting to catch <form>s inside table parts.
        Tweak the wording of some of the error messages to be a bit better.

        Reviewed by olliej

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::processCloseTag):
        (WebCore::HTMLParser::popBlock):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-24  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=4104
        first-letter not updating style with hover
        http://bugs.webkit.org/show_bug.cgi?id=13169
        css-formatted first letter won't hide dynamically

        Update first letter when RenderBlock::setStyle is called. 

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::usesFirstLetterRules):
        (WebCore::Document::setUsesFirstLetterRules):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        (WebCore::RenderBlock::updateFirstLetter):

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13800
          REGRESSION: Moving a slider moves another unrelated slider

        Test: fast/forms/slider-thumb-shared-style.html

        RenderSlider mutates the thumb's style, therefore it must not be shared
        with another slider's thumb, a situation that could occur if the sliders
        themselves shared style.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle): Always use a private copy for
        the thumb style.

2007-05-24  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5211921> Form values sometimes get transposed (iGoogle)

        Test: fast/history/redirect-load-no-form-restoration.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setURL): Clear the document state when the url changes for a HistoryItem.
        (WebCore::HistoryItem::isCurrentDocument): Added. Compares the HistoryItem url to the document's url.  This might not be the best way to do this, but it works for now.
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp: (WebCore::FrameLoader::saveDocumentState): Only set the document (and form) state if the document is current for the history item.

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13857
          REGRESSION: onChange function applied to select element executes twice when focus is set

        Test: fast/forms/select-double-onchange.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListOnChange): Changed to update m_lastOnChangeIndex
        before dispatching the change event to avoid reentrancy.

2007-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/5226451> REGRESSION (21618): Mail block quotes
          are missing the lines on the side

        This patch fixes three problems:

        1) makes the "skip canLoad check" boolean also skip the check
           that prevents any loads while the document is in provisional
           state; this is the proximate cause of the bug

        * loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::create):
        Don't check the frame's state if skipCanLoadCheck is true.

        2) moves the "skip canLoad check" boolean to the Request object;
           the old implementation would cause that flag to affect the
           new request we served, which might not be the resource with
           that flag set

        3) fixes error-handling code path that would leak requests

        * html/HTMLImageLoader.cpp: (WebCore::HTMLImageLoader::updateFromElement):
        Pass false to the CachedImage constructor to indicate we are not making
        this object for the cache.

        * loader/Cache.cpp:
        (WebCore::createResource): Pass true to the CachedImage constructor to
        indicate we are making this object for the cache.
        (WebCore::Cache::requestResource): Add new code that assumes the object
        will already have the inCache bit set, and that will delete the object
        and return 0 if the cache is disabled and the load failed.

        * loader/CachedImage.h:
        * loader/CachedImage.cpp: (WebCore::CachedImage::CachedImage):
        Added a forCache boolean parameter. Always false for the constructor
        that's only used outside the cache code, and passed in as a boolean
        for the constructor that's used both in cache and outside cache.

        * loader/CachedResource.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Added a forCache boolean
        parameter that determines the initial state of the m_inCache flag.
        This is needed to prevent a resource from being destroyed if an
        error occurs during the initial load.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet): Added FIXME.
        (WebCore::DocLoader::setLoadInProgress): Added null check.

        * loader/Request.h:
        * loader/Request.cpp: (WebCore::Request::Request):
        Added a shouldSkipCanLoadCheck boolean here, since we need to track
        this for each request.

        * loader/loader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load): Pass the skipCanLoadCheck boolean to the
        Request constructor rather than to the servePendingRequests function.
        (WebCore::Loader::servePendingRequests): Add a loop so we can handle
        cases where the request fails immediately without leaking the request
        and thinking that we're loading forever.

2007-05-24  David Hyatt  <hyatt@apple.com>

        Add error reporting for residual style.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::reopenResidualStyleTags):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Report <script/> as a warning instead of an error for now, since we
        actually do close it.  (Sigh.)

        Reviewed by beth

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        (WebCore::isWarning):
        * html/HTMLParserErrorCodes.h:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Add error reporting for the </p> -> <p></p> quirk.

        Add error reporting when a stray close tag is encountered with no
        corresponding open tag.

        Reviewed by adele

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::processCloseTag):
        (WebCore::HTMLParser::popBlock):
        * html/HTMLParser.h:
        (WebCore::HTMLParser::popBlock):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:

2007-05-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by.

        - Rolling back change to fix the build until I have a good fix for data: urls.

        * ChangeLog:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::open):
        * platform/String.cpp:

2007-05-24  David Hyatt  <hyatt@apple.com>

        Add two more error messages to the HTMLParser.

        Report when the </br> -> <br> quirk is triggered.

        Also report whenever the broken XML self-closing tag syntax is used on
        tags that can actually have an end tag (either optional or required).

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        * html/HTMLParserErrorCodes.cpp:
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:
        (WebCore::):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        (WebCore::Token::reset):

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Rename JSHTMLFrameSetCustom.cpp to JSHTMLFrameSetElementCustom.cpp
        for consistency.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLFrameSetCustom.cpp: Removed.
        * bindings/js/JSHTMLFrameSetElementCustom.cpp: Added.

2007-05-24  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5208440> (13753)

        REGRESSION: Raw text needs to be pulled outside of tables

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::checkDTD):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::checkDTD):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::checkDTD):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::checkDTD):

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13837
          Separator in new <select> widget disappears when block element with border is in document.

        Test: fast/forms/menulist-separator-painting.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon): Changed this function to
        actually do both filling and stroking when needed, even though all existing
        callers set the stroke to none.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButton): Added calls to set the stroke
        style and thickness when painting the arrows and the separator.

2007-05-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        Remove the OBJC_NEW_PROPERTIES #ifdef and only export the new @property syntax.

        * bindings/objc/DOMObject.h:
        * bindings/scripts/CodeGeneratorObjC.pm:

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Uncomment HTMLFramesSetElement constructor now that it exists.

        * page/DOMWindow.idl:

2007-05-24  Anders Carlsson  <andersca@apple.com>

        Try fixing the buildbot build.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        (WebCore::ImageDocument::imageClicked):

2007-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13853
        Autogenerate the JS bindings for the HTMLFrameSetElement

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/JSHTMLFrameSetCustom.cpp: Added.
        (WebCore::JSHTMLFrameSetElement::canGetItemsForName):
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLFrameSetElement.idl:

2007-05-24  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by andersca

        Fixing check for incorrent font size - it should
        check fixed not normal.

        * page/Settings.cpp:
        (WebCore::Settings::setDefaultFixedFontSize):

2007-05-24  Mitz Pettel  <mitz@webkit.org>

        Speculative buildbot build fix.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-05-24  Adam Roben  <aroben@apple.com>

        Made Chrome::addMessageToConsole more flexible

        addMessageToConsole now takes two additional parameters to specify the
        message source (HTML, JS, CSS, XML) and level (error, warning, log). To
        maintain our old behavior, all current messages were given
        JSMessageSource and ErrorMessageLevel parameters. Messages matching
        these characteristics are passed up to the ChromeClient.

        Reviewed by Hyatt.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * 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):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportLocalLoadFailed):
        * page/Chrome.cpp:
        (WebCore::Chrome::addMessageToConsole):
        * page/Chrome.h:
        (WebCore::):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):

2007-05-24  David Hyatt  <hyatt@apple.com>

        Rework how HTML handles line numbering so that it is not fooled by
        \r without a following \n and so that document.write doesn't lead
        to line numbering confusion.

        Reviewed by aroben

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processListing):
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseServer):
        (WebCore::HTMLTokenizer::parseProcessingInstruction):
        (WebCore::HTMLTokenizer::parseText):
        (WebCore::HTMLTokenizer::parseEntity):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        (WebCore::HTMLTokenizer::processToken):
        (WebCore::HTMLTokenizer::setSrc):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::lineNumberPtr):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addLine):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):
        * platform/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::operator=):
        (WebCore::SegmentedString::clear):
        * platform/SegmentedString.h:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::advance):
        (WebCore::SegmentedString::escaped):

2007-05-23  David Hyatt  <hyatt@apple.com>

        Make the delete/InsertRows/Cells methods as well as the rowIndex method
        able to work properly even when whitespace or comment nodes are present.

        Reviewed by aroben

        fast/table/rowindex-comment-nodes.html

        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        (WebCore::HTMLTableRowElement::insertCell):
        (WebCore::HTMLTableRowElement::deleteCell):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow):
        (WebCore::HTMLTableSectionElement::deleteRow):

2007-05-23  David Hyatt  <hyatt@apple.com>

        <optgroup> should allow <script> and text nodes inside it, just like
        <select> does.

        Reviewed by aroben

        fast/forms/stuff-on-my-optgroup.html

        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::checkDTD):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::checkDTD):

2007-05-23  David Hyatt  <hyatt@apple.com>

        Framesets should allow whitespace text nodes as children.

        Reviewed by aroben

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::checkDTD):

2007-05-24  Mark Rowe  <mrowe@apple.com>

        Fix the Qt build after r21685.

        * platform/qt/CursorQt.cpp:
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2007-05-23  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Adam.

        Fix the gdk build following changes in r21685.

        * platform/gdk/CursorGdk.cpp:
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):

2007-05-23  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5222611> REGRESSION: Paint ordering problems at
        http://buymeasoda.com/dev/issues/image_onload/image_onload.html

        Clamp z-index so that values that exceed maxint (or that are below minint)
        are clamped to those values.

        Reviewed by darin

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-05-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by David Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13563
          REGRESSION: Crash loading message in Yahoo! Mail

        Tests: fast/css/stale-style-selector-crash-1.html
               fast/css/stale-style-selector-crash-2.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize the m_didCalculateStyleSelector
        flag to 'false'.
        (WebCore::Document::updateStyleSelector): Do not bail out if we have ever
        calculated a non-trivial style selector, even if at the moment we are
        pending style sheets. We could have calculated a non-trivial selector
        already either because at some point there were no pending style sheets
        (so the currently pending ones were added dynamically) or because we were
        forced to do a layout ignoring pending style sheets. Either way, once
        there is a style selector, we need to keep it up to date, otherwise we can
        crash under recalcStyle() during updateRendering() or simply not recalculate
        style correctly for dynamic changes.
        (WebCore::Document::recalcStyleSelector): Set m_didCalculateStyleSelector
        to 'true' when creating a new style selector.
        * dom/Document.h:

2007-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5224749> Show a zoom/unzoom cursor for resizable image documents
        
        * WebCore.xcodeproj/project.pbxproj:
        Install the zoom cursors.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::resizeImageToFit):
        Set the cursor to the zoom in cursor.
        
        (WebCore::ImageDocument::restoreImageSize):
        If the image fits, reset the cursor. Otherwise, set it to the zoom in cursor.

2007-05-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix problems where unrendered nodes were affecting on plain text serialization

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Don't call handleXXX functions or exitNode for
        nodes without renderers.
        (WebCore::shouldEmitNewlineAfterNode): Only consider rendered nodes when deciding
        if this is the last node in the document.

2007-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/3663808> Resize large images to fit in the browser window
        
        * WebCore.exp:
        Add new settings method.
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::ImageEventListener):
        New class that handles resize events and click events and forwards them to the image document.
        
        (WebCore::ImageTokenizer::ImageTokenizer):
        (WebCore::ImageTokenizer::writeRawData):
        (WebCore::ImageTokenizer::finish):
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::cachedImage):
        Let the ImageDocument class keep track of its document structure.
        
        (WebCore::ImageDocument::scale):
        Returns the scale that should be used when resizing the image.
        
        (WebCore::ImageDocument::resizeImage):
        Update the image size.
        
        (WebCore::ImageDocument::imageClicked):
        Toggle between resized and not resized. When restoring the size, scroll the image so that the area under
        the mouse stays the same.
        
        (WebCore::ImageDocument::imageChanged):
        When the image size is known, resize the image if needed.
        
        (WebCore::ImageDocument::restoreImageSize):
        Restore the image size.
        
        (WebCore::ImageDocument::imageNeedsResizing):
        Return whether the image is too big for its window or not.
        
        (WebCore::ImageDocument::windowSizeChanged):
        Called when the window's size changes. Determine if the window fits or not and resize it if it doesn't fit.
        
        (WebCore::ImageEventListener::handleEvent):
        Forward events to the image document.
        
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setEnableAutomaticImageResizing):
        * page/Settings.h:
        (WebCore::Settings::enableAutomaticImageResizing):
        Add new setting.
        
2007-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Add -webkit-zoom-in and -webkit-zoom-out cursors.
        
        * Resources/zoomInCursor.png: Added.
        * Resources/zoomOutCursor.png: Added.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        * rendering/RenderStyle.h:
        (WebCore::):

2007-05-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Part one of patch for http://bugs.webkit.org/show_bug.cgi?id=13830
        Auto-generate JS DOM bindings for HTMLDocument and most of the rest
        of HTMLElement

        - Just the HTMLElement part.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::getValueProperty):
        (KJS::JSHTMLElement::putValueProperty):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLElement.idl:

2007-05-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - rdar://problem/5183523
        - We now check the document's URL to see if it can load a resource in the case of a URL click, instead of checking the referrer, which is blank for local files.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::open):
        * platform/PlatformString.h:
        (WebCore::debugPrintString):

2007-05-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Part two of patch for http://bugs.webkit.org/show_bug.cgi?id=13830
        Auto-generate JS DOM bindings for HTMLDocument and most of the rest
        of HTMLElement

        - Just the HTMLDocument part.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLDocumentCustom.cpp: Added.
        (WebCore::JSHTMLDocument::canGetItemsForName):
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        (WebCore::JSHTMLDocument::location):
        (WebCore::JSHTMLDocument::setLocation):
        (WebCore::JSHTMLDocument::open):
        (WebCore::writeHelper):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        (WebCore::JSHTMLDocument::clear):
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_html.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm: Add [Deletable] property
        for Document.all and fix HasOverridingNameGetter to allow correct
        prototype chain
        * dom/Document.cpp:
        (WebCore::Document::plugins): adds alias to embeds() for bindings
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::width):
        (WebCore::HTMLDocument::height):
        (WebCore::HTMLDocument::dir):
        (WebCore::HTMLDocument::setDir):
        (WebCore::HTMLDocument::designMode):
        (WebCore::HTMLDocument::setDesignMode):
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        (WebCore::HTMLDocument::captureEvents):
        (WebCore::HTMLDocument::releaseEvents):
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:

2007-05-23  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5221838> REGRESSION (r21581): no content in idisk
        window at mac.com.

        Back out the change to make self-closed <script/> into a Dashboard quirk
        only.

        Reviewed by aroben

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):

2007-05-23  Patti  <patti@apple.com>

        Reviewed by David Harrison.

        <rdar://problem/5078453> AXNext/PrevLineEndTextMarkerForTextMarker returns kAXErrorNoValue for attachment range
        
        Floating objects, such as aligned images, are not included as part of any line.  So when the given 
        text marker is on the floating object, the returned line edge cannot be found and asserts are fired.
        In addition, this paints an inconsistent text layout (in the accessibility sense) of where the floating 
        object resides.  Character/word methods report floating object at the beginning of the text line(s).  Yet
        line methods never present floating objects anywhere.  
        To fix this, the ax line methods will now do more checking to ensure floating object nodes are included
        when determining the line range/position. That way, assistive apps won't get stuck using the line methods 
        to read line-by-line

        * bridge/mac/WebCoreAXObject.mm:
        (updateAXLineStartForVisiblePosition):
        Added a helper method to adjust line start position to account for floating objects
        (-[WebCoreAXObject doAXLeftLineTextMarkerRangeForTextMarker:]):
        (-[WebCoreAXObject doAXRightLineTextMarkerRangeForTextMarker:]):
        (-[WebCoreAXObject doAXNextLineEndTextMarkerForTextMarker:]):
        (-[WebCoreAXObject doAXPreviousLineStartTextMarkerForTextMarker:]):
        Fixed up line routines to include floating object nodes in line position calculation.
        startOfLine/endOLine may return null for position next to a floating position.  So now there's extra checks to prevent
        returning null line position/ranges back to AX.


2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack, discussed also with Lars.

        Make it possible to have per-QWebPage network interface
        implementations.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start): Pass the page's network interface to
        the network manager.

2007-05-23  Rob Buis  <buis@kde.org>

        Reviewed by Dave Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=13174
        line-height in font shorthand does not override a previously stated line-height property

        Make sure line-height is calculated against definite font-size and
        uses the last set line-height, ie. directly or through font shorthand.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/cssstyleselector.h:

2007-05-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack and Valgrind

        Initialize variable.

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-05-23  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13784
        REGRESSION (r13744-13750): Crash with empty gradient when drawing to canvas

        Fix crash by testing for zero stops, and returning transparent black
        in this case.

        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::getColor):

2007-05-23  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13801
        Crash when loading nonexisting symbol

        Check for referenced element and when not found just return.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):

2007-05-22  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam.

        Fix license.

        * bindings/js/JSHTMLAnchorElementCustom.cpp:

2007-05-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13833
        Add ObjC DOM binding for HTMLMarqeeElement

        - Also adds missing DOMHTMLFramePrivate.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMHTML.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/PublicDOMInterfaces.h:

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin, who found the fix independently.

        http://bugs.webkit.org/show_bug.cgi?id=13804
        REGRESSION(r21611): Several new layout test pixel failures (misspelling markers)
        
        r21611 exposed a bug in the way removeMarkers computes
        the end of the range to remove markers from.  It also
        introduced a bug: removeMarkers expects a startOffset
        and a length, not a startOffset and an endOffset (added 
        a layout test).

        * dom/Document.cpp:
        (WebCore::Document::removeMarkers): The other removeMarkers
        expects a startOffset and a length, not a startOffset and
        an endOffset.
        (WebCore::Document::removeMarkers): Fixed the endOffset
        from length and startOffset calculation.

2007-05-22  David Hyatt  <hyatt@apple.com>

        Fix for bug 13802, background colors can't be reset to default
        color.  Fix the value cssText method to do the right thing for background
        and background-position values.

        Reviewed by beth

        fast/dom/background-shorthand-csstext.html

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue:::m_implicit):
        (WebCore::CSSInitialValue::isImplicitInitialValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::isImplicitInitialValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBackgroundShorthand):
        (WebCore::CSSParser::parseShorthand):

2007-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/5215830> REGRESSION: ebay.com layout is wrong

        The code on ebay was looking for the "document" property on a iframe.
        We changed that to be the ownerDocument rather than the contentDocument,
        which was not what ebay was expecting. The best fix seems to be removing
        the document property altogether.

        Test: fast/dom/iframe-document.html

        * bindings/js/kjs_html.h: Remove ElementDocument.
        * bindings/js/kjs_html.cpp: (KJS::JSHTMLElement::getValueProperty): Ditto.

2007-05-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        A little cleanup from my last checkin.

        * page/Chrome.h: Formatting change.
        * page/mac/ChromeMac.mm: Fixed copyright.

2007-05-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13796
        Crash in [NSInputContext currentInputContext] when you click on this map

        This is another case of <rdar://problem/5171145> Safari crashed closing tab in NSInputContext updateInputContexts

        Test: fast/frames/frame-display-none-focus.html

        * WebCore.xcodeproj/project.pbxproj: Added ChromeMac.mm
        * page/Chrome.h:
        * page/mac/ChromeMac.mm: Added.
        (WebCore::Chrome::focusNSView): Moved code from Widget::setFocus so it can be used whenever we need to make a view the first responder.
        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::focusDocumentView): Calls focusNSView.
        * platform/mac/WidgetMac.mm: (WebCore::Widget::setFocus): Calls focusNSView.

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4875189> 
        List is deleted when replacing contents with Chinese/Japanese characters

        * editing/htmlediting.cpp:
        (WebCore::isSpecialElement): Lists are no longer special.
        They can be removed by removing their content and then 
        then hitting delete inside of the empty list item that's 
        left over. Even when that list item is the first thing 
        in the editable region.

2007-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5206089> REGRESSION: hovering over amazon.com "product categories"
          tab makes page content disappear

        The contentWindow property was doing a cross-frame security check, but it shouldn't.
        Window objects are responsible for protecting themselves from cross-frame activity.
        Because contentWindow returned undefined, we then ended up setting visibility on the
        body of the main frame to "hidden".

        No layout test yet. When we make cross-domain tests, we should include this one.

        * html/HTMLFrameElement.idl: Removed CheckFrameSecurity attribute from contentWindow.
        * html/HTMLIFrameElement.idl: Ditto.

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5213963>
        REGRESSION(r21467): Active selection remains in text field after clicking on a button

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Call
        FocusController::setFocusedNode, because Document::setFocusedNode
        no longer clears the selection.
        Begin passing the new focused frame to 
        FocusController::setFocusedNode, because when the 
        new focus node is null, the selection should only be 
        cleared if the focused frame isn't changing.
        (WebCore::Element::focus): Begin passing the new focused
        frame.
        (WebCore::Element::blur): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus): Ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus): Ditto.
        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded): Ditto.
        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded): Take in the new
        focused frame.  If it's not changing, don't clear the
        selection.
        (WebCore::FocusController::setFocusedNode): Take
        in the new focused frame.
        * page/FocusController.h:

2007-05-22  Marius Bugge Monsen  <mbm@trolltech.com>

        Reviewed by Zack.

        Implement some more functions in ClipboardQt.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):

2007-05-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.
        
        Fix for http://bugs.webkit.org/show_bug.cgi?id=13789 
        -- SVGLocatable::getScreenCTM() faulty
        
        Needed to update SVGLength to handle the case where the SVGElement is
        not the root document element -- we do this by falling back on the 
        renderer for the context.
        
        For <svg> elements embedded as mixed content in xhtml we consider the
        absolutePosition of the parent to be the origin for the <svg> element.

        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):

2007-05-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5084400> -[DOMRange lineBoxRects] returns an empty array when the DOM nodes have just been created

        Do a updateLayoutIgnorePendingStylesheets before asking the Node or Range for it's box rects.

        * bindings/objc/DOM.mm:
        (-[DOMNode boundingBox]):
        (-[DOMNode lineBoxRects]):
        (-[DOMRange boundingBox]):
        (-[DOMRange lineBoxRects]):

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by George Staikos.

        Fix Qt build.

        * WebCore.pro: add missing IDL files.

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13803
        Autogenerate the JS bindings for the HTMLMarqueeElement.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSRule::getOwnPropertySlot): Fix possible null pointer issue.
        (KJS::DOMCSSRule::put): Fix possible null pointer issue.
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot): Fix null pointer issue.
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::put):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::start):
        (WebCore::HTMLMarqueeElement::stop):
        * html/HTMLMarqueeElement.h: Add start() and stop() functions.
        * html/HTMLMarqueeElement.idl: Added.
        * page/DOMWindow.idl: Add marquee constructor.

2007-05-21  Adele Peterson  <adele@apple.com>

        Fix by Darin, reviewed by me.

        Fix for <rdar://problem/5171145> Safari crashed closing tab in NSInputContext updateInputContexts

        * platform/mac/WidgetMac.mm:
        (WebCore::safeRemoveFromSuperview): Added. If the view is the window's first responder, then 
         set the window's first responder to nil so we don't leave the window pointing to a view that's no longer in it.
        (WebCore::Widget::setFocus): Don't attempt to focus the view if it has no window.
        (WebCore::Widget::removeFromSuperview): Call safeRemoveFromSuperview.
        (WebCore::Widget::afterMouseDown): ditto.

2007-05-21  David Hyatt  <hyatt@apple.com>

        Make a line gutter backdrop so that tiny view source docs don't look
        bad.

        Reviewed by aroben

        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):

2007-05-21  David Hyatt  <hyatt@apple.com>

        Make sure to distinguish between links to internal resources and
        real links (anchors) in view source mode.

        Reviewed by aroben

        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addLink):
        * html/HTMLViewSourceDocument.h:

2007-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam and Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13791
        Autogenerate the JS bindings for the HTMLIFrameElement and HTMLFrameElement.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::location):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::contentWindow):
        * html/HTMLIFrameElement.idl:
        * page/DOMWindow.idl:

2007-05-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Remove the ResourceHandleManager class, it is now part of 
        QWebNetworkInterface. Adapt ResourceHandle to the new way 
        of things.

        * WebCore.pro:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/qt/ResourceHandleManagerKDE.cpp: Removed.
        * platform/network/qt/ResourceHandleManagerKDE.h: Removed.
        * platform/network/qt/ResourceHandleManagerQt.cpp: Removed.
        * platform/network/qt/ResourceHandleManagerQt.h: Removed.
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):

2007-05-21  David Hyatt  <hyatt@apple.com>

        Second half of fix for 13793, make sure rules=groups works properly with
        spanning colgroups.

        Also make sure colgroups get an actual span of 1 (instead of incorrectly
        giving them a span of 0).

        Reviewed by mitz

        fast/table/colgroup-spanning-groups-rules.html

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::HTMLTableColElement):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::colElement):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder):
        (WebCore::RenderTableCell::collapsedRightBorder):

2007-05-20  David Hyatt  <hyatt@apple.com>

        Half of a fix for 13793, make sure rules=groups and border behave properly
        together.

        Reviewed by mitz

        No tests added, two Mozilla table tests now pass that failed before.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::getSharedCellDecl):

2007-05-20  Brady Eidson <beidson@apple.com>

        Reviewed by Geoose Garen

        <rdar://problem/4758919> - Incorrect favicon shown for URL after going back

        When restoring a cached page, we'd try to kick off the icon load for it, which ended up causing 
        shenanigans with the icon url -> page url mapping.  

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::endIfNotLoading): Only try an icon load if we're not restoring from the page cache
        (WebCore::FrameLoader::startIconLoader): Added helpful logging that helped me track this down
        (WebCore::FrameLoader::commitIconURLToIconDatabase): Ditto (and fixed a comment typo)

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::stopLoading): Don't null out the ResourceLoader here, as clearLoadingState() does that
        (WebCore::IconLoader::finishLoading): Added helpful logging that helped me track this down


2007-05-20  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5193416> REGRESSION: Selection on large pages extremely slow

        * dom/Document.cpp: (WebCore::Document::removeMarkers): Added an early exit for the common
        case where there are no markers. Changed code to iterate over all the nodes in the range
        instead of using TextIterator, which is more efficient.
        
        * page/Frame.cpp: (WebCore::Frame::respondToChangedSelection): Added checks for editable,
        so we don't bother doing work related to spell checking and grammar checking when changing
        the selection in non-editable text. Also rearranged the code so we only compute the old
        word boundaries and sentence boundaries when actually needed, and don't do the sentence
        range checks unless grammar checking is enabled.

        * platform/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Don't take a locale parameter. Always pass in currentTextBreakLocaleID.
        (WebCore::characterBreakIterator): Removed local parameter.
        (WebCore::wordBreakIterator): Ditto.
        (WebCore::lineBreakIterator): Ditto.
        (WebCore::sentenceBreakIterator): Ditto.

        * platform/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::getTextBreakLocale): Broke out the code to actually get the locale.
        (WebCore::currentTextBreakLocaleID): This function now handles only the caching and calls
        getTextBreakLocale to actually figure it out.

        * editing/visible_units.cpp: Added lots of FIXME comments, but no code change.

2007-05-20  Adam Treat  <adam@staikos.net>

        Add -f to cp to deal with some obscure build environments.

        Reviewed by George Staikos.

        * move-js-headers.sh:

2007-05-20  Adam Treat  <adam@staikos.net>

        Add missing include for auto_ptr

        Reviewed by George Staikos.

        * platform/graphics/ImageBuffer.h:

2007-05-19  David Hyatt  <hyatt@apple.com>

        Fix for bug 13785, O(n^2) counter creation.

        Reviewed by darin

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        (WebCore::RenderCounter::originalText):

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12729
          box-shadow disappears when scrolling a div that it falls on/under

        Tests: fast/repaint/box-shadow-dynamic.html
               fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Factor in box shadow.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        (WebCore::InlineFlowBox::paint): Account for box shadow when checking if
        the damage rect intersects.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): For overflow areas, when asked
        for the "exterior" overflow, add box shadow overflow.
        (WebCore::RenderBlock::overflowWidth): Ditto.
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Ditto.
        (WebCore::RenderBlock::overflowRect): Ditto.
        (WebCore::RenderBlock::layoutBlock): Factor box shadow into visual overflow.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lowestPosition): For overflow areas, when asked for
        the "exterior" extreme position, add box shadow.
        (WebCore::RenderFlow::rightmostPosition): Ditto.
        (WebCore::RenderFlow::leftmostPosition): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Avoid clipping out box shadow.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Make sure to paint
        the box shadow when an edge with a shadow moves.
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Helper function
        that expands a given rectangle to encompass outline and box shadow.
        (WebCore::RenderObject::absoluteOutlineBox): Changed to include box shadow.
        * rendering/RenderObject.h:

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13783
          REGRESSION (r21120): Frame resizers not repainted properly when dragged

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13774
          REGRESSION: Crash emailing blog entry using Google Reader

        Test: fast/table/stale-grid-crash.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcSections): Made const and replaced
        setNeedsLayout(true) with an assertion that the table is already
        marked for layout.
        (WebCore::RenderTable::sectionAbove): Added call to recalcSectionsIfNeeded().
        (WebCore::RenderTable::sectionBelow): Ditto.
        (WebCore::RenderTable::cellAbove): Ditto.
        (WebCore::RenderTable::cellBelow): Ditto.
        (WebCore::RenderTable::cellBefore): Ditto.
        (WebCore::RenderTable::cellAfter): Ditto.
        * rendering/RenderTable.h:
        Made some private member variables which are used in section recalc mutable.
        (WebCore::RenderTable::setNeedsSectionRecalc): Moved the call to
        setNeedsLayout() from recalcSections() into here, because I made
        recalcSections() const.
        (WebCore::RenderTable::recalcSectionsIfNeeded): Made const.

2007-05-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13320
          rounded corners with drop shadows are really slow

        Test for a rendering bug fixed by this patch:
            fast/box-shadow/border-radius-big.html

        No test for the performance ingredient.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip): Made cross-platform.
        Changed to use a single clipping path. If all the radii cannot be
        accommodated, clips to a rect.
        (WebCore::GraphicsContext::clipOutRoundedRect): Changed to use a single
        clipping path. If all the radii cannot be accommodated, clips out a rect.
        * platform/graphics/GraphicsContext.h: Added clipOut(const Path&).
        * platform/graphics/Path.cpp:
        (WebCore::Path::createRoundedRectangle): Added. Returns a rounded rectangle
        with the specified radii. If all the radii cannot be accommodated, returns
        a rectangular path.
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut): Added.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect): Changed to use a single path.
        (WebCore::GraphicsContext::clipOut): Added.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut): Added.

2007-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Test: fast/frames/inline-object-inside-frameset.html
        
        http://bugs.webkit.org/show_bug.cgi?id=13771
        Assertion failure ASSERT(m_layer) when running Hamachi fuzz tester

        Don't paint inline objects.
        
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):

2007-05-19  David Hyatt  <hyatt@apple.com>

        Add support for plain text MIME types (CSS/JS/TXT) to view source mode.
        CSS/JS will eventually tokenize via their own special tokenizers so that
        they can also be syntax-highlighted, but for now just treat them as
        plain text.

        Reviewed by aroben

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addViewSourceText):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * html/HTMLViewSourceDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::TextTokenizer):
        (WebCore::TextTokenizer::write):
        * loader/TextDocument.h:
        (WebCore::TextTokenizer::checkBuffer):

2007-05-18  David Hyatt  <hyatt@apple.com>

        Fix a glitch in view source mode attribute names.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):

2007-05-18  David Hyatt  <hyatt@apple.com>

        "Linkify" view source mode links.

        Reviewed by andersca

        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLink):
        * html/HTMLViewSourceDocument.h:

2007-05-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam

        No longer need to pass HTMLImageElement and HTMLImageLoader on to WebKit
        Need to expose CachedResourceClient constructor

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

2007-05-18  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5214338> REGRESSION: / mishandled in 
        HTML tokenization (13780).

        Reviewed by ggaren

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::parseTag):

2007-05-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        http://bugs.webkit.org/show_bug.cgi?id=12681 and
        <rdar://problem/5166149> - window.open() causes server to be hit twice

        This regressed in http://trac.webkit.org/projects/webkit/changeset/14637
        That patch was to fix broken behavior when opening an already existant window.
        The unfortunate side effect was to cause the server to be hit twice.  
        Once during the call to frame->loader()->createWindow(), and again via a 
        scheduled redirection.

        I decided to restore the original de-facto behavior by making the new window
        open via a scheduled redirection - there is a FIXME that was already here that
        explains the reason why we have to do it this way for now.

        Additionally, there were two distinct places that had their own logic to open
        a new window - the logic for window.open() and the logic for 
        window.showModalDialog().  The logic was almost identical so I condensed them
        into one utility function that takes a flag to handle the slight difference.

        A layout test is not possible at this time since it would involve capturing 
        server logs (the 1st connection does not exist long enough to result in any
        delegate callbacks).  That task is documented in 
        http://bugs.webkit.org/show_bug.cgi?id=13769

        * bindings/js/kjs_window.cpp:
        (KJS::createWindow): Merged the two slightly different versions of "creating a window" 
          logic here.  For the modal dialog case the load is an immediate call to changeLocation(),
          which is triggered by the "immediate" flag, and the other cases load via scheduleLocationChange()
        (KJS::showModalDialog): Call createWindow()
        (KJS::WindowFunc::callAsFunction): Handle frame targets of _top or _parent immediately and call 
          createWindow() for all others

2007-05-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff.

        Autogenerate the JS bindings for the HTMLTableElement, HTMLTableCaptionElement,
        HTMLTableCellElement, HTMLTableColElement, HTMLTableRowElement, HTMLTableSectionElement.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * page/DOMWindow.idl:

2007-05-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Fix for <rdar://problem/5211122> DRT crash below
        SVGTimer::applyAnimations when page cache is enabled 
        (SVG animation timers do not properly cancel themselves)

        There were still a few paths in the SVG Animation code
        that could cause timers to be created and used.  This 
        patch inserts addition SVG_EXPERIMENTAL blocks to prevent
        these timers from being used.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement):
        (WebCore::SVGTimer::applyAnimations):
        (WebCore::SVGTimer::notifyAll):
        (WebCore::SVGTimer::addNotify):
        (WebCore::SVGTimer::removeNotify):
        * ksvg2/misc/TimeScheduler.cpp:
        (WebCore::TimeScheduler::addTimer):
        (WebCore::TimeScheduler::connectIntervalTimer):
        (WebCore::TimeScheduler::disconnectIntervalTimer):
        (WebCore::TimeScheduler::startAnimations):
        (WebCore::TimeScheduler::toggleAnimations):
        (WebCore::TimeScheduler::timerFired):
        * ksvg2/svg/SVGAnimationElement.h:

2007-05-18  Marius Bugge Monsen <mbm@trolltech.com>

        Reviewed by Zack Rusin. 

        Return a valid pointer to a Clipboard object
        from newGeneralClipboard. 

        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::newGeneralClipboard):

2007-05-18  Mark Rowe  <mrowe@apple.com>

        Attempt to fix the Gdk build after r21562.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Widget::isEnabled):
        * platform/gdk/WidgetGdk.cpp:

2007-05-18  Adam Treat <treat@kde.org>

        Reviewed by Lars

        Remove dead code.

        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        * platform/qt/WidgetQt.cpp:

2007-05-18  Holger Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Return true to make loading of pages working again

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::canHandleRequest):

2007-05-18  Holger Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Make WebCore::Widget use GtkWidget to fix focus handling.

        * WebCore.pro: Add PlatformScrollBar
        * platform/ScrollView.h: Gtk stuff
        * platform/Widget.h: Take a GtkWidget
        * platform/gdk/PlatformScrollBarGdk.cpp: Added.
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::width):
        (PlatformScrollbar::height):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        * platform/gdk/ScreenGdk.cpp: Implement depth handling
        (WebCore::screenDepth):
        * platform/gdk/ScrollViewGdk.cpp: use setGtkWidget, not setDrawable
        (WebCore::ScrollView::setGtkWidget):
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/gdk/WidgetGdk.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::gtkWidget):
        (WebCore::Widget::setGtkWidget):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):

2007-05-18  Lars Knoll  <lars@trolltech.com>

        Reviewed by Zack

        Correctly implement initialiseSupportedImageMIMETypes.

        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::):

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej.

        Build fix for non-Qt and non-Mac ports.

        * html/HTMLCanvasElement.h:

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        No test added as this is hard to time.

        * platform/gdk/FrameGdk.cpp: Use needsLayout() to decide if layout()
        is needed.

        (WebCore::FrameGdk::dumpRenderTree):
        (WebCore::FrameGdk::handleGdkEvent):

2007-05-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        * WebCore.pro: Create a pkg-config file to make it easier to locate
        and use WebKitQt.

2007-05-18  Lars Knoll <lars@trolltech.com>

        Reviewed by Hyatt.

        Remove unused handleMouseEvent methods in the Widget
        and derived classes.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseMoved):
        * platform/ScrollBar.h:
        * platform/Widget.h:
        * platform/win/PlatformScrollBar.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::PlatformScrollbar::setRect):
        * platform/wx/PlatformScrollBar.h:

2007-05-18  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Use the proper clipping algorithm.  Might be a bit slow but we
        can optimize it later.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clip):

2007-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by George Staikos.

        Fix Qt build after adding JSHTMLAnchorElementCustom.cpp. 

        * WebCore.pro:

2007-05-17  George Staikos  <staikos@kde.org>

        Reviewed by hyatt.

        Fix preprocessor logic for CG/QT

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):

2007-05-17  David Hyatt  <hyatt@apple.com>

        Add a line gutter to view source mode.  The gutter uses counters, and this exposed the fact
        that pseudoStyleForElement was not walking all UA rules properly.

        Reviewed by aroben

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        * css/view-source.css:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addText):
        * html/HTMLViewSourceDocument.h:

2007-05-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren

        <rdar://problem/5209984> REGRESSION: Crash on click after clearing Facebook status
        
        comparePositions() expects non-null positions.  It's 
        given a null position by contains() if the current 
        selection is a range selection but contains only invisible 
        content *and* visible positions cannot be created from its 
        end points.  This can happen when there is a range selection 
        inside shadow content (like that inside text fields) that 
        is made invisible.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Check for
        invisible end points.

2007-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam.

        Fix for <rdar://problem/5201423> REGRESSION: Links in 
        sidebar don't work on Honda website

        Anchor elements need to have the same behavior for implicit and 
        explicit toString() calls.

        Test: fast/dom/anchor-toString.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAnchorElementCustom.cpp: Added.
        (WebCore::JSHTMLAnchorElement::toString):
        * html/HTMLAnchorElement.idl:

2007-05-17  Geoffrey Garen  <ggaren@apple.com>
        
        Build fix.

2007-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Update RenderMenuList PopupClient methods to consider style of inner block.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::clientStyle):

2007-05-17  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, emergency test fix.

        - avoid crash on layout tests.
        
        Patched up my last change so that  widgets don't crash.

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

2007-05-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13727
        REGRESSION: Reproducible hang setting the selection's extent offset to -1
        <rdar://problem/5206890>
        
        Rise INDEX_SIZE_ERR if used selection index is negative. This matches HTML5 for
        getRangeAt() and collapse() which are part of the spec (FF throws NS_ERROR_FAILURE). 
        
        Not throwing exceptions yet for too high offsets (except getRangeAt()) as it is
        unclear if WebCore's definition of offsets is the same as other browsers.

        * bindings/js/kjs_window.cpp:
        * WebCore/editing/SelectionController.cpp:
        * WebCore/editing/SelectionController.h:
        * WebCore/editing/VisiblePosition.cpp:
        
2007-05-17  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fix for <rdar://problem/5096035> REGRESSION: rtl text should be left-aligned in <select>s

        Test: fast/text/international/bidi-menulist.html

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Set the inner block style to direction: ltr, and text-align: left.  This means that
         we will ignore those settings in the button to match the way the text is displayed in the popup menu.
        (WebCore::RenderMenuList::createInnerBlock): Call adjustInnerStyle.
        (WebCore::RenderMenuList::setStyle): ditto.
        * rendering/RenderMenuList.h: Added adjustInnerStyle.

2007-05-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4924441> List becomes nested when changing its type
        <rdar://problem/5210032> Content before a list is placed at the end of the list when its made into a list item
        <rdar://problem/5207369> Crash when removing ordering from a nested list

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        The outermostEnclosingList of the position before the start isn't
        the previousList if it contains the start.
        Ditto for the position after the end and the nextList.
        If we're putting the newly created list item into the next list,
        insert it at the start of that list, not the end (don't append).
        Avoid nesting newly created lists inside list items.
        
2007-05-17  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4775672> AXTextMarkerRangeForUnorderedTextMarkers returns incorrect order
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
        A selection's m_start is not guranteed to equal m_base since m_start can actually be m_base's downstream().
        A more accurate way to determine the order from selection is to ask directly for isBaseFirst().
        In addition, if the two visible positions given are the same position but different affinity, we need to 
        handle it here rather than depend on the selection. This is because selection does not retain the
        affinity of both selection start/end visible positions as part of the selection validation. 

2007-05-17  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Brady

        - fix http://bugs.webkit.org/show_bug.cgi?id=13759
          REGRESSION (r20182-r20184): Incorrect rendering of multipart images

        Test: http/tests/multipart/invalid-image-data.html

        * loader/loader.cpp:
        (WebCore::Loader::didReceiveData): Make a copy of the current part's data
        instead of using the resource data, because the latter is going to be
        overwritten by the new part being received.

2007-05-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Justin.

        Fix for <rdar://problem/4244861> Safari fails to create image file
        after releasing dragged image that has changed on source page

        Tell xcode to copy HTMLImageElement.h and HTMLImageLoader.h headers
        across to WebKit as private headers.

        * WebCore.xcodeproj/project.pbxproj:

2007-05-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5190926> 
        Gmail Editor: Crash when removing list style from underlined, multi-item list
        
        The user underlined some text, then created a list.
        The list was placed inside the inline element carrying 
        the underline style, so, that element surrounded the 
        list instead of being at the lowest level (just above 
        text nodes). This kind of markup is more difficult to 
        edit. Filed 5192089 and added a workaround so that we 
        don't produce this kind of markup.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Avoid inline
        elements when inserting the new list.

2007-05-17  David Hyatt  <hyatt@apple.com>

        Allow redundant attributes with the same name in view source mode.

        Reviewed by aroben

        * dom/NamedAttrMap.h:
        (WebCore::NamedAttrMap::insertAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):

2007-05-17  George Staikos  <staikos@kde.org>

        - Back out last patch based on discussion with Zack.

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

2007-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5207156> Hamachi test tool causes assertion in FormCompletionController in Safari

        This happens because the form delegate gets passed the wrong source frame during the second submit().
        If a frame with the given name is found, FrameLoader::load is called with the same parameters on the found frame.
        This causes the found frame to be used as the source frame, which is wrong.
        
        The fix is to create the form state object before checking what frame to load the new request in. 
        
        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        * loader/FrameLoader.h:
        * manual-tests/submit-form-with-target-twice.html: Added.

2007-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5205914> REGRESSION: PLT stops after loading first page due to r21479
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::frameHasLoaded):

2007-05-16  David Hyatt  <hyatt@apple.com>

        Improve the syntax-highlighted view source mode.  It now preserves all whitespace properly
        and highlights doctypes and comments (in addition to all the stuff it could highlight before).

        Reviewed by aroben

        * html/HTMLTokenizer.cpp:
        (WebCore::Token::addAttribute):
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        (WebCore::Token::Token):
        (WebCore::Token::~Token):
        (WebCore::Token::reset):
        (WebCore::Token::addViewSourceChar):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * html/HTMLViewSourceDocument.h:

2007-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        <rdar://problem/5191024> Page never loads completely (emonome.vodpod.com)
        <rdar://problem/5205162> REGRESSION (r21367): In the Address URL field, typing a site name doesn't redirect to site after pressing return
        http://bugs.webkit.org/show_bug.cgi?id=13683
        <rdar://problem/5208951> REGRESSION: Progress bar never completes on link click that downloads (13694)
        http://bugs.webkit.org/show_bug.cgi?id=13694
        <rdar://problem/5201598> REGRESSION: After uploading file to iDisk at mac.com, "loading" status remains and file does not appear in the list
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::mainReceivedCompleteError): Make sure to always check whether the overall
        load completed, even if we think the current frame load is already complete.

2007-05-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5204107> REGRESSION: CSS web forum site 
        layout not displaying properly in latest WebKit

        Hyatt's http://trac.webkit.org/projects/webkit/changeset/21428 
        exposed this bug. We were not handling error cases with <caption> 
        correctly. This patch makes them do the same thing as colgroup.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLParserErrorCodes.cpp: No need any more for caption-
        specific errors.
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h:
        (WebCore::):

2007-05-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin and Geoff.

        - rdar://problem/4981886
        - Now windows opened by the DOM can be closed by JS.

        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::WindowFunc::callAsFunction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::openedByDOM):
        (WebCore::FrameLoader::setOpenedByDOM):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/FrameLoader.h:

2007-05-16  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/4928671> Crash due to runaway recursion when fieldset has display: table-row (12066)

        Test: fast/css/fieldset-display-row.html

        * rendering/RenderContainer.cpp: (WebCore::RenderContainer::addChild):
        Change all decision making about special handling for new children to use
        the class of the render object instead of the style, except for the cases
        where the style is the only way to tell (TABLE_COLUMN_GROUP and TABLE_CAPTION).
        Thus a RenderFieldset with table-row style won't get handled as if it was
        a table row.

        * rendering/RenderTable.cpp: (WebCore::RenderTable::addChild): Same thing.
        Except that here the styles that we ahave to look at are TABLE_CAPTION,
        TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, and TABLE_ROW_GROUP.

2007-05-16  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars.

        Implement bigger parts of the Canvas element in the
        Qt port. Gradients and patterns are missing.

        * WebCore/html/CanvasRenderingContext2D.cpp:
        * WebCore/html/CanvasStyle.cpp:
        * WebCore/html/HTMLCanvasElement.cpp:
        * WebCore/html/HTMLCanvasElement:

2007-05-16  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix shared timers, make them use miliseconds. Based
        on a patch from George.

        * WebCore/platform/qt/SharedTimerQt.cpp:
       (WebCore::setSharedTimerFireTime):

2007-05-16  David Hyatt  <hyatt@apple.com>

        Add rudimentary error reporting to the HTML parser.  This is disabled
        for now until it gets beefed up a bit more (and until we work out how
        best to pass the messages up without hurting perf).

        Clean up and remove dead error handling code and incorrect error handling
        code as well.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::headCreateErrorCheck):
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParser.h:
        (WebCore::HTMLParser::reportError):
        * html/HTMLParserErrorCodes.cpp: Added.
        (WebCore::htmlParserErrorMessageTemplate):
        * html/HTMLParserErrorCodes.h: Added.
        (WebCore::):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::tagStartLineNumber):

2007-05-15  David Hyatt  <hyatt@apple.com>

        Make FrameLoader write "<html><body>" instead of just "<body>".

        Reviewed by aroben

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

2007-05-15  George Staikos  <staikos@kde.org>

        Reviewed by Adam Roben.

        - Pass cookies through from the loader.

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

2007-05-15  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        - Implement drawArc with proper units.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokeArc):

2007-05-15  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        - Add missing paint for nested subframes.

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

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for SVG attributes.

        Test: fast/dom/svg-element-attribute-js-null.xhtml

        * ksvg2/svg/SVGAngle.idl:
        * ksvg2/svg/SVGElement.idl:
        * ksvg2/svg/SVGLength.idl:
        * ksvg2/svg/SVGScriptElement.idl:

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for CanvasRenderingContext2D attributes.

        Test: fast/dom/canvasContext2d-element-attribute-js-null.html

        * html/CanvasRenderingContext2D.idl:

2007-05-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam and Geoff.

        Removing dead code left behind from drag and drop refactoring.

        * page/mac/WebCoreFrameBridge.h:

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        - Second Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for remaining CSSOM attributes.

        Test: fast/dom/css-element-attribute-js-null.html

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put):
        (KJS::DOMMediaList::put):
        (KJS::DOMCSSRule::putValueProperty):
        (KJS::DOMCSSValue::put):
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:

2007-05-15  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * css/html4.css: Remove wbr style rule -- not needed any more.

2007-05-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Brady

        - fix http://bugs.webkit.org/show_bug.cgi?id=13360
          REGRESSION: Crash closing live web cam viewer page

        Test: http/tests/misc/multipart.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFail): Avoid calling didFailToLoad() if
        didFinishLoad() has already been called (when the first part of a
        multipart resource arrived).
        (WebCore::ResourceLoader::didCancel): Ditto.

2007-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13722
          Finish testing and fixing the setting of DOM attributes to JS null

          Convert JS null to null string for remaining Core DOM attributes.

        Test: fast/dom/coreDOM-element-attribute-js-null.xhtml

        * dom/Attr.cpp:
        (WebCore::Attr::setValue): Don't throw an expection for null values as this
        is not in the spec and Firefox does not do it either.
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/ProcessingInstruction.idl:

2007-05-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13718
          REGRESSION (r21093): editing/execCommand/5136770.html failing pixel test

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode): Moved the code that clears the
        selection when moving a selection border into the fast path.

2007-05-15  Rob Buis  <buis@kde.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=6487
        "Make Text Bigger/Smaller" affects SVGs when it probably shouldn't

        Ignore Make Text Bigger/Smaller for SVG text.

        * css/svg.css:

2007-05-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5183685>
        http://bugs.webkit.org/show_bug.cgi?id=13301
        ASSERT or null value when trying to use a getter defined on a window object

        Handle the case where the value returned is a getter/setter object.
        
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getOverridePropertySlot):

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5200816>
        REGRESSION: With Shiira 1.2.2 , I can't open embedded link in flash object by clicking (http:/www.adobe.com )
        
        Shiira under some circumstances passes nil as the request to -[WebFrame loadRequest:]. ToT WebKit doesn't call any policy
        delegate methods in this case, which means that the page is actually being loaded. 
        
        This patch makes ToT WebKit behave in the same way as Tiger WebKit when the request is nil.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkNavigationPolicy):
        Don't continue without calling the navigation policy method if the request is null.
        
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        If the request can't be handled, don't continue the load.
        
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Don't create an NSURLRequest object if the request is null.

2007-05-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt and Lars.

        - fixed <rdar://problem/5201758> REGRESSION: Stop button enabled and other problems caused by [WebView currentURL] returning non-nil for empty window

        * WebCore.exp: export new symbol
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): move marker that we committed a real doc load from here...
        (WebCore::FrameLoader::transitionToCommitted): ...to here
        (WebCore::FrameLoader::frameHasLoaded): check that we have at least started loading something
        besides the initial empty doc.
        * loader/FrameLoader.h:

2007-05-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren
        
        <http://bugs.webkit.org/show_bug.cgi?id=13716>
        REGRESSION: Three new layout test failures
        
        Two failures are correct.  Updated their expected results.
        
        In fast/events/frame-tab-focus.html, as we advance
        through focusable nodes, we descend into a subframe
        to focus a node and then ascend out of it into the
        main frame to focus the next.  When we focus the main 
        frame, the node in that frame that was previously 
        focused and contains an inactive selection is focused 
        momentarily because setCaretVisible tries to focus the 
        node containing the caret.

        * page/Frame.cpp:
        (WebCore::Frame::setCaretVisible): Don't focus the
        node containing the caret. FocusController will focus
        the previously focused node (which will contain the
        caret) if necessary when the frame gains focus.
        
2007-05-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - fixed <rdar://problem/5203036> REGRESSION: Assertion failure in WebCore::FrameLoader::restoreScrollPositionAndViewState() going back from fark.com Photoshop contest (13684)

        Test: http/tests/navigation/back-to-slow-frame.html
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreScrollPositionAndViewState): Add needed early return.

2007-05-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13603
          style leaks in washingtonpost.com
          also known as http://bugs.webkit.org/show_bug.cgi?id=8750
          w3c.org: incorrect recovery from unclosed <a> elements
          also known as http://bugs.webkit.org/show_bug.cgi?id=12808
          Handling of misnested tags results in entire page appearing as link
          also known as http://bugs.webkit.org/show_bug.cgi?id=12861
          Post text renders as link

        Test: fast/parser/residual-style-close-across-n-blocks.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Changed to
        deal with multiple block crossings instead of bailing out, by doing multiple
        reparenting passes, starting from the outermost block.

2007-05-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13711
          REGRESSION - Bookmark Bar text rendering changed

        No test possible since this patch affects only Safari chrome.

        * platform/Font.cpp:
        (WebCore::Font::Font): Initialize m_isPlatformFont according to whether
        the Font object is derived from a FontPlatformData or not.
        * platform/Font.h:
        (WebCore::Font::isPlatformFont): Added. Returns whether this Font was
        derived from a platform font.
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters): Changed to not enable
        synthetic bold and italic in the fallback fonts if the original font
        was derived from a platform font.

2007-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice!

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=13541
          REGRESSION: Setting a DOMString attribute to JS null in the 
          JS bindings should default to converting to the empty string

          Convert JS null to the empty string when passing it to an attribute that takes
          a DOMString.

        Test: fast/dom/document-attribute-js-null.html
        Test: fast/dom/element-attribute-js-null.html

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::putValueProperty):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::putValueProperty):
        (KJS::JSHTMLElement::objectSetter):
        (KJS::JSHTMLElement::embedSetter):
        (KJS::JSHTMLElement::tableSetter):
        (KJS::JSHTMLElement::tableCaptionSetter):
        (KJS::JSHTMLElement::tableColSetter):
        (KJS::JSHTMLElement::tableSectionSetter):
        (KJS::JSHTMLElement::tableRowSetter):
        (KJS::JSHTMLElement::tableCellSetter):
        (KJS::JSHTMLElement::frameSetSetter):
        (KJS::JSHTMLElement::frameSetter):
        (KJS::JSHTMLElement::iFrameSetter):
        (KJS::JSHTMLElement::marqueeSetter):
        (KJS::JSHTMLElement::putValueProperty):
        * bindings/js/kjs_html.h:
        * dom/Document.idl:
        * dom/Node.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Trying to fix the Qt build.

        * WebCore.pro:

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Some improvements on my last patch, suggested by Darin.

        * history/PageCache.cpp:
        (WebCore::PageCache::autoreleaseNow): Swap with an empty set instead of 
        building up an array and then calling clear(). This is slightly more 
        efficient and the code is cleaner.

2007-05-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5136696> Selection is removed when focusing a node in another frame
        <rdar://problem/5192388> WordPress: Can't insert links/images
        
        Don't clear a selection when changing focus if the new
        focus node is in a different frame than the old selection.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Moved code to clear 
        selections to the FocusController, since it is Page level 
        and will know about the frame/document that contained the 
        old selection. Moved code to call shouldEndEditing to the 
        FocusController because selections are now cleared before
        calling Document::setFocusedNode and shouldEndEditing must
        be called before selections are cleared.
        * dom/Element.cpp:
        (WebCore::Element::blur): Call FocusController::setFocusNode
        instead of Document::setFocusNode, if possible.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Ditto.
        * page/FocusController.cpp:
        (WebCore::relinquishesEditingFocus): Moved from Document.cpp.
        (WebCore::clearSelectionIfNeeded): Ditto.  Don't clear if
        the old selection is in a frame that's different than the 
        one that contains the new focus node.
        (WebCore::FocusController::setFocusedNode): Moved code
        here from Document::setFocusedNode.
        * page/Frame.cpp:
        (WebCore::Frame::setFocusedNodeIfNeeded): Call
        FocusController::setFocusNode.

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Next step toward fixing <rdar://problem/5055182> The back cache has no 
        global cap.
        
        Created a PageCache singleton. Right now, it only handles the timer-based
        deallocation of cached pages. I plan to add HistoryItem->CachedPage tracking
        and eviction logic in later patches.

        Updated for renames and file changes:

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::setPageCacheSize):
        (WebCore::BackForwardList::clearPageCache):

        Removed global timed release code, moved into new PageCache class, since
        it's eventually going to be in charge of deciding when things are released:
        
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setCachedPage):
        * history/HistoryItem.h:

        Folded into PageCache:
        
        * history/HistoryItemTimer.cpp: Removed.
        * history/HistoryItemTimer.h: Removed.

        New singleton. Right now, it just handles timed release of cached pages:
        
        * history/PageCache.cpp: Added.
        (WebCore::pageCache):
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::autoreleaseNowOrReschedule):
        (WebCore::PageCache::autoreleaseNow):
        (WebCore::PageCache::autorelease):
        * history/PageCache.h: Added.

2007-05-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5200081> Repro crash in PopupMenu::show clicking popup menu button after reload

        * platform/mac/PopupMenuMac.mm: (WebCore::PopupMenu::show): Added call to dismissPopup so the cell gets unattached properly.

2007-05-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Remove incorrect assertion.

        * page/FrameView.cpp: (WebCore::FrameView::setContentsPos):

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5172056> Regression: cannot open txt file, get broken image

        Never let plug-ins override text/plain.
        
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2007-05-14  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Simon.

        Do some magic to get better dependency tracking for header
        files in the qmake project files.

        * ChangeLog:

2007-05-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Required updates after Maciej's frame change.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::mainReceivedCompleteError):
              Call checkLoadCompleted() at the end of the method. Without it
              we never get the loadDone() signal on the Qt port.
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::receivedFinished):
              Don't pass a null error to didFail().

2007-05-14  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - fix <rdar://problem/3109180> VIP: after go back, page jumps after loading even if I scrolled while loading

        * history/CachedPage.cpp: (WebCore::CachedPage::clear): Call clearFrame rather than
        clearPart -- the "part" term was leftover prehistoric terminology.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open): Call setWasScrolledByUser(false) on the page, so that we
        can detect any user scrolling that happens during the "go back" process.
        (WebCore::FrameLoader::restoreScrollPositionAndViewState): Don't scroll if the view's
        wasScrolledByUser flag is set.
        (WebCore::FrameLoader::loadItem): Call setWasScrolledByUser(false) false when we do
        a new "load" (actually just a scroll) using the same frame. Also moved the line of code that
        sets m_currentHistoryItem to make this code path mroe similar to recursiveGoToItem.
        (WebCore::FrameLoader::recursiveGoToItem): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Call clearFrame rather than stting m_frame directly.
        (WebCore::Frame::sendScrollEvent): Call setWasScrolledByUser(true) on FrameView. The FrameView
        itself knows to ignore this if the scrolling is being done programmatically instead of by the user.

        * page/FrameView.h: Added wasScrolledByUser and setWasScrolledByUser. Also removed unneeded
        include and class forward declarations, renamed clearPart to clearFrame, removed uneeded function
        haveDelayedLayoutScheduled, and removed unneeded friend declarations.
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Added m_inProgrammaticScroll and m_wasScrolledByUser.
        (WebCore::FrameViewPrivate::reset): Set m_wasScrolledByUser to false.
        (WebCore::FrameView::clearFrame): Renamed from clearPart.
        (WebCore::FrameView::scrollRectIntoViewRecursively): Added code to set the m_inProgrammaticScroll flag.
        (WebCore::FrameView::setContentsPos): Ditto.
        (WebCore::FrameView::wasScrolledByUser): Added.
        (WebCore::FrameView::setWasScrolledByUser): Added. Does nothing if called when m_inProgrammaticScroll
        is true.

2007-05-14  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - <rdar://problem/4865655> REGRESSION: find function does not work for the character ß

        The trick was to fold case consistently in the CircularSearchBuffer class.

        The problem was that we were folding the search target string with full case folding and
        the characters of the text we were searching with simple case folding. We now use full
        case folding in both cases.

        * editing/TextIterator.cpp:
        (WebCore::CircularSearchBuffer::CircularSearchBuffer): Changed the buffer to be a
        Vector<UChar>. Added a Vector<bool> to record which characters were starts of characters
        in the text we are searching. Changed the cursor to be an int rather than a pointer.
        (WebCore::CircularSearchBuffer::append): New function that knows how to append multiple
        characters when folding case turns one character into many -- uses the full foldCase
        rather than the simplified single-character foldCase. Also removed the append function
        that did multiple characters at once; that was part of an optimization we don't need.
        (WebCore::CircularSearchBuffer::isMatch): Instead of asserting that the buffer is full,
        changed this to return false if it's not full, which lets us fill up the buffer with
        the normal loop. Also return false if the start of the buffer is half-way through a
        case-folded character and updated this since m_cursor is now an integer.
        (WebCore::CircularSearchBuffer::length): This returns the length in non-case-folded
        characters of the characters that were appended, which may not be the same as the length
        of the original target string. To do that we have to total up the character start
        booleans for the current state of the circular buffer.
        (WebCore::findPlainText): Streamlined the logic in a few ways: 1) Moved more of the
        return value setup to the top of the function so it could be shared with the early
        error exit. 2) Removed the separate "fill the buffer" logic, which allowed me to
        remove some of the functions from CircularSearchBuffer and eliminated the need for
        two nested loops. 3) Replaced the CharacterIterator and bool that were used to record
        the location we found with integers matchStart and matchLength. 4) Got rid of the use
        of goto since we don't have two nested loops any more.

2007-05-14  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13275
        Safari crashed when trying to login using the windows live contact control

        Check for cleared windowObj in JSAbstractEventListener::handleEvent

        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):

2007-05-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13690
        JavaScript Form Validation issue on Banco do Brasil site

        Test: fast/forms/input-setvalue-selection.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): In other browsers, changing textInput.value
        always moves the insertion point past the text. In 10.4.9 WebKit, this only worked
        for inactive controls, and it never worked in ToT.

2007-05-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz

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

        Since HTMLInputElements register themselves with their Document for special handling, if their document
        ever changes then bad things can happen.

        Unfortunately, with adoptNode, the document can change.  This has been a long standing crasher with all 
        input fields but was given recent high visibility by r21430

        The solution is to add functionality for a Node to react to its owner document changing via a pair of 
        virtual callbacks.  Then we can tap into those callbacks in HTMLInputElement.

        No layout test possible until http://bugs.webkit.org/show_bug.cgi?id=13672 is resolved

        * dom/Node.cpp:
        (WebCore::Node::setDocument): Call willMoveToNewOwnerDocument and didMoveToNewOwnerDocument

        * dom/Node.h:
        (WebCore::Node::willMoveToNewOwnerDocument): Virtual callback to a node for before an owner document change
        (WebCore::Node::didMoveToNewOwnerDocument): Virtual callback to a node for after an owner document change

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Unconditionally unregister both for both form state
          and the cache restoration callback
        (WebCore::HTMLInputElement::setInputType): Change registration with the document only if we're in one
        (WebCore::HTMLInputElement::attach): Don't bother registering for the callback here - that will be
          handled by setInputType() or by a change in owner document
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument): Unregister with the old owner document
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument): Register with the new owner document
        * html/HTMLInputElement.h:

2007-05-13  Darin Adler  <darin@apple.com>

        * platform/mac/TextBreakIteratorInternalICUMac.mm: Fix comment typo.

2007-05-13  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13529
        DOM3 keyIdentifier text is incorrect

        Use 4 digits for the Unicode based key identifiers.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::isKeyboardOptionTab):
        * page/mac/EventHandlerMac.mm:
        (WebCore::isKeyboardOptionTab):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::isKeyboardOptionTab):
        * platform/gdk/KeyEventGdk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * platform/wx/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::keyIdentifierForWxKeyCode):

2007-05-12  Darin Adler  <darin@apple.com>

        Reviewed by Antti.

        - fix <rdar://problem/5174903> Safari crashes opening the attached webarchive (made by OmniWeb)

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse): Check ResourceHandle for nil before calling url() on it.
        (WebCore::IconLoader::didFail): Ditto.
        (WebCore::IconLoader::didFinishLoading): Ditto.

2007-05-12  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        Cleanup, get rid of the SVGStyledElement::view() call.

        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:

2007-05-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13680
          Incomplete repaint of focus ring around continuation

        Test: fast/repaint/continuation-after-outline.html

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):

2007-05-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4728842> Can't drag-and-drop files onto <input type="file">
        
        This patch allows a file to be dropped on to a file input field.  There
        are a few changes for data handling and a  few to allow the data to be
        threaded to the appropriate places.

        * page/DragController.cpp:
        (WebCore::asFileInput):
           When dropping a file onto a file input we may mouse over either 
           the element itself, or the contained button element.  This method
           returns the base element for the file input in either of these
           cases.
        (WebCore::DragController::tryDocumentDrag):
           Don't try to set the drag caret to a file input.
        (WebCore::DragController::concludeDrag):
           Handle dropping onto a file input element.
        (WebCore::DragController::canProcessDrag):
           We can now process a file being dragged onto a file input element.
           
        * platform/DragData.h:
           New accessors
           
        * platform/gdk/DragDataGdk.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
           Link stubs.
           
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
           Implement new accessors
        (WebCore::DragData::containsCompatibleContent):
           Update containsCompatibleContent to allow standalone files.
          
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
           Link stubs
                      
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::receiveDroppedFile):
        * rendering/RenderFileUploadControl.h:
           For security reasons we don't have an api to allow us to set 
           a value directly on a file input -- attempts to do so are
           blocked.  By adding a method to set the target through the 
           render we bypass such restrictions, and ensure the renderer
           is updated correctly.

2007-05-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13695
          REGRESSION (r21387): Replaced elements' highlight rects are wrongly positioned

        Test: fast/replaced/selection-rect.html

        Also fixes the same problem with list markers, covered by existing test
        fast/lists/markers-in-selection.html.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):

2007-05-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13685
          REGRESSION (r21368-r21388): Highlighting text in scrolled textareas behaves oddly

        Test: fast/repaint/text-selection-rect-in-overflow.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect):

2007-05-12  Brady Eidson  <beidson@apple.com>

        Rubber stamped by Mitz

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach): unregister->register - I screwed this one up in last minute renaming
          before committing  :(

2007-05-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin and Geoff

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13630
        and
        <rdar://problem/4873628>

        Back/Forward cache should work with pages with login fields.

        First change is to relocate the "useSecureKeyboardEntry" flag to the document.  This lets
        it persist through page cache transitions and it is truly a per-document concept more than
        per-frame anyways since its the document that has a password field, not the frame.

        Second change is to introduce the concept of an Element getting a "didRestoreFromCache()" callback.
        The idea is for elements to register with the document if they need work to be done when the
        page comes out of the back/forward cache.  Currently the only client of this service is 
        HTMLInputElements that are input type == PASSWORD.  Such an element's implementation for this
        method is to call reset()

        Finally, after a page is restored from the cache we have the document send the didRestoreFromCache()
        callback to its registered Elements.  The whole design is to clear the password fields after 
        restoring the page instead of when caching the page because we want to defer work for the common
        case - there shouldn't be extra work here just to navigate away from a page when the common case
        is that you'll never go back!

        No layout tests possible until http://bugs.webkit.org/show_bug.cgi?id=13672 is resolved

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::registerForDidRestoreFromCacheCallback): Add an Element to the special page-restoration callback list
        (WebCore::Document::unregisterForDidRestoreFromCacheCallback): Remove such an element
        (WebCore::Document::didRestoreFromCache): Called by FrameLoader - dispatch to all the registered elements
        (WebCore::Document::setUseSecureKeyboardEntryWhenActive): Set the local flag and call updateSecureKeyboardEntryIfActive
          on the Frame
        (WebCore::Document::useSecureKeyboardEntryWhenActive): Return the flag

        * dom/Document.h:
        (WebCore::Document::unregisterFormElementWithState): Renamed

        * dom/Element.h:
        (WebCore::Element::didRestoreFromCache): Added virtual base method

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Deregister from the document if inputType == PASSWORD
        (WebCore::HTMLInputElement::dispatchFocusEvent): Set the flag on the document, not the frame
        (WebCore::HTMLInputElement::dispatchBlurEvent): Ditto
        (WebCore::HTMLInputElement::setInputType): If changing to/from PASSWORD, register/deregister in the document accordingly
        (WebCore::HTMLInputElement::attach): Call registerForDidRestoreFromCacheCallback(this) instead of passwordFieldAdded()
        (WebCore::HTMLInputElement::didRestoreFromCache): Call reset();
        * html/HTMLInputElement.h:

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::~HTMLSelectElement): Renamed deregisterFormElementWithState to unregisterFormElementWithState
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::~HTMLTextAreaElement): Ditto

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage): Remove the check for password fields - they're allowed now!
        (WebCore::FrameLoader::opened): Tell the document to dispatch to the registered elements
        (WebCore::FrameLoader::saveDocumentState): Remove the check for password fields.  Turns out that when we grab a copy a the
          form state we're only copying the state of form elements that are registered with the Document - and that set 
          explicitly excludes Password elements

        * page/Frame.cpp:
        (WebCore::Frame::setDocument): If the frame is active, set the setUseSecureKeyboardEntry based on the setting contained
          in the new document
        (WebCore::Frame::updateSecureKeyboardEntryIfActive): Notification for the secure entry flag changing - if the Frame is
          active, then update to the new setting from the document
        (WebCore::Frame::setIsActive): Grab the useSecureKeyboardEntry flag from the document instead of FramePrivate
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:

2007-05-12  David Hyatt  <hyatt@apple.com>

        FIx for 13696.  Rework residual style to be much more aggressive about reopening.  Added
        a comprehensive test case of HTML tags to guarantee we match Firefox.  We now have an exclusion
        set rather than an inclusion set, so unknown future tags will also participate in residual style.

        Reviewed by olliej

        fast/invalid/residual-style.html

2007-05-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 12740, bmw.com doesn't work.  We were missing a rule that is covered by the HTML5
        parsing spec.  A <table> encountered while inside stray table content should close up the
        table responsible for the stray content and start the new table as a sibling of the first.

        Reviewed by mjs

        fast/invalid/table-inside-stray-table-content.html

2007-05-12  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Crash starting Safari with JavaScript disabled.
        http://bugs.webkit.org/show_bug.cgi?id=13691
        
        Test: none possible.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::cleanupPlatformScriptObjects): NULL check d->m_script

2007-05-11  David Hyatt  <hyatt@apple.com>

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13688, Colloquy is broken!

        Make sure to adjust the baseline of a percentage height table cell's row if the
        cell flexes (and lowers the baseline).

        Reviewed by olliej

        fast/tables/vertical-align-baseline-readjust.html

        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::getBaseline):
        
2007-05-11  David Hyatt  <hyatt@apple.com>

        Make sure focus rings are always using the exterior style, regardless
        of what the OS default is.

        Reviewed by beth

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::checkbox):
        (WebCore::RenderThemeMac::radio):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):

2007-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.
        
        <rdar://problem/5195473> REGRESSION: "Curly quote" fails to 
        be displayed correctly even when META tag specifies charset=x-mac-roman


        * platform/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Register the xmacroman encoding

2007-05-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        REGRESSION (r21367): Crash due to null document deref when closing bookmarks
        http://bugs.webkit.org/show_bug.cgi?id=13662

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted): Remove some useless and now harmful
        code - there's no need to clear in this case.

2007-05-11  Oliver Hunt  <oliver@apple.com>

        GDK Build fix

        * ChangeLog:
        * dom/Document.cpp:
        (WebCore::Document::importNode):

2007-05-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - fixed <rdar://problem/5197621> closing second window crashed webkit (13660)
        http://bugs.webkit.org/show_bug.cgi?id=13660

        No test case; not testable.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::cleanupPlatformScriptObjects): Check if the interpreter is null;
        if so, we don't want to do work that may lazily create it while the Frame is being
        destroyed.

2007-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.
        
        <rdar://problem/5017375> WebKit should disable SVG in Dashboard
        
        Prevents an SVG document or element from being created when in
        dashboard compatibility mode.
        
        Manually parsing, or using XHR to created a document removes our 
        ability to detect Dashboard compatibility mode, so we also perform
        the check when importing nodes from one document into another.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
          Don't create an SVGDocument if we're in dashboard compatibility mode
          
        * dom/Document.cpp:
        (WebCore::Document::importNode):
          Don't import SVG nodes if we're in dashboard compatibility mode
          
        * ksvg2/scripts/make_names.pl:
          Don't create SVG elements for documents that are in dashboard
          compatibility mode

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

        Reviewed by Maciej.

        Bug 13676: [cairo/gdk] Provide implementation for ImageBufferCairo
        http://bugs.webkit.org/show_bug.cgi?id=13676

        There are no test cases that explicitly cover platform/graphics at present.

        * platform/graphics/ImageBuffer.h: Add cairo bits
        * platform/graphics/cairo/ImageBufferCairo.cpp: Untested implementation of the ImagerBuffer using the image_surface
        (WebCore::ImageBuffer::create): Create a reasonable sized surface
        (WebCore::ImageBuffer::ImageBuffer): Use a cairo_surface and create a GraphicsContext. GraphicsContext takes the cairo_t ownership
        (WebCore::ImageBuffer::~ImageBuffer): Unref the surface
        (WebCore::ImageBuffer::context): simply return the GraphicsContext, it should be possible to directly draw on it.

2007-05-11  Mitz Pettel  <mitz@webkit.org>

        Release build fix.

        * platform/mac/ShapeArabic.c:
        (shapeArabic):

2007-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Removed +[WebScriptObject scriptObjectForJSObject:frame:] because the
        WebScriptObject API has some serious limitations that make it not ready
        to be used everywhere the C API is used. Hopefully we can add a good
        ObjC API in the future that doesn't suffer from this problem.
        
        Preliminary notes about these limitations are in <rdar://problem/4876466>.

        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/WebScriptObjectPendingPublic.h:

2007-05-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13635
          REGRESSION: Cannot log in to webmail.co.za account

        Test: fast/dom/HTMLOptionElement/option-text.html

        Despite the specification that the 'text' attribute of HTMLOptionElement
        is "the text contained within the option element", other browsers return
        the text as displayed in the list box or popup, which is without leading,
        trailing and collapsible whitespace.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text): Moved the code to trim and collapse
        whitespace and replace backslashes with the currency symbol into this
        function.
        (WebCore::HTMLOptionElement::optionText): Left only the code that adds
        the leading spaces for grouped options. Removed code that, in quirks mode,
        displayed the label if the option element contained no text. That behavior
        did not match WinIE and the description of the expected behavior in
        fast/forms/HTMLOptionElement_label06.html.

2007-05-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13572
          Arabic characters are not correctly joined when using Arial

        No tests added because standard fonts do not use the character-based shaping
        code path.

        Added shapeArabic(), a private version of u_shapeArabic() from ICU,
        patched to shape Arabic characters used in Persian, Urdu, Sindhi, etc.
        (whose contextual forms belong to the Arabic Presentation Forms-A block).

        * WebCore.xcodeproj/project.pbxproj: Added ShapeArabic.{c,h}.
        * platform/mac/FontMac.mm:
        (WebCore::shapeArabic): Changed to call shapeArabic() instead of u_shapeArabic().
        * platform/mac/ShapeArabic.c: Added. Based on ushape.c from ICU, with
        additional shaping data and logic for Arabic Presentation Forms-A. Removed
        many options that are not used in WebKit and code that malloc()ed a temporary
        buffer and reversed the string.
        (changeLamAlef):
        (specialChar):
        (getLink):
        (isTashkeelChar):
        (shapeUnicode):
        (shapeArabic):
        * platform/mac/ShapeArabic.h: Added.

2007-05-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7452
          <rdar://problem/3211749> line breaks ignored after <wbr> in <pre> block (affects livejournal.com)

        - fix http://bugs.webkit.org/show_bug.cgi?id=10657
          <rdar://problem/4274588> <wbr> tags are ignored

        - fix http://bugs.webkit.org/show_bug.cgi?id=12689
          <wbr> :before/:after content causes line break

        - fix <rdar://problem/5127366> DOM tree isn't correct when parsing with <wbr>

        Test: fast/text/wbr-pre.html
        Test: fast/text/wbr.html
        Test: fast/css-generated-content/wbr-with-before-content.html
        Test: fast/parser/parse-wbr.html

        * html/HTMLElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::endTagRequirement): Use the same end tag requirement for a <wbr>
        element as for a <br> element, TagStatusForbidden.
        (WebCore::HTMLElement::tagPriority): Use the same priority for a <wbr> element as for a
        <br> element, 0.
        (WebCore::HTMLElement::createRenderer): Added. Create a RenderWordBreak to trigger the
        new rendering code paths.

        * rendering/RenderFlow.h: Add a virtual isWordBreak so we can detect RenderWordBreak.

        * rendering/RenderWordBreak.h: Added.
        * rendering/RenderWordBreak.cpp: Added.

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

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::calcInlinePrefWidths): Reset the
        line when we hit a <wbr>.
        * rendering/bidi.cpp: (WebCore::RenderBlock::findNextLineBreak): Add a line break when
        we hit a <wbr>.

        * dom/Node.cpp: (Node::createRendererIfNeeded): Fix a null check for the case where
        createRenderer returns 0 even though rendererIsNeeded returned true. I can't reproduce
        it on demand, but while running layout tests I hit this once. Since there was already
        a null check here, I rearranged it so it guards all the code that uses the renderer.
        Later we might want to figure out under exactly what circumstances rendererIsNeeded
        will return true but createRenderer return 0 and consider eliminating them.

2007-05-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 13675, focus rings don't repaint properly on editable
        continuations.

        Reviewed by olliej

        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::continuationOutlineTable):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::paintContinuationOutlines):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteClippedOverflowRect):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::absoluteOutlineBox):

2007-05-11  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        Cleanups mostly inspired by Coverage results.

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleFillData::operator==):
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

2007-05-11  Holger Freyther <freyther@kde.org>

        Reviewed by Mark Rowe.

        Move libcurl configuration into WebKit.pri so it will be used by GdkLauncher.

        * WebCore.pro:

2007-05-10  David Hyatt  <hyatt@apple.com>

        <rdar://problem/5015522> Bounds rectangle of unloaded images is 
        drawn briefly while loading
        
        When the image is null and has no size, don't draw the grey
        rectangles or alt text any more.  Wait for an actual error to
        occur with the image before we start showing alt text and borders.

        (Images with no source set at all will continue to show alt text and
        borders immediately.)

        Reviewed by bradee-oh

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

2007-05-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13655
          Incomplete repaint when text-shadow is used in a render layer with explicit height

        Test: fast/repaint/layer-full-repaint.html

        Removed custom repaint logic from RenderLayer. repaintAfterLayoutIfNeeded()
        knows how to do everything we need now. The only catch is that we cannot
        rely on its "do a full repaint if the object needs layout" behavior, since
        by the time we call it, the needs layout flag has been reset. The solution
        is to cache the need for a full repaint in the layer.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Removed call to checkForRepaintOnResize().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::checkForRepaintOnResize): Removed.
        (WebCore::RenderLayer::RenderLayer): Replaced the m_repaintOverflowOnResize
        flag with a m_needsFullRepaint flag, which indicates that the layer needs
        to do a full repaint in the next call to updateLayerPositions().
        (WebCore::RenderLayer::updateLayerPositions): Simplified the repaint logic.
        Either call repaintAfterLayoutIfNeeded() or do a full repaint, depending on
        m_needsFullRepaint.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::setNeedsFullRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setNeedsLayout): Mark the layer for full repaint.

2007-05-10  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren

        <rdar://problem/5195166> Incorrect proposedRange DOMRange passed to WebViewEditing delegate
        
        In setModifyBias, we must cache the start and the end 
        because the calls to setBase and setExtent can modify 
        them (added a testcase).
        The temporary SelectionController that we use in modify() to
        produce the proposed range that will be passed to 
        shouldChangeSelectedDOMRange must have the same m_modifyBias
        as the original SelectionController, or else when the 
        modification is performed, setModifyBias can swap the base 
        and the extent incorrectly (added a testcase).
        Renamed m_modifyBias to m_lastChangeWasHorizontalExtension.
        Renamed setModifyBias to willBeModified.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::willBeModified):
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:
        (WebCore::SelectionController::setLastChangeWasHorizontalExtension):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDragOverPosition):

2007-05-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        "IconDatabase::sharedIconDatabase()" => "iconDatabase()" for terseness,
        in the style of WebCore::cache().

        * WebCore.exp:
        * history/HistoryItem.cpp: Removed retainIconInDatabase because calling
        "retain" in order to release something is really confusing and, now that
        iconDatabase() is more terse, we don't need this helper to shorten the
        syntax. (The isEmpty() check is also done by the database, so we don't 
        need it either.)

        (WebCore::IconDatabase::~IconDatabase): ASSERT that our destructor isn't
        called. We're a singleton, so it's confusing to have tear-down code.

2007-05-10  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        WebCore part of fix for <rdar://problem/4100616> Doing a "find" in RSS doesn't scroll to result

        Test: fast/overflow/scroll-nested-positioned-layer-in-overflow.html

        Merged visibleSelectionRect into selectionRect.  selectionRect() now takes an argument to determine
        whether or not to return a rect that clips to the visible content.  This change makes all of the implementations of selectionRect
        consistent by having them all consider the repaint rect when clipping to visible content.

        * page/Frame.cpp:
        (WebCore::Frame::revealSelection): Call selectionRect with clipToVisibleContent = false, so we can get a rect that's not visible to reveal.
        (WebCore::Frame::selectionRect): Added clipToVisibleContent argument, and merged visibleSelectionRect into this method.
        (WebCore::Frame::setIsActive): Use selectionRect instead of visibleSelectionRect.
        * page/Frame.h:
        * page/mac/FrameMac.mm: (WebCore::Frame::selectionImage): Update layout before creating the image.  Use selectionRect instead of visibleSelectionRect.
        * page/DragController.cpp: (WebCore::dragLocForSelectionDrag): Use selectionRect instead of visibleSelectionRect.

        * rendering/RenderBR.h: (WebCore::RenderBR::selectionRect): Updated argument.
        * rendering/RenderBlock.h: (WebCore::RenderBlock::selectionRect): ditto.
        * rendering/RenderSVGInlineText.cpp: (WebCore::RenderSVGInlineText::selectionRect): ditto.
        * rendering/RenderSVGInlineText.h: ditto.
        * rendering/RenderObject.h: 
        (WebCore::RenderObject::selectionRect): ditto.
        (WebCore::RenderObject::SelectionInfo::SelectionInfo): ditto.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionRect): ditto.
        (WebCore::RenderView::setSelection): ditto.
        * rendering/RenderView.h:

        * rendering/RenderText.h:
        * rendering/RenderText.cpp: (WebCore::RenderText::selectionRect): Only call computeAbsoluteRepaintRect when clipping to visible content.
        Otherwise, just adjust the rect to the correct position.
        * rendering/RenderListMarker.h:
        * rendering/RenderListMarker.cpp: (WebCore::RenderListMarker::selectionRect):
          To match what we do in RenderText, if we're trying to clip to visible content, just call computeAbsoluteRepaintRect.
        * rendering/RenderReplaced.h:
        * rendering/RenderReplaced.cpp: (WebCore::RenderReplaced::selectionRect): ditto.

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollRectToVisible): Check for a parent layer at the beginning, so we can try to scroll all of our parent layers 
          first, before trying to scroll the top level view.  Also, don't try to scroll overflow layers that have -webkit-line-clamp restricting the height.
          This will prevent us from revealing text hidden by the slider in Safari RSS.

        * WebCore.exp: Update symbols for WebKit.

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5195272> REGRESSION: broke outline rings for continuations 
        with empty inline containers
        
        http://bugs.webkit.org/show_bug.cgi?id=13667

        Make sure to only include collapsed top/bottom margins of the block portion
        of the continuation if we know for sure that we have inline line boxes before
        and after that would prevent the collapse from going further.

        In plain English: the focus rings were too tall. :)

        Reviewed by beth

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5067235> REGRESSION: Excessively wide table, impossible to resize

        The table used white-space: pre-wrap, which is supported only by WebKit.  There
        was a bug with the computation of min pref width for pre-wrap text.

        Reviewed by mitzpettel

        fast/text/white-space/pre-wrap-line-test.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcPrefWidths):

2007-05-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        Cleanup from my earlier Java Applet patch.  We should keep a central location to query if 
        a mime type counts as a Java Applet

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet): Query MimeTypeRegistry on the type

        * platform/MimeTypeRegistry.cpp:
        (WebCore::MimeTypeRegistry::isSupportedImageMIMEType): Update style
        (WebCore::MimeTypeRegistry::isSupportedImageResourceMIMEType): Ditto
        (WebCore::MimeTypeRegistry::isSupportedNonImageMIMEType): Ditto
        (WebCore::MimeTypeRegistry::isJavaAppletMIMEType): Perform the Java Applet check
        * platform/MimeTypeRegistry.h:

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Query MimeTypeRegistry on the type

2007-05-10  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4720109> Sentence textMarker methods do not work well with empty lines
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXNextSentenceEndTextMarkerForTextMarker:]):
        (-[WebCoreAXObject doAXPreviousSentenceStartTextMarkerForTextMarker:]):
        When a marker position is given, the sentence ax methods automatically shift position by one to make sure
        not to ask for the current sentence again.  This is generally fine except when the position
        shift over an empty line break, which is should be considered a separate sentence. In this case, 
        if we used the shifted position to ask for sentence boundary, ICU parser is not given the text data
        containing the newline to correctly determine the sentence boundary.  Since the ax sentence method is 
        explicitly shifting the position to ask for sentence boundary, it should make sure not to skip over important
        character that can be a standalone sentence.
        * editing/visible_units.cpp:
        (WebCore::nextBoundary):
        When determining boundary, don't stop on a collapsed range, such as newline.  
        Just pick the next valid position to use as boundary.

2007-05-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - WebCore part of fix for:
        <rdar://problem/5063277> blank screen after login to Citibank Online (accessing document before frame starts loading cancels load)
        <rdar://problem/5159541> REGRESSION (r20972): Wall Street Journal pages replaced by advertisements (13465)

        The basic approach is to have Frames start out containing an empty document instead of absolutely nothing,
        so there is no need to initialize them on demand. Various side effects of that cause both of these bugs.
        
        However, this caused many regressions so I had to fix the fallout.
        
        * WebCore.exp: fix symbol exports
        * bindings/js/kjs_window.cpp:
        (KJS::createNewWindow): useless "created" bool (we don't need it here)
        (KJS::WindowFunc::callAsFunction): detect if we created a new frame, because if so,
        we need to initialize the domain (can't count on it not having a document), also
        don't try to make a new document for it.
        Also, stop properly.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector): don't count on document having a view here
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isImageType): Ask client, to match how other <object> renderer
        decisions are made.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Initialize new data members
        (WebCore::FrameLoader::init): Do the slightly tricky sequence of steps to properly make
        an empty document with everything hooked up.
        (WebCore::FrameLoader::createWindow): Added "created" bool.
        (WebCore::FrameLoader::stopLoading): (whitespace change)
        (WebCore::FrameLoader::begin): Don't try to create an empty document.
        (WebCore::FrameLoader::finishedParsing): If creating an initial empty document, don't
        do any of this work.
        (WebCore::FrameLoader::checkCompleted): Do checkLoadComplete() as well.
        (WebCore::FrameLoader::baseURL): don't check for null document
        (WebCore::FrameLoader::baseTarget): ditto
        (WebCore::FrameLoader::completeURL): ditto
        (WebCore::FrameLoader::didTellBridgeAboutLoad): ditto
        (WebCore::FrameLoader::scheduleLocationChange): determine duringLoad differently; doc won't
        be null.
        (WebCore::FrameLoader::gotoAnchor): don't check for null document
        (WebCore::FrameLoader::canTarget): don't check for null document
        (WebCore::FrameLoader::stopForUserCancel): new method for explicit stops like window.stop().
        (WebCore::FrameLoader::transitionToCommitted): check for pre-loaded state properly
        (WebCore::FrameLoader::createEmptyDocument): removed
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): don't send delegate callbacks when making initial
        doc.
        (WebCore::FrameLoader::tokenizerProcessedData): Assume document; just checkCompleted now that it
        does checkLoadComplete.
        (WebCore::FrameLoader::receivedMainResourceError): assume document
        (WebCore::FrameLoader::saveDocumentState): Assume there's a document except during initial load
        (WebCore::FrameLoader::mainReceivedCompleteError): do checkCompleted, not checkLoadComplete
        (WebCore::FrameLoader::continueLoadWithData): assume document
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError): Add more ref protection and do things in a slightly
        different order.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::document): don't force document creation, just assert there is one.
        * page/Frame.cpp:
        (WebCore::Frame::init): Added init method.
        (WebCore::Frame::pageDestroyed): when a frame is removed, make sure to check if the parent is
        done loading.
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]): No need to force
        document.
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]): ditto
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): init the frame
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::updateWidgetPosition): If a subframe needs layout, then lay it out even
        if the bounds did not change; the content size might be wrong.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): Don't crash if the frame lacks a view.

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5146757> REGRESSION: div that wrapped to screen width in 
        tiger no longer wraps
        
        http://bugs.webkit.org/show_bug.cgi?id=13654

        Reviewed by mitz

        fast/text/whitespace/normal-after-nowrap-breaking.html

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

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/4778099> Links with nested continuations fail to 
        paint their outlines (11255)
        
        http://bugs.webkit.org/show_bug.cgi?id=11255

        Fix multiple bugs with outline painting of continuations to ensure that
        all combos work (empty/full inline - block with/without margins - 
        empty/full inline).

        Reviewed by mitz

        fast/inline/continuation-outlines.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/5193529> REGRESSION: RTL Overflows scrollbar not showing 
        when they should be
        
        Fallout from fix for bug 11926.  Make sure to restrict the fix to the
        RenderView for now, since the full-blown overflow case is pretty involved.

        Reviewed by mitzpettel

        fast/overflow/unreachable-content-bug-rtl.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):

2007-05-10  Brady Eidson <beidson@apple.com>

        Reviewed by Oliver

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13636 and <rdar://problem/5190816>

        When creating the applets collection, be sure to only count Objects if they contain
        a java applet

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::traverseNextItem): Add the qualifier for Objects that 
          containsJavaApplet() must be true

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet): Check this Object element and inner
          nodes for any Java applets
        * html/HTMLObjectElement.h: 

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/4694859> SAP: HTML tags with overflow:hidden consume
        space on page, do not consume space in Firefox (11926)

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

        Make sure that unreachable objects along one axis (e.g., top/left) do not
        contribute to the scrollable area in the opposite axis (e.g., right/bottom).

        Reviewed by olliej

        fast/overflow/unreachable-content-test.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for:

        <rdar://problem/4656825> REGRESSION: Japanese TV time table widget:
        part of the number in background has been cut off.

        Now that opacity uses a tight bounding box to clip, we need to make sure
        to factor spillout caused by negative letter spacing into our right
        overflow.  Latch on to the code that does this already for text-stroke
        and text-shadow.

        Reviewed by olliej

        fast/text/letter-spacing-negative-opacity.html

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

2007-05-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        More fix-ups to the WebScriptObject/WebScripting APIs, related to
        <rdar://problem/5140447> API for fetching JSGlobalContextRef from WebView 
        or WebFrame

        * bindings/objc/WebScriptObject.h: Fully specified the surprising rules for
        type conversion between JavaScript and ObjC.
        * bindings/objc/WebScriptObject.mm: Added up-call accessor to WebFrame.
        This is kind of stinky, but I'm OK with it because eventually all of this
        code should move up into WebKit.
        (+[WebScriptObject scriptObjectForJSObject:frame:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject JSObject]): 
            - Added _rootObject check because if _rootObject returns NULL it means 
            that _imp is no longer GC protected, so it's not safe to use. 
            - Added _isSafeScript check because that's what WebScriptObject methods
            typically do, even though the value of doing so isn't clear to me.
        * bindings/objc/WebScriptObjectPendingPublic.h: Added WebFrame* parameter
        to -scriptObjectForJSObject:. This is required to wrap JS objects that
        are not already in the wrapper cache. It would be nice to remove this
        limitation of WebScriptObject some day.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::cleanupPlatformScriptObjects): Force removal of m_windowScriptObject
        from the cache, to avoid retrieving the m_windowScriptObject from the previous
        page on a new page load. (It would be non-functional in that case.)

2007-05-10  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5183697>.

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

        Make sure verticalPositionHint is not called on an inline-block from
        content inside the inline-block (like text).

        Reviewed by olliej

        fast/inline-block/inline-block-vertical-align.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalPositionHint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::verticalPositionHint):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize):

2007-05-09  Holger Freyther <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Gdk build fix with SVG enabled.  Stub out ImageBufferCairo.

        * WebCore.pro: Build ImageBufferCairo.cpp
        * platform/graphics/cairo/ImageBufferCairo.cpp: Added.
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):

2007-05-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5017613> Style changes don't effect fully selected ToDo content

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        Use a for loop instead of while(1).
        Simplify loop termination using Range::pastEndNode.
        Don't handle the start.node() == end.node() case 
        specially, it's unnecessary.
        Apply the style change to fully selected plaintext-only
        regions, not with wrapper spans inside the region, but 
        by changing the element's inline style declaration.
        Don't descend into nodes whose children we should ignore.

2007-05-09  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5113578> REGRESSION: textfields that set the height but not the font 
        look different from IE & FF because the font is small

        For plain text fields, don't stretch the inner text box.  Center it vertically in the field.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::layout):

2007-05-09  Atul Mehrotra  <atul.mehrotra@celunite.com>

        Gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::newGeneralClipboard):

2007-05-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13037
          REGRESSION: Copy-on-scroll not reset properly after back/forward navigation

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Moved initialization of
        m_slowRepaintObjectCount here.
        (WebCore::FrameViewPrivate::reset): Do not reset the slow repaint object
        count here.
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject): Added an assertion that the
        object count is positive.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Corrected a mix up between old and new
        style, which caused the object count to be decremented when it was supposed
        to be incremented and vice versa.

2007-05-09  Peter Müller <pm@one.com>

        Reviewed by Dave Hyatt.

        Changed the hardcoded colors that are used for CSS 2.1 system colors.
        Previous colors had numerous conflicts in semantic pairs, which
        made text invisible in highlight, info and menu colored areas.
        The new hardcoded colors are inspired by Aqua.

        Ideally these colors should be fetched through AppKit instead,
        though I am not sure if it is possible to make a 1:1 mapping
        between CSS2.1 system colors and Mac OS X.

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

2007-05-09  Lars Knoll <lars@trolltech.com>

        Fix the Qt build.

        * editing/qt/EditorQt.cpp:

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        More fix-ups to the WebScriptObject/WebScripting APIs, related to
        <rdar://problem/5140447> API for fetching JSGlobalContextRef from WebView 
        or WebFrame
        
        1. Added -scriptObjectForJSObject: SPI so you can bridge back from JavaScriptCore
        to WebScriptObject.
        
        2. Fixed WebScriptObject bridging so that you always get the same WebScriptObject
        for a JSObject (like in the DOM). This makes -scriptObjectForJSObject: a
        lot more coherent as an API.

        * bindings/objc/DOMInternal.mm: Renamed wrapperCache to DOMWrapperCache
        to distinguish from the JSWrapperCache. Added typedef for readability.
        (WebCore::getDOMWrapper):
        (WebCore::addDOMWrapper):
        (WebCore::removeDOMWrapper):
        * bindings/objc/WebScriptObject.mm: Added JSWrapperCache, which works just
        like the DOMWrapperCache.
        (WebCore::getJSWrapper):
        (WebCore::addJSWrapper):
        (WebCore::removeJSWrapper):
        (WebCore::createJSWrapper):
        (+[WebScriptObject scriptObjectForJSObject:]): This is the new API. It attempts
        to return a specific DOM wrapper object, or, barring that, it returns a 
        generic WebScriptObject.
        (+[WebScriptObject scriptObjectForJSObject:originRootObject:rootObject:]):
        Added this method to support our old WebScriptObject security and leak 
        checking model, even though it doesn't work very well. 
        (-[WebScriptObject _setImp:originRootObject:rootObject:]):
        (-[WebScriptObject dealloc]):
        (-[WebScriptObject finalize]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/objc/WebScriptObjectPendingPublic.h:
        * bindings/objc/WebScriptObjectPrivate.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject): Changed to use the new API. This
        fixes a bug where the object sent to -windowScriptObjectAvailable: and returned
        from -windowScriptObject could not be round-tripped.

2007-05-09  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * editing/Editor.cpp:
        (WebCore::findFirstGrammarDetailInRange): Use unsigned rather than int.
        (WebCore::findFirstBadGrammarInRange): Cast to unsigned in assertion.
        (WebCore::isRangeUngrammatical): Remove unused variables.

2007-05-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.
        
        Fix <rdar://problem/5188938> arc method on Canvas causes hang or crash
        
        Workaround bad behaviour of CGPathAddArc when passed inf as start or
        end angles.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addArc):

2007-05-08  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt and Hatcher.

        - fix auto-activation code path so Tiger and Leopard aren't different

        * platform/mac/WebFontCache.mm: (+[WebFontCache fontWithFamily:traits:size:]):
        Do the auto-activation dance first before doing anything else, and ignore the
        font that it returns.

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Moved most spelling/grammar logic to C++.  Now calls through to
        WebKit to actually invoke NSSpellChecker.

        * editing/Editor.cpp:
        (WebCore::Editor::ignoreSpelling): Added (ported from EditorMac).
        (WebCore::Editor::learnSpelling): Added (ported from EditorMac).
        (WebCore::findFirstMisspellingInRange): Added (ported from EditorMac).
        (WebCore::paragraphAlignedRangeForRange): Added (ported from EditorMac).
        (WebCore::findFirstGrammarDetailInRange): Added (ported from EditorMac).
        (WebCore::findFirstBadGrammarInRange): Added (ported from EditorMac).
        (WebCore::Editor::advanceToNextMisspelling): Added (ported from EditorMac).
        (WebCore::Editor::isSelectionMisspelled): Added (ported from EditorMac).
        (WebCore::isRangeUngrammatical): Added (ported from EditorMac).
        (WebCore::Editor::isSelectionUngrammatical): Added (ported from EditorMac).
        (WebCore::Editor::guessesForUngrammaticalSelection): Added (ported from EditorMac).
        (WebCore::Editor::guessesForMisspelledSelection): Added (ported from EditorMac).
        (WebCore::Editor::showSpellingGuessPanel): Added (ported from EditorMac).
        (WebCore::Editor::spellingPanelIsShowing): Added (ported from EditorMac).
        (WebCore::Editor::markMisspellingsAfterTypingToPosition): Added (ported from EditorMac).
        (WebCore::markAllMisspellingsInRange): Added (ported from EditorMac).
        (WebCore::markAllBadGrammarInRange): Added (ported from EditorMac).
        (WebCore::markMisspellingsOrBadGrammar): Added (ported from EditorMac).
        (WebCore::Editor::markMisspellings): Added (ported from EditorMac).
        (WebCore::Editor::markBadGrammar): Added (ported from EditorMac).
        * editing/mac/EditorMac.mm: Removed Objective C version of spelling/grammar calls.

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.

        Slight modification to last editor method fix.

        * bridge/EditorClient.h:
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithGrammarString):

2007-05-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=13480
        window.Attr is undefined

        Test: fast/dom/Window/attr-constructor.html

        * dom/Attr.idl:
        * dom/CDATASection.idl:
        * dom/CharacterData.idl:
        * dom/Comment.idl:
        * dom/DOMImplementation.idl:
        * dom/DocumentType.idl:
        * dom/Entity.idl:
        * dom/EntityReference.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        Added GenerateConstructor.

        * page/DOMWindow.idl: Added constructor properties for DOM interfaces.

2007-05-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed <rdar://problem/5140447> API for fetching JSGlobalContextRef from 
        WebView or WebFrame
        
        Added support for new -[WebScriptObject JSObject] and -[WebFrame globalContext]
        APIs.
        
        Also fixed some more cases of <rdar://problem/4395622> API: 
        WebScriptObject.h incorrectly reports that -isSelectorExcludedFromWebScript 
        returns NO by default, and generally cleaned up that documentation.

        * WebCore.exp: A lot of the diff here is from sorting.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.h:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject JSObject]):
        * bindings/objc/WebScriptObjectPendingPublic.h: Added.

2007-05-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Hyatt.

        Fix valgrind reported uninitialized memory read.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):

2007-05-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/4895428> Can't drag selected ToDo
        
        The user tries to drag a selection by mousing down
        on the editable part of a ToDo, which is focusable,
        since it is an editable node within non-editable 
        content.  But we focus focusable elements on mouse 
        down, and focusing the editable piece blows away 
        the selection and prevents the drag. This is how 
        IE behaves, but content seems generally difficult 
        to drag in IE, so this doesn't make it any worse.
        
        Since focus doesn't appear to be cancelable, either
        with a DOM event or an editing delegate, I fixed this
        by delaying the focus of focusable nodes that are 
        selected and inside an already focused node.  The 
        node will be focused if the user mouses up without 
        doing any dragging because the mouse up sets a
        selection, which calls setFocusNodeIfNeeded.

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

2007-05-07  Atul Mehrotra <atul.mehrotra@celunite.com>

        Reviewed by Maciej.

        GDK Build fix

        * platform/gdk/TemporaryLinkStubs.cpp:

2007-05-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Correcting comparisons to handle NaN in the same manner
        as other Canvas methods.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
          Correcting arc/arcTo to match the WHAT WG draft.
        (WebCore::CanvasRenderingContext2D::rect):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):

2007-05-07  David Hyatt  <hyatt@apple.com>

        Add some comments to the glyph/font code (patch from Brett Wilson, tweaked by
        me to correct a few bits and to make it forward-compatible with the work
        going on in 3315.

        Reviewed by me

        * ChangeLog:
        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/GlyphPageTreeNode.h:

2007-05-07  Justin Garcia  <justin.garcia@apple.com>

        Fix layout test failures.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Use comparePositions
        instead of Range::comparePoint, because comparePositions can
        handle positions inside shadow trees.

2007-05-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4895428> Can't drag selected To Do if it is not showing a due date
        
        The code in SelectionController::contains returned false 
        incorrectly if the selection end just after a table 
        and the position was inside that table.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains): Compare the position with the
        ends of the selection and then use Range::comparePoint.

2007-05-07  Darin Adler  <darin@apple.com>

        - rolling out setInnerHTML optimization until I can figure out why tests are failing

2007-05-07  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13602
          Amazon product pages keep repainting over and over again

        Optimize setInnerHTML, setOuterHTML, and setInnerText so they don't change the DOM at all
        if they don't need to.

        Test: fast/dom/HTMLElement/set-inner-outer-optimization.html

        * html/HTMLElement.cpp:
        (WebCore::equal): Added. Helper function that compares two Text nodes or two NamedAttrMap
        attribute maps.
        (WebCore::shallowEqual): Added. Helper function that compares two Element nodes or two
        arbitrary nodes.
        (WebCore::replaceChildrenWithFragment): Added. Helper function used by setInnerHTML and
        setInnerText. Optimizes the cases where all the nodes are the same, where both the current
        and the new content are single text nodes, and where the current content is a single node
        that can be replaced with replaceChild.
        (WebCore::replaceChildrenWithText): Added. Helper function used by setInnerText. Optimizes
        the case where the current content is a single text node or a single node that can be
        replaced with replaceChild.
        (WebCore::HTMLElement::setInnerHTML): Changed to call replaceChildrenWithFragment.
        (WebCore::HTMLElement::setOuterHTML): Added special case to optimize when the new content
        exactly matches the current node.
        (WebCore::HTMLElement::setInnerText): Changed to call replaceChildrenWithText in a few
        cases instead of doing removeChildren/appendChild. Changed code that was using
        DeprecatedString to instead use String. Changed general case to use a document fragment
        and replaceChildrenWithFragment.

        * dom/CharacterData.cpp: (WebCore::CharacterData::dispatchModifiedEvent):
        Fixed bug where we would not dispatch the DOMSubtreeModified event unless someone
        was registered for the DOMCharacterDataModified event. Caused trouble in the test.

2007-05-06  Darin Adler  <darin@apple.com>

        - blind try at fixing the Qt build

        * platform/qt/TextBreakIteratorQt.cpp: (WebCore::sentenceBreakIterator):
        Added a placeholder.

2007-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13537
          Canvex example starts rendering strangely after a while

        * html/CanvasRenderingContext2D.cpp: (WebCore::CanvasRenderingContext2D::drawImage):
        Don't raise an exception if the source or destination rectangle is empty.

2007-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix <rdar://problem/4585593> REGRESSION: Some 2-byte characters in printed page
          header are drawn with too-large font and clipped

        Doesn't affect text within web pages, so no layout test.

        * platform/mac/FontCacheMac.mm: (WebCore::FontCache::getFontDataForCharacters):
        Base the substitute font on the FontPlatformData rather than the FontDescription.
        Before, it was a mix of both. This works properly for fonts where we have no
        FontDescription and is also more internally consistent.

2007-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13606
          some functions are virtual that don't need to be

        * dom/Node.h: Made first/lastChild be inline functions that call virtual functions.
        This lets us hide the functions with another inline function in a derived class,
        yet still override the behavior here in the base class by overriding the virtual
        functions too.
        * dom/Node.cpp:
        (WebCore::Node::virtualFirstChild): Renamed virtual functions. There are now
        non-virtual inline functions that call these virtual functions.
        (WebCore::Node::virtualLastChild): Ditto.

        * dom/ContainerNode.h: Added non-virtual first/lastChild functions that hide the ones
        inherited from the Node class; these also replace the fastFirst/LastChild functions,
        and transparently give callers the faster form if they have a pointer of the right
        type. But still override the virtual functions named virtualFirst/LastChild, because
        those can still be called through a Node*. Removed the "fast" from the names of
        fastSetFirst/LastChild.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::virtualFirstChild): Renamed virtual functions. There are now
        also non-virtual inline versions.
        (WebCore::ContainerNode::virtualLastChild): Ditto.

        * dom/CharacterData.cpp: Removed implementations of data and length functons.
        * dom/CharacterData.h: Made data, setData, length, substringData, appendData,
        insertData, deleteData, and replaceData all non-virtual, and made data and length
        both be inline.

        * dom/NamedAttrMap.h: (WebCore::NamedAttrMap::attributeItem): Removed a null check
        from this function. If the length of the map is known to be greater than 0, then
        the null check isn't needed. But if the length of the map hasn't been checked at all,
        then it's unsafe to call this function since it doesn't range check the array
        index. Thus the null check is never needed. I also looked at all callers.

        * dom/Attr.cpp: (WebCore::Attr::createTextChild):
        * dom/Document.cpp: (WebCore::Document::recalcStyle):
        * dom/Element.cpp: (WebCore::Element::recalcStyle):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::haveLoadedRequiredResources):
        Removed "fast" prefix from calls to fastFirst/LastChild and fastSetFirst/LastChlld.
        It's not needed any more -- you still get fast behavior if the pointer has a type
        that's ContainerNode or derived from it.

2007-05-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13557
          Crash when dragging selection over absolutely positioned generated content on block element

        Test: fast/css-generated-content/positioned-background-hit-test-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::enclosingElement): Added. Factored out of hitTestLayer().
        (WebCore::RenderLayer::hitTestLayer): Implemented the fix for <rdar://problem/3552346>
        from r6106 to the self hit test as well, namely: return the enclosing element
        for generated positioned content.
        * rendering/RenderLayer.h:

2007-05-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13584
        <script> code wrongly assumes requests can't fail

        Test: fast/loader/unloadable-script.html

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        Check the return value of requestScript().

2007-05-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13304
        REGRESSION(14784): WebKit doesn't dynamically reflect changes to the highlight color in System Preferences

        Implemented a notification observer that invalidates cached system colors.

        No automated test possible.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor):
        (WebCore::RenderTheme::platformColorsDidChange):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (WebCore::theme):
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):
        (WebCore::RenderThemeMac::checkbox):
        (WebCore::RenderThemeMac::radio):
        (WebCore::RenderThemeMac::button):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):

2007-05-05  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=13592
        parseMappedAttribute inconsistency

        Do not use local vars in parseMappedAttribute for attr name and value.

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseMappedAttribute):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::parseMappedAttribute):
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::parseMappedAttribute):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseMappedAttribute):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseMappedAttribute):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseMappedAttribute):
        * ksvg2/svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseMappedAttribute):

2007-05-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Initialise default fill with Color::black rather than parsing
        the string "black"

        * ksvg2/svg/SVGPaint.cpp:
        (WebCore::SVGPaint::defaultFill):

2007-05-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Use TextBreakIterator for sentence breaking instead of TextBoundaries.

        * WebCore.xcodeproj/project.pbxproj: Added TextBreakIeratorInternalICUMac.mm
        * editing/visible_units.cpp:
        (WebCore::startSentenceBoundary): Call TextBreakIterator instead of TextBoundaries.
        (WebCore::endSentenceBoundary): Call TextBreakIterator instead of TextBoundaries.
        (WebCore::previousSentencePositionBoundary): Call TextBreakIterator instead of TextBoundaries.
        (WebCore::nextSentencePositionBoundary): Call TextBreakIterator instead of TextBoundaries.
        * platform/TextBoundaries.h: Removed findSentenceBoundary, findNextSentenceFromIndex.
        * platform/TextBreakIterator.h: Added sentenceBreakIterator.
        * platform/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Add locale parameter (needed to maintain functionality that TextBoundaries code had).
        (WebCore::characterBreakIterator): Pass en_us for locale (same as old code).
        (WebCore::wordBreakIterator): Pass en_us for locale (same as old code).
        (WebCore::lineBreakIterator): Pass en_us for locale (same as old code).
        (WebCore::sentenceBreakIterator): Added.
        * platform/TextBreakIteratorInternalICU.h: Added.
        * platform/gdk/TemporaryLinkStubs.cpp: Removed findNextSentenceFromIndex, findSentenceBoundary.
        (WebCore::currentTextBreakLocaleID): Added stub.
        * platform/mac/TextBoundaries.mm: Removed currentTextBreakLocaleID, findSentenceBoundary, findNextSentenceFromIndex.
        * platform/mac/TextBreakIteratorInternalICUMac.mm: Added.
        (WebCore::currentTextBreakLocaleID): Moved from TextBoundaries.mm
        * platform/qt/TextBoundaries.cpp: Removed findNextSentenceFromIndex, findSentenceBoundary.

2007-05-04  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5116871> REGRESSION: Can't select options in widget's listbox

        Don't use user-select to determine whether or not options can be selected in listboxes.
        This will match Firefox behavior for -moz-user-select.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::canSelectAll):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):

2007-05-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.

        First step in fixing <rdar://problem/5055182> The back cache has no global cap

        Stop giving SnapBack infinite cache-ability. Instead, make SnapBack rely
        on the underlying back cache.

        * WebCore.exp:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::purgePageCache):

2007-05-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Removed export of clearPageCache(), since it was unused externally. I plan
        to remove its use from WebCore eventually, too.

        Removed usesPageCache(), since it was unused and it duplicated pageCacheSize().

        * WebCore.exp:
        * history/BackForwardList.cpp:
        * history/BackForwardList.h: Moved statics to the top of the class definition.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePage):

2007-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Antti.

        <rdar://problem/5179977> Use the correct URLs when dispatching delegate methods for data loads.

        Restore behavior to matching release WebKit by adding a response URL to SubstituteData. If a nil base URL is
        passed, set the _request_ URL to "about:blank", but the response URL to a generated "applewebdata" URL.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        First, check for the SubstituteData's response URL.

        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        No need to special case applewebdata URLs here, they're only used in the response.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadNow):
        If the substitute data has a response URL, use it.

        (WebCore::MainResourceLoader::loadNow):
        Only load "about:blank" as an empty document if there's no substitute data.

        * loader/SubstituteData.h:
        (WebCore::SubstituteData::SubstituteData):
        (WebCore::SubstituteData::responseURL):
        Add responseURL member to SubstituteData.

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing user description parameter to spelling-related editor client method.

        * bridge/EditorClient.h:
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithGrammarString):

2007-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        Resolve an outstanding FIXME in Loader::numRequests()

        Before, numRequests() would iterate through the list of requests pending load and the list of currently
        loading requests and tally up a count matching the current DocLoader.

        I noticed while studying and cleaning up the loader code that numRequests() is potentially very hot!
        Indeed load a complex site with many resources and multiple frames, and this method gets called very often,
        tallying up this number every time.

        The FIXME was to keep a collection of Requests mapped to each DocLoader.  In reality, since this map would
        simply be used for retrieving a count, that was overkill.  Keeping a request count in the DocLoader itself
        along with maintaining that count in Loader as requests come and go is a much better way to do this.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::incrementRequestCount):
        (WebCore::DocLoader::decrementRequestCount):
        (WebCore::DocLoader::requestCount): Emulate the defunct Loader::numRequests()
        * loader/DocLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::numRequests): Call DocLoader::requestCount() directly
        (WebCore::FrameLoader::checkCompleted): Use numRequests()

        * loader/loader.cpp:
        (WebCore::Loader::load): Increment the DocLoader's request count
        (WebCore::Loader::servePendingRequests): If the SubresourceLoader failed to create, decrement the count
        (WebCore::Loader::didFinishLoading): If the Request is not Multipart, decrement the count
        (WebCore::Loader::didFail): If the Request is not Multipart, decrement the count
        (WebCore::Loader::didReceiveResponse): If the Request becomes Multipart, decrement the count
        (WebCore::Loader::cancelRequests): Decrement the count for the pending requests being tossed, and ASSERT the
          count is zero after all requests have been cancelled
        * loader/loader.h:

2007-05-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Some cleanup in preparation for fixing <rdar://problem/5055182> The 
        back/forward cache has no global cap

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted): Moved "Can I cache this
        page?" logic to canCachePage(). Moved "I am caching this page" logic to
        cachePageToHistoryItem().
        (WebCore::FrameLoader::canCachePage): Moved above logic here.
        (WebCore::FrameLoader::cachePageToHistoryItem): Removed bogus NULL check
        and failure return value. Moved above logic here. Don't call setCachedPage()
        until the CachedPage is fully constructed.
        (WebCore::FrameLoader::purgePageCache): Removed comment that duplicated
        the function name.
        * loader/FrameLoader.h:

2007-05-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison.

        <rdar://problem/5120281> CrashTracer: [USER] 1 crash in Mail at WebCore::CSSComputedStyleDeclaration::copyInheritableProperties() const

        Problem is that checkAncestor and lastClosed can be nil when createMarkup is called unrendered nodes, and that was not checked for.
        
        * editing/markup.cpp:
        (WebCore::createMarkup):
        Nil-check checkAncestor and lastClosed.

2007-05-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin.

        <rdar://problem/5016318> Contextual menu item for opening links is missing in compose windows but present in viewer

        Add the Open Link, Open Link in New Window, Download Linked File and Copy Link menu
        items to the content editable context menu.

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

2007-05-03  Holger Freyther <freyther@kde.org>

        Reviewed by Zack, landed by Simon.
        This is bugzilla bug 13499.

        * WebCore.pro: Place the Qt port into the qt-port scope, add the Gdk port

2007-05-03  Adele Peterson  <adele@apple.com>

        Use BUILDING_ON_TIGER.

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry):

2007-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Some more minor cleanup that resolves a FIXME and ditches another pointless method

        No change in functionality == no layout test

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):  Updated a comment
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Folded startLoading() into this method
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): continueAfterWillSubmitForm becomes continueLoadAfterWillSubmitForm
        * loader/FrameLoader.h: Removed startLoading()

2007-05-03  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        Fix for <rdar://problem/4727607> REGRESSION: KeyScript is deprecated, need a new solution for forcing Roman input for password fields on Leopard

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry):
        Use TSMSetDocumentProperty and TSMRemoveDocumentProperty on Leopard disable and enable non-ascii input sources.

2007-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        commitProvisionalLoad() was the name of two methods.
        One of them was private and only called from one other private place.
        This was driving me crazy.  I had to change that.

        No change in functionality == no layout test

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): roll commitProvisionalLoad() into this method
        * loader/FrameLoader.h: Removed commitProvisionalLoad()

2007-05-03  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - make ICU initialization lazy to speed up application start-up time
          (when it includes an initial webpage load)

        * platform/TextCodecICU.h: Replaced registerEncodingNames and
        registerCodecs with registerBaseEncodingNames, registerBaseCodecs,
        registerExtendedEncodingNames, and registerExtendedCodecs.
        * platform/TextCodecICU.cpp:
        (WebCore::newTextCodecICU): Moved up to the top of the file.
        (WebCore::TextCodecICU::registerBaseEncodingNames): Added. Registers
        just UTF-8.
        (WebCore::TextCodecICU::registerBaseCodecs): Ditto.
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Renamed.
        (WebCore::TextCodecICU::registerExtendedCodecs): Ditto.
        (WebCore::TextCodecICU::createICUConverter): Compare with the name
        "GBK" in a way that does not require extending the maps.

        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::usesVisualOrdering): Added code so this will
        just return false if we haven't used any extended encoding names yet.
        The result will be correct, and we won't ask for an encoding name that
        will require registering the extended encoding names.
        (WebCore::TextEncoding::isJapanese): Ditto.
        (WebCore::TextEncoding::backslashAsCurrencySymbol): Ditto, but return
        a backslash instead of false.

        * platform/TextEncodingRegistry.h: Added a new function named
         noExtendedTextEncodingNameUsed.
        * platform/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps): Added. Registers the base encodings,
        including Latin-1 because it's the default, and the UTF encodings.
        (WebCore::extendTextCodecMaps): Added. Registers all the other encodings.
        (WebCore::newTextCodec): Removed the all to buildTextCodecMap because
        we always build the map when making the canonical encoding name.
        (WebCore::atomicCanonicalTextEncodingName): Changed code to build only
        the base maps at first, then extend the maps the first time we run into
        a name we don't know.
        (WebCore::noExtendedTextEncodingNameUsed): Added.

2007-05-03  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  In r21185 the Qt version of WebCore::scaleDragImage was
        updated to have the incorrect signature.

        * platform/qt/DragImageQt.cpp:
        (WebCore::scaleDragImage):

2007-05-02  Beth Dakin  <bdakin@apple.com>

        * dom/Node.h: Just fixing a variable name because it's driving me 
        mad.

2007-05-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4513966> Never-ending identical repaint @ 
        orbitz.com (Safari eating 85% CPU)

        We need to be a little bit more savvy about when we do a FULL style 
        recalc since it can be unnecessary and expensive.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setChanged): Now takes a 
        StyleChangeType as a parameter.
        (WebCore::CSSMutableStyleDeclaration::setProperty): Send 
        InlineStyleChange as the paramter. This is the optimization!
        * css/CSSMutableStyleDeclaration.h: setChanged takes a 
        StyleChangeType as a parameter.
        * dom/Document.cpp: setChanged now takes a StyleChangeType instead 
        of a bool.
        (WebCore::Document::recalcStyle): Same.
        * dom/Element.cpp: 
        (WebCore::Element::recalcStyle): This is the fix!! Only set change 
        to Force is we use descendant rules AND it's a FullStyleChange.
        * dom/Node.cpp: m_hasStyle was an unused bit on Node, so this patch 
        gets rid of it and uses that extra bit for m_changed to be a 
        StyleChangeType instead of a bool.
        (WebCore::Node::Node):
        (WebCore::Node::setChanged):
        (WebCore::Node::dump):
        * dom/Node.h: Same.
        (WebCore::): Define the StyleChangeType enum.
        (WebCore::Node::hasClass):
        (WebCore::Node::changed):
        (WebCore::Node::styleChangeType):
        (WebCore::Node::setHasClass):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute): Don't bother 
        calling setHasStyle() since m_hasStyle is gone now. It was never 
        used, and this was the only place it was set.
        * dom/Text.cpp:
        (WebCore::Text::recalcStyle): setChanged now takes a 
        StyleChangeType instead of a bool.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::recalcStyle): Same.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::restoreState): Same.
        (WebCore::HTMLSelectElement::reset): Same.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue): Same.
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::applyAnimations): Same.
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle): Same.
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::repaintClients): Same.

2007-05-02  David Harrison  <harrison@apple.com>

        Reviewed by Antti.

        <rdar://problem/4859132> Grammar must always be checked in entire-sentence chunks, and shouldn't show markers for current sentence

        Restore the remainder of the original fix now that blocking bug rdar://5174862 is addressed.

        John made the original patch on 2007-04-10, but this fell prey to rdar://5157329.
        Justin backed out the whole patch on 2007-04-30 to avoid the crash.
        Justin then restored most of the original patch, but used word granularity instead, to keep the build working.
        I just addressed the root cause of rdar://5157329 in rdar://5174862.
        This patch switches the temp uses of word granularity back to sentence granularity.
        
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):

2007-05-02  David Harrison  <harrison@apple.com>

        Reviewed by Antti.

        <rdar://problem/5174862> Crash resulting from DeprecatedString::insert()
        
        Test added: editing/selection/move-by-sentence-001.html

        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        Use a UChar Vector instead of DeprecatedString.
        Avoid creating an extra string for secure bullet replacement unless it is actually needed.
        
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedString::insert):
        Call forceUnicode() before setLength(), so that only the unicode buffer is resized.

       (WebCore::DeprecatedString::setLength):
        Adjust the unicode buffer even if the ascii buffer is valid.
        
2007-05-02  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Brady.

        - http://bugs.webkit.org/show_bug.cgi?id=13564
          Remove friend class FrameLoader from Frame

        No test added since there is no change in functionality.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h: Made clear() private.
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Changed the argument into a PassRefPtr.
        * page/Frame.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2007-05-02  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9276
          Quirksmode: Image swap resize bug

        Test: fast/replaced/image-resize-width.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): Moved the call to dirtyPrefWidths()
        before the call to calcWidth().

2007-05-02  David Hyatt  <hyatt@apple.com>

        Fix for bug 13566, broken Dashboard widgets.  setPrefWidthsDirty did
        the wrong thing for text children of a positioned element.

        Reviewed by mitz

        fast/block/positioning/pref-width-change.html

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

2007-05-01  Darin Adler  <darin@apple.com>

        * rendering/RenderReplaced.cpp: Fix typo in a comment.

2007-05-01  David Hyatt  <hyatt@apple.com>

        Fix for 13558, crash when using absolutely positioned generated content
        inside an inline.

        Reviewed by darin

        fast/css-generated-content/absolute-position-inside-inline.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updateBeforeAfterContentForContainer):

2007-05-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5002441> 
        Pressing space key does nothing above quoted content or a signature
        
        Inserting a space under these circumstances inserts a single 
        text node containing a regular space and then does a layout. 
        That space isn't rendered (which is correct).  Whitespace 
        rebalancing is supposed to correct it but failed.  It replaces 
        the space with a non-breaking space, but that change doesn't 
        dirty line boxes (9441) and so the space isn't rendered.
        
        This workaround turns all incoming spaces into non-breaking 
        spaces before they're inserted (they're rebalanced after 
        insertion and turned back into regular spaces if possible).

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion): Removed
        an old irrelevant FIXME.
        (WebCore::InsertTextCommand::input): Turn incoming spaces into
        non breaking spaces before inserting them.
        
2007-05-01  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13559
          REGRESSION: Canvas aspect ratio is incorrect

        - remove intrinsicWidth/Height functions from RenderObject

        Test: fast/canvas/canvas-size-change-after-layout.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createRenderer): Removed code to set
        the intrinsic size, because the renderer now takes care of this
        in its constructor.
        (WebCore::HTMLCanvasElement::reset): Instead of calling the
        setIntrinsicWidth/Height functions, call canvasSizeChanged, which
        takes care of layout, but only if the size actually changed. Also
        call repaint if the contents of the canvas changed.

        * rendering/RenderApplet.h:
        * rendering/RenderApplet.cpp: (WebCore::RenderApplet::intrinsicSize):
        Override the new intrinsicSize function. This override still doesn't
        make sense, so left a FIXME in here.

        * rendering/RenderBox.h: Added an intrinsicSize function here to replace
        the intrinsicWidth/Height functions removed from RenderObject.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidthUsing): Use intrinsicSize instead
        of intrinsicWidth.
        (WebCore::RenderBox::calcReplacedHeightUsing): Ditto, but for height.

        * rendering/RenderHTMLCanvas.h: Changed the constructor parameter to be
        an HTMLCanvasElement* instead of Node*. Also added a canvasSizeChanged
        function.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::RenderHTMLCanvas): Pass an initial intrinsic
        size based on the current size of the canvas element. This is now the
        responsibility of the renderer and the DOM element calls the canvasSizeChanged
        function when the size changes.
        (WebCore::RenderHTMLCanvas::paint): Removed checks of the type of the element,
        and used the node() function because we don't have to worry about the anonymous
        case in this class.
        (WebCore::RenderHTMLCanvas::canvasSizeChanged): Added. Changes the size and
        then calls setNeedsLayout and setPrefWidthsDirty as needed. I based the logic
        here on careful reading of RenderImage::imageChanged.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Pass a default intrinsic size of 0,0
        instead of calling setIntrinsicWidth/Height.
        (WebCore::RenderImage::setImageSizeForAltText): Call the new intrinsic size
        functions instead of the width/height ones. Simplifies the logic since we
        handle both dimensions at once.
        (WebCore::RenderImage::imageChanged): Ditto.
        (WebCore::RenderImage::layout): Ditto.
        (WebCore::RenderImage::calcAspectRatioWidth): Ditto.
        (WebCore::RenderImage::calcAspectRatioHeight): Ditto.

        * rendering/RenderObject.h: Removed intrinsicWidth/Height virtual functions.

        * rendering/RenderReplaced.h: Replaced intrinsicWidth, intrinsicHeight,
        setIntrinsicWidth, setIntrinsicHeight, m_intrinsicWidth, and m_intrinsicHeight
        with intrinsicSize, setIntrinsicSize, and m_intrinsicSize.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced): Added a second contructor that takes
        an intrinsic size parameter. Also updated constructor since the intrinsic size
        is now an IntSize instead of two integers.
        (WebCore::RenderReplaced::intrinsicSize): Added. No point in making this inline
        because it's a virtual function.
        (WebCore::RenderReplaced::setIntrinsicSize): Added. Didn't make this inline,
        partly because in the future we might want this to be more than just a simple
        setter function, factoring in common code used in both RenderImage and
        RenderHTMLCanvas.

        * rendering/RenderWidget.h: Removed a stray using declaration that wasn't needed.

2007-05-01  David Hyatt  <hyatt@apple.com>

        Fix for hang when incorrectly trying to add before/after content to
        a <select>.  Disallow generated content in all selects and also turn it
        off for <input> buttons.

        Reviewed by aroben

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::canHaveChildren):
        * rendering/RenderButton.h:

2007-05-01  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed the m_implicit bit from Node, freeing up a bit

        - fixed <rdar://problem/5172607> XML parser is creating implicit tbody elements
        - fixed <rdar://problem/5172596> HTML-parser-created tbody elements are being
          ignored when processing CSS child rules

        Test: fast/css/child-selector-implicit-tbody.html

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::checkSelector):
        Removed code that used to look at implicitNode(), which no longer exists.

        * css/html4.css: Added a style rule to handle cases where we have a tr
        inside a table with no intervening table section.

        * dom/Node.h: Removed the bit.
        * dom/Node.cpp:
        (WebCore::Node::Node): Don't initialize the bit.
        (WebCore::Node::dump): Don't dump the bit.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs): Remove the code that made a
        table body element. This is handled in the render tree, the DOM tree
        should not be mangled.
        (WebCore::XMLTokenizer::endElementNs): Removed code that used to look at
        implicitNode(), which no longer exists.

        * html/HTMLElementFactory.cpp: (WebCore::tableSectionConstructor):
        Removed boolean parameter that was passed to the HTMLTableSectionElement
        constructor.
        * html/HTMLParser.cpp: (WebCore::HTMLParser::handleError): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createTHead): Ditto.
        (WebCore::HTMLTableElement::createTFoot): Ditto.
        (WebCore::HTMLTableElement::insertRow): Changed to return a PassRefPtr,
        because it's possible the row could be removed from the table by JavaScript
        code responding to DOM mutation events before the function returns. Just
        something I noticed by code inspection.

        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::HTMLTableSectionElement): Removed
        boolean "implicit" parameter to the constructor.
        (WebCore::HTMLTableSectionElement::insertRow): Changed to return a
        PassRefPtr for the same reason cited above.

        * html/HTMLTableElement.h: Changed the return value of insertRow to be
        a PassRefPtr.
        * html/HTMLTableSectionElement.h: Ditto.

2007-04-30  David Hyatt  <hyatt@apple.com>

        Fix for bug 12691, generated content and display: table-cell duplicates
        content on a size change.  Make sure that the code to update before/after
        content is smart enough to drill into anonymous containers to find the
        old child.

        Reviewed by olliej

        Added fast/css-generated-content/table-cell-before-content.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateBeforeAfterContent):
        * rendering/RenderButton.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::beforeAfterContainer):
        (WebCore::RenderContainer::updateBeforeAfterContent):
        (WebCore::RenderContainer::updateBeforeAfterContentForObject):
        * rendering/RenderContainer.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::setStyle):
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::splitInlines):

2007-04-30  Jungshik Shin <jungshik.shin@gmail.com>

        Reviewed by justin
        
        <http://bugs.webkit.org/show_bug.cgi?id=13552>
        comment to Range::comparePoint in dom/Range.cpp has 
        '0xD0' in place of '-': leading to a compiler warning

        * dom/Range.cpp:
        (WebCore::Range::comparePoint):

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4875189> List gets deleted when replacing contents

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't expand
        to include elements, like lists, when deleting a selection 
        to replace it.

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by ggaren
        
        Buildfix.  Leave in grammar checking machinery to 
        keep WebKit building on other platforms but don't
        operate on sentence sized chunks so that we don't
        re-introduce 5157329.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5168598> 
        Crash when deleting a link inside an input field
        
        Deletion code tries to update one of its positions to keep 
        it valid and nullifies it.  Later in mergeParagraphs we try 
        to find out if it's valid by checking to see if it's still in 
        the document and crash.
        
        The fix is just to not bother keeping the position, 
        m_upstreamStart, valid, since after the point in the code 
        under examination, it doesn't need to be valid anymore.  
        Besides, code to update DeleteSelectionCommand's positions 
        should go in the functions that handle the content removal 
        that might invalid them (there are already FIXMEs about this).
        
        Also, users shouldn't be able to insert links (or any rich content)
        into plaintext-only regions like text fields, even if those
        text fields are inside richly editable regions.  This is a 
        separate bug and is filed as 5171552.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete): Don't
        bother updating m_upstreamStart.

2007-04-30  Patti Hoa  <patti@apple.com>

        Reviewed by Dave Hyatt.
        
        <rdar://problem/5108546> REGRESSION: Zoom follows keyboard focus does not work

        * WebCore.xcodeproj/project.pbxproj:
        Add new file SelectionControllerMac.mm
        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        Move the code to fire off AXSelectedTextChanged notification to a new method notifyAccessibilityForSelectionChange in SelectionControllerMac.mm
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        call notifyAccessibilityForSelectionChange to handle firing of accessibility notification and zoomFocusChange
        * editing/SelectionController.h:
        Add notifyAccessibilityForSelectionChange method for Mac platform
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertToScreenCoordinate):
        Add a helper routine that takes IntPoint in local coordinate and convert that to screen coordinate

2007-04-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5157329> 
        REGRESSION: Crash at WTF::fastFree() when arrowing or deleting backward through editable text (13493)
        
        Backing out the changes for 4859132.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markMisspellings):
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):

2007-04-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver.

        Fix <rdar://problem/5169261>
        REGRESSION: Google Maps zooming too sensitive when using two fingers on trackpad
        
        Use line based delta values when generating DOM wheel events, use pixel deltas
        for scrolling only.
        
        No test case, requires user interaction and specific hardware.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::continuousDeltaX):
        (WebCore::PlatformWheelEvent::continuousDeltaY):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Build fix for experimental features build

        * rendering/RenderForeignObject.cpp:

2007-04-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13544
          REGRESSION (r21120): Member profile frame not erased at Yahoo! Answers

        Test: fast/repaint/layer-hide-when-needs-layout.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): If we get a layout hint, we count on
        layout() or updateLayerPositions() to repaint. In the case of a layer
        going invisible, however, we need to repaint here since neither of the
        above will do it.

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Fix for <rdar://problem/5126393> REGRESSION (r19672-19697): Safari drag image drags at original size (13261)

        Added logic to ensure that when we create the drag image
        we're looking at the rendered image size.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
          Pass the rendered image size to fitDragImageToMaxSize

        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize):
           Need to do scaling relative to rendered image size

        * platform/DragImage.h:
           scaleDragImage needs x and y scales to allow for them to be
           scaled seperately on a page

        * platform/gdk/DragImageGdk.cpp:
        (WebCore::scaleDragImage):
           Prevent build bustage

        * platform/mac/DragImageMac.mm:
        (WebCore::scaleDragImage):
           scale width and height independently

        * platform/qt/DragImageQt.cpp:
        (WebCore::scaleDragImage):
           Prevent build bustage

2007-04-29  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix the Gmail part of http://bugs.webkit.org/show_bug.cgi?id=12798
          and <rdar://problem/4118559>

        This patch changes things so that resizing can make things larger than their
        initial size, but not smaller. I believe this resolves the problem for Gmail,
        but you can still get strange behavior if you have a small right-aligned <textarea>.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize): Rewrote to use more IntPoint and IntSize and add
        in a new minimum-size algorithm. This function now has the side effect of storing
        a new minimumSizeForResizing in the element being resized, and respects any existing
        minimum as well.
        (WebCore::RenderLayer::offsetFromResizeCorner): Reversed this so it converts the
        point into coordinates relative to the resize corner, hence negative numbers mean
        the point is above and to the left. This is used only in the algorithm above.

        * dom/Element.h: Removed unneeded include of Attr.h, and added forward declarations
        as needed. Removed all friend declarations; there was no need for any of them.
        Tweaked formatting of various declarations and removed unneeded parameter names.
        Made as much as possible private, and a couple things public to avoid the need for
        friend classes. Added minimumSizeForResizing, setMinimumSizeForResizing, rareData,
        and createRareData functions.

        * dom/Element.cpp:
        (WebCore::rareDataMap): Added. Function to return the single global map.
        (WebCore::rareDataFromMap): Added. For use by inlined functions to get the
        data from the map in the case where it's present.
        (WebCore::ElementRareData::ElementRareData): Added.
        (WebCore::Element::~Element): Added code to delete the element from the rare
        data map when appropriate.
        (WebCore::Element::rareData): Added.
        (WebCore::Element::createRareData): Added.
        (WebCore::Element::setAttributeNodeNS): Got rid of the old inline version of this,
        since it was the sole reason we had to include Attr.h in Element.h.
        (WebCore::Element::minimumSizeForResizing): Added. Accesses rare data.
        (WebCore::Element::setMinimumSizeForResizing): Ditto.

        * dom/Node.h: Renamed the m_specified bit since it's now used for two purposes.
        Its new long name is m_attrWasSpecifiedOrElementHasRareData.

        * dom/Attr.cpp: (WebCore::Attr::Attr): Updated for bit name change.
        * dom/Attr.h:
        (WebCore::Attr::specified): Ditto.
        (WebCore::Attr::setSpecified): Added, since setting the bit directly is pretty ugly now.
        * dom/Document.cpp: (WebCore::Document::adoptNode): Updated for bit name change.
        * dom/Node.cpp:
        (WebCore::Node::Node): Ditto.
        (WebCore::Node::dump): Ditto.

        * dom/NamedAttrMap.cpp: (WebCore::NamedAttrMap::isReadOnlyNode): Moved out of line,
        since this was the sole reason we had to include Element.h in NamedAttrMap.h.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName): Changed to use tagQName() since that's a public
        way to do something that's now private.
        (WebCore::HTMLElement::cloneNode): Ditto.

        * dom/Attribute.cpp:
        * dom/NamedAttrMap.h:
        * dom/NamedMappedAttrMap.cpp:
        * dom/StyledElement.h:
        * html/HTMLTokenizer.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathStep.cpp:
        Updated includes, and other administrivia.

2007-04-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13487
          Implement O(1) absoluteClippedOverflowRect and absoluteOutlineBox during layout for a possible speed gain

        Test for a bug fixed by this patch: fast/repaint/intermediate-layout-position-clip.html

        By keeping track of the total translation and clip during layout, absolutePosition and
        computeAbsoluteRepaintRect become O(1).

        * WebCore.pro: Added LayoutState.cpp
        * WebCore.vcproj/WebCore/WebCore.vcproj: Added LayoutState.{cpp,h}
        * WebCore.xcodeproj/project.pbxproj: Added LayoutState.{cpp,h}
        * WebCoreSources.bkl: Added LayoutState.cpp
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): When doing subtree layout, push an initial layout state for the
        layout root.
        * rendering/LayoutState.cpp: Added. A LayoutState corresponding to a box consists of the origin of
        its coordinate system in view coordinates and possibly the clip rect, in view coordinates, which
        applies to its children.
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::destroy):
        (WebCore::throw):
        (WebCore::LayoutState::operator delete):
        * rendering/LayoutState.h: Added.
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Factored out the "only positioned objects" case into
        layoutOnlyPositionedObjects(). Added code to push/pop LayoutState, unless we have columns, in
        which case we disable/enable LayoutState. Removed the translation by the layout delta
        of the old absolute rects, since that is now integral to absoluteClippedOverflowRect() and
        absoluteOutlineBox().
        (WebCore::RenderBlock::layoutOnlyPositionedObjects): Added this helper function that checks for
        and handles the case where only positioned objects need layout. Returns true in that case.
        (WebCore::RenderBlock::repaintOverhangingFloats): Disabled LayoutState when repainting floats, since
        they may belong to other containers.
        (WebCore::RenderBlock::updateFirstLetter): Disabled LayoutState when adding and removing from the
        first letter container, since it may be different than ourselves.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Minor cleanup: changed element()->document() to the equivalent document().
        (WebCore::RenderBox::offsetForPositionedInContainer): Added. Factored out common code from
        absolutePosition, computeAbsoluteRepaintRect and RenderLayer::updateLayerPosition into this function.
        (WebCore::RenderBox::absolutePosition): Added an O(1) code path when this function is called during
        layout (and LayoutState has not been disabled). Factored out some code into
        offsetForPositionedInContainer.
        (WebCore::RenderBox::absoluteClippedOverflowRect): Added the layout delta here, so callers don't need
        to.
        (WebCore::RenderBox::computeAbsoluteRepaintRect): Added an O(1) code path when this function is called
        during layout (and LayoutState has not been disabled). Factored out some code into
        offsetForPositionedInContainer.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout): Added LayoutState push/pop.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Factored out the "only positioned objects" case into
        layoutOnlyPositionedObjects(). Added LayoutState push/pop. Removed the translation by the layout delta
        of the old absolute rects, since that is now integral to absoluteClippedOverflowRect() and
        absoluteOutlineBox().
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect): Added an ASSERT.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout): Disabled LayoutState because it is incompatible with arbitrary
        affine transforms.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Removed the translation by the layout delta of the old absolute
        rects, since that is now integral to absoluteClippedOverflowRect() and absoluteOutlineBox().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions): Added ASSERTs. Factored out some code into
        RenderBox::offsetForPositionedInContainer.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Disabled LayoutState around the call to
        scrollToOffset.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation): Disabled LayoutState when moving the list marker, since
        it can trigger repainting in other containers.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isRoot): Minor cleanup: changed element()->document() to the equivalent
        document().
        (WebCore::RenderObject::computeAbsoluteRepaintRect): Removed 'return' at the end of the function.
        (WebCore::RenderObject::container): Reordered to avoid calling isText() twice.
        (WebCore::RenderObject::absoluteOutlineBox): Added the layout delta here, so callers don't need to.
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): Disabled LayoutState because it is incompatible with arbitrary
        affine transforms.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):  Factored out the "only positioned objects" case into
        layoutOnlyPositionedObjects(). Added LayoutState push/pop. Removed the translation by the layout delta
        of the old absolute rects, since that is now integral to absoluteClippedOverflowRect() and
        absoluteOutlineBox().
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absoluteClippedOverflowRect): Added the layout delta here, so callers
        don't need to.
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect): For the O(1) code path, skipped the correction
        for the parent row, because RenderTableRow doesn't push a translation into LayoutState.
        (WebCore::RenderTableCell::absolutePosition): Ditto.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout): Added LayoutState push/pop.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths): Added LayoutState push/pop if cells are repainted or
        receive layout.
        (WebCore::RenderTableSection::calcRowHeight): Ditto.
        (WebCore::RenderTableSection::layoutRows): Added LayoutState push/pop.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout): Added initial LayoutState setup for the layout.
        (WebCore::RenderView::paintBoxDecorations): Minor cleanup: changed element()->document() to the
        equivalent document().
        (WebCore::RenderView::repaintViewRectangle): Ditto.
        (WebCore::RenderView::pushLayoutState): Added. Pushes initial layout state for subtree layout.
        * rendering/RenderView.h:
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::popLayoutState):
        (WebCore::RenderView::layoutState):
        (WebCore::RenderView::disableLayoutState):
        (WebCore::RenderView::enableLayoutState):

2007-04-29  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla 13535, regression from positioning cleanup a while
        back.  Some code got added to compute available width for a relpositioned
        inline, only the code meant to be used for inline flows and not inline blocks.

        Reviewed by mjs

        fast/block/positioning/inline-block-relposition.html

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

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Zack.

        Implement basic drag and drop support for qt
        this allows content and link dragging but does not
        provide the DOM data access methods.

        * platform/DragData.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::clipboardData):
        (WebCore::ClipboardQt::invalidateWritableData):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):

2007-04-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Oliver.

        - change Document to hold onto Frame* instead of FrameView*
        
        This is an architectural cleanup and a prerequisite to fixing citibank login
        in an architecturally sound way.

        Some fixups for the page cache:
        
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Add an assert that the document's view
        matches the cached page's view - this needs to be true by the time this
        function is called.
        (WebCore::CachedPage::clear): Change assert to require frame matching, not
        view matching.
        * history/CachedPage.h:
        (WebCore::CachedPage::view): Add a way to get the view out.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): pass Frame, not FrameView, when creating document
        (WebCore::FrameLoader::open): restore view based on CachedPage, not Document. 

        Remaining changes are just straightforward updates based on which
        pointer is held or passed:
        
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::view):
        (WebCore::Document::frame):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayout):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        (WebCore::Document::createTokenizer):
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::setInPageCache):
        (WebCore::Document::applyXSLTransform):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * html/HTMLViewSourceDocument.h:
        * ksvg2/svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * ksvg2/svg/SVGDocument.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * loader/ImageDocument.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * loader/PluginDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * loader/TextDocument.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        (WebCore::XSLTProcessor::transformToDocument):
        * xml/XSLTProcessor.h:

2007-04-28  Adele Peterson  <adele@apple.com>

        RS by Darin.

        Update to fix for <rdar://problem/5152299>

        Test: fast/events/no-blur-on-enter-button.html

        * html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::defaultEventHandler):
        Don't blur the button when handling the enter key.  This matches our new behavior for input elements.

2007-04-28  Adele Peterson  <adele@apple.com>

        Fix by Darin, reviewed by me.

        Fix for <rdar://problem/5152299> REGRESSION: <button> elements do not respond to space and return key as similar <input> elements do

        Tests:
        fast/forms/button-spacebar-click.html
        fast/forms/button-enter-click.html

        * html/HTMLButtonElement.h: (WebCore::HTMLButtonElement::): Made type enum private.
        Removed unnecessary m_value and m_currValue, and unused m_dirty.
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement): Removed initialization of m_dirty.
        (WebCore::HTMLButtonElement::parseMappedAttribute): Removed case to parse value and accesskey attributes, which don't do anything.
        (WebCore::HTMLButtonElement::defaultEventHandler): Removed unnecessary check for button type.
         Added cases to handle spacebar and enter keys in the same way that they're handled for <input type=button/reset/submit> buttons.
        (WebCore::HTMLButtonElement::isSuccessfulSubmitButton): Shortened comment.
        (WebCore::HTMLButtonElement::appendFormData): Use value() instead of m_currValue.  Renamed encoding argument to formData.

2007-04-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13501
          REGRESSION (r21093): Pasting into text field fails and makes the caret disappear

        Test: fast/dynamic/anonymous-block-layer-lost.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): Avoid cutting off layers when removing
        the anonymous block.

2007-04-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13471
          REGRESSION (r21045): Secure keyboard entry mode remains in effect after leaving a password field by submitting

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Replaced direct access to Frame's d->m_doc
        with a call to Frame::setDocument.
        (WebCore::FrameLoader::begin): Ditto.
        (WebCore::FrameLoader::open): Ditto.
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady): Ditto.
        (WebCore::FrameLoader::canCachePage): Added a comment.
        * manual-tests/secure-keyboard-enabled-after-submit.html: Added.
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Reset secure keyboard entry, in case the
        old document's focused node has set it.

2007-04-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13379
          REGRESSION: Cannot add an option to a selected popup

        * manual-tests/update-empty-popup.html: Added.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show): Added a call to the client's hidePopup()
        callback before returning in the case that the menu is empty. Otherwise
        the client thinks that the menu stayed open.

2007-04-28  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4806988> REGRESSION: history.go(0) doesn't reload page (affects buttons at facebook.com)

        Test: fast/history/history_reload.html

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::scheduleHistoryNavigation):
        We avoid doing a redirection when going to the same url in a history navigation, but we have to still
        schedule a redirection when the number of steps is zero so we can force a reload.

2007-04-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13514
        REGRESSION (r20997-21003): Crash in WebCore::Node::document

        Test: fast/dom/NodeList/childNodes-reset-cache.html

        * dom/Node.cpp:
        (WebCore::Node::notifyLocalNodeListsChildrenChanged): Reset the common caches for child node
        lists. We cannot rely on notifications, since there may be no list objects left around.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::rootNodeChildrenChanged):
        * dom/ChildNodeList.h:
        Override rootNodeChildrenChanged() with an empty implementation, now that caches are reset
        in Node::notifyLocalNodeListsChildrenChanged().

2007-04-28  Mark Rowe  <mrowe@apple.com>

        Build fix.  Change use of nil to 0 in C++ source file.

        * editing/Editor.cpp:
        (WebCore::Editor::increaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevelOrdered):
        (WebCore::Editor::increaseSelectionListLevelUnordered):

2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6216
          REGRESSION: getElementsByTagNameNS with empty namespace doesn't work

        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList): Changed parameter to PassRefPtr, tweaked formatting.
        (WebCore::TagNodeList::item): Tweaked formatting.
        (WebCore::TagNodeList::nodeMatches): Tweaked formatting.
        (WebCore::Node::setPrefix): Tweaked formatting.
        (WebCore::Node::getElementsByTagNameNS): Added special case to turn empty namespaces into
        null namespaces.

2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix <rdar://problem/5148271> Chinese numbers are incorrect in numbered lists
          (including pasting from TextEdit to Mail)

        Covered by an existing regression test, which had wrong results checked in.

        Hyatt told me not to use the algorithm in the CSS 3 specification, but I didn't listen!
        This corrects mistakes there and makes our results match current Firefox.

        * rendering/RenderListMarker.cpp:
        (WebCore::toCJKIdeographic): Added code to strip off trailing zero digits.
        Added special case for zero, since that's the one case where we don't want
        to strip off trailing zero digits. Fixed mixed-up logic that would put the
        digits in each group backwards.
        (WebCore::listMarkerText): Corrected character values for the CJK_IDEOGRAPHIC case.

2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/5138250> REGRESSION (r18245): Changing any one aspect
          of a font applies all the aspects to selected text

        Since this bug is only visible with the font panel, I don't
        think there's any way to make a DumpRenderTree-driven test.

        * editing/Editor.cpp: (WebCore::Editor::fontForSelection):
        Set hasMultipleFonts properly. The old code had an early exit
        that was left over from when hasMultipleFonts was a pointer.

2007-04-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13525
          Repainting a listbox schedules a relayout

        No test possible as there is no change to functionality.

        - fix the root cause of http://bugs.webkit.org/show_bug.cgi?id=10862
          REGRESSION: Collapsing form input on www.myspace.com

        No test possible since text fields are no longer implemented as flexboxes.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scheduleRelayout): Added a check that the subtree
        root is in the tree and not free-floating.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderCharacters): Changed addChild and removeChild
        to appendChildNode and removeChildNode to save some unnecessary overhead.
        These calls still mark the tree for relayout, but the change in scheduleRelayout 
        ensures that a layout won't be scheduled.

2007-04-27  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5153017> REPRODUCIBLE ASSERT: range != nil in WebViewFactory.mm:415 -[WebViewFactory startOfTextMarkerRange:] (13354)
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject textMarkerRangeForRange:]):
        Fix the range length check.  It was incorrectly assuming that the max range requested cannot be equal
        to the length of the string.  Since NSRange location is index based, it's perfectly valid to have the max
        range equal to the the text length.

2007-04-27  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5160627> Export JS list creation support as ObjC SPI for Mail

        * WebCore.exp:
        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertOrderedList):
        (WebCore::Editor::insertUnorderedList):
        (WebCore::Editor::canIncreaseSelectionListLevel):
        (WebCore::Editor::canDecreaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevelOrdered):
        (WebCore::Editor::increaseSelectionListLevelUnordered):
        (WebCore::Editor::decreaseSelectionListLevel):
        Add insertOrderedList() and insertUnorderedList().
        Move existing list management functions from WebCoreFrameBridge.
        The level increasing functions now return a PassRefPtr<Node> instead of Node.
        Add check for canEditRichly.
        
        - in many other functions, condense the check for nil client().
        
        * editing/InsertListCommand.h:
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::insertList):
        (WebCore::InsertListCommand::fixOrphanedListChild):
        (WebCore::InsertListCommand::doApply):
        Add insertList(), which returns the new list element.
        Don't set the list element's ID if the specified ID was an empty string.
                
        * editing/ModifySelectionListLevel.h:
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelWithType):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelOrdered):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelUnordered):
        Return PassRefPtr<Node> instead of Node.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        Move list management functions to Editor.h and Editor.cpp.


2007-04-27  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5134254>, toolbar buttons don't work in gmail after double-click.  Make sure
        to clear out the capturing frame, since you don't get a second up when a double-click happens.

        Reviewed by mjs

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

2007-04-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5164796> 
        Enable execCommand("CreateLink", ...) for caret selections

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): For a caret
        selection, insert a link at the caret position
        with the url as the link text.
        * editing/JSEditor.cpp: Enable CreateLink for caret 
        selections.

2007-04-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin, Hyatt.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=13081
        Empty table cells not handled correctly
        <rdar://problem/5067926>
        
        To match Firefox and IE, empty table cells with variable width need to be
        treated as special case. They generally get zero width.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h:
        (WebCore::AutoTableLayout::Layout::Layout):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::hasPadding):

2007-04-27  Rob Buis  <buis@kde.org>

        Reviewed by Oliver.

        http://bugs.webkit.org/show_bug.cgi?id=13052
        Text not rendered in a second inline SVG element

        Correct the rendering of svg text when embedded in non-svg container.

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

2007-04-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        * WebCore.pro: Remove non-existent paths from qmake files.

2007-04-25  Lars Naesbye Christensen <lars@naesbye.dk>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=13477
        Bug 13477: Help and context menu cursors need dropshadows.

        * Resources/cellCursor.png:
        * Resources/contextMenuCursor.png:
        * Resources/helpCursor.png:
        * platform/mac/CursorMac.mm:
        (WebCore::contextMenuCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::noDropCursor):

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * CMakeLists.txt: Removed.

2007-04-26  Matt Perry  <mpComplete@gmail.com>

        Reviewed by Maciej.

        Added a version check to hackAroundLibXMLEntityBug, since that bug has
        been fixed in recent versions of libxml2.

        * dom/XMLTokenizer.cpp:
        (WebCore::hackAroundLibXMLEntityBug):

2007-04-26  Christopher Brichford  <chrisb@adobe.com>

        Reviewed by Timothy Hatcher.

        - Fix for Bug 13204: Submit initial version of mac project files for apollo
          port of WebCore
          http://bugs.webkit.org/show_bug.cgi?id=13204

        * WebCore.apolloproj/mac/WebCore.Debug.xcconfig: Added.
        * WebCore.apolloproj/mac/WebCore.Release.xcconfig: Added.
        * WebCore.apolloproj/mac/WebCore.xcconfig: Added.
        * WebCore.apolloproj/mac/WebCore.xcodeproj/project.pbxproj: Added.

2007-04-26  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=13505
        Cast loses precision on x86_64

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        Use a stack of opacity values instead of Cairo user data.

2007-04-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13500
          REGRESSION: Listbox scrollbar does not reflect actual scrolled position when selected option is added after layout

        Test: fast/forms/listbox-scrollbar-incremental-load.html

        The scroller position was not updated correctly during insertion, since
        scrollbar proportions are updated only during layout

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::selectionChanged): Delay scrolling to reveal the
        selection until after layout if m_optionsChanged is set. Layout is
        guaranteed to happen soon when the flag is set.

2007-04-26  David Hyatt  <hyatt@apple.com>

        Fix for 13511, crash on a counters page.  Make sure that RenderTexts
        never get a null StringImpl.  I would have added an assert that the length
        had to be nonzero also, but unfortunately editing creates empty RenderTexts
        because of its EditingText DOM subclass that always forces renderers to be
        made.  I suppose there is a good reason for this...

        Reviewed by aroben

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::RenderCounter):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):

2007-04-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectAll):
        adding null check

2007-04-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5120591> 
        Crash when creating a link in Leopard wiki server

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Use a RefPtr,
        setting the anchor's href can destroy it if there is
        an ancestor with a subtree modified event listener.

2007-04-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by hyatt

        - http://bugs.webkit.org/show_bug.cgi?id=13496
          Eliminate repaintObjectsBeforeLayout

        No tests added since there is no change to functionality. Several
        tests in fast/repaint test repainting of objects that move during layout.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Removed an early
        setNeedsLayout(false). Resetting the bit here prevents the full repaint
        that we rely on when we decide not to repaint children that move.
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths): Replaced the call to
        repaintObjectsBeforeLayout() if the cell didn't need layout with
        an unconditional repaint(). We don't bother with repainting only the
        delta between the old and new widths, since by marking the cell for
        layout results in a full repaint with the new width anyway.

2007-04-26  David Hyatt  <hyatt@apple.com>

        Fix for 13509.  Don't recur to parent inline flows if they have been
        marked as needing layout themselves.

        Reviewed by adele

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild):

2007-04-26  Matt Perry  <mpComplete@gmail.com>

        Reviewed and landed by Alexey.

        http://bugs.webkit.org/show_bug.cgi?id=13495
        Crash when referencing an undefined entity in an XHTML document

        Test: fast/parser/badentity.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::getEntityHandler): Check for a NULL returned from getXHTMLEntity

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4851944>
        REGRESSION: With TOT, BMP images can no longer be opened in the browser window
        
        On Tiger, the MIME type for the com.microsoft.bmp UTI isn't in the registry, so add it manually.
        
        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedImageMIMETypes):

2007-04-26  David Hyatt  <hyatt@apple.com>

        Fix for bug 13503, invalidateContainingBlockPrefWidths is 15% of the
        nesting PLT.  Avoid O(n^2) behavior by including inlines in the minmax
        dirty chain.

        Reviewed by kevin

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setPrefWidthsDirty):
        (WebCore::RenderObject::invalidateContainerPrefWidths):
        * rendering/RenderObject.h:

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5067925>
        Reproducible crash (infinite recursion) with a layout test that submits on unload (13078)
        
        Ask the document loader whether it's loading the main resource, since there are cases where the frame 
        loader's variable isn't updated correctly.
        
        In the distant future, the frame loader shouldn't have an instance variable but this is the least intrusive fix for now.
        
        I couldn't come up with a good test case for this since it requires running three tests in a row and scheduleLoad didn't work. Also,
        calling submit in the onunload prevents any new tests from loading!
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isLoading):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        ... and fix the build.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Revert the previous change - activeDocumentLoader never returns the policy document loader.
        Instead, add a null check for the policy document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Use the active document loader instead of the policy document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5049099> documents no longer have a default base URL

        Don't call canHandleRequest if we have valid substitute data and the protocol is "applewebdata".
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueAfterNavigationPolicy):

2007-04-25  Stephanie Lewis <slewis@apple.com>

        Reviewed by Darin.

        Fix the build for platforms that overload the abs function.        

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::item):

2007-04-25  David Hyatt  <hyatt@apple.com>

        Fix for bug 13373, make sure to invalidate the pref widths for objects
        with percentage padding.

        Reviewed by beth

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutPositionedObjects):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-04-25  David Harrison  <harrison@apple.com>

        Comment change. Correct the header name in the endif comment.
        
        * editing/FormatBlockCommand.h:
        Change InsertListCommand_h to FormatBlockCommand_h.

2007-04-25  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * platform/AtomicString.cpp: (WebCore::AtomicString::add):
        Removed unnecessary use of strlen to check if a string is empty.

2007-04-25  Mitz Pettel  <mitz@webkit.org>

        Build fix.

        * rendering/RenderListMarker.h: Undeleted the m_text member.

2007-04-25  David Hyatt  <hyatt@apple.com>

        Rearchitect calcPrefWidths.  The calculation is now done lazily only when minPrefWidth
        or maxPrefWidth are asked for.  The result of the calculation is cached.

        The new invalidation scheme for pref width invalidation follows the
        containing block hierarchy and knows to halt at positioned objects, since
        they cannot influence the size of their containers.

        Reviewed by darin

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::InlineMinMaxIterator::endOfInline):
        (WebCore::shouldGrowTableCellForImage):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::minPrefWidth):
        (WebCore::RenderBox::maxPrefWidth):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        (WebCore::RenderContainer::layout):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::moveChildNode):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::dirtyLineBoxes):
        (WebCore::RenderCounter::calcPrefWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::calcPrefWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::calcPrefWidths):
        * rendering/RenderListItem.cpp:
        (WebCore::firstNonMarkerChild):
        (WebCore::RenderListItem::updateMarkerLocation):
        (WebCore::RenderListItem::calcPrefWidths):
        (WebCore::RenderListItem::layout):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::updateMargins):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::removeChildNode):
        (WebCore::RenderObject::moveChildNode):
        (WebCore::RenderObject::appendChildNode):
        (WebCore::RenderObject::insertChildNode):
        (WebCore::RenderObject::setPrefWidthsDirty):
        (WebCore::RenderObject::invalidateContainingBlockPrefWidths):
        (WebCore::RenderObject::information):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::layer):
        (WebCore::RenderObject::hasLayer):
        (WebCore::RenderObject::prefWidthsDirty):
        (WebCore::RenderObject::setNeedsLayoutAndPrefWidthsRecalc):
        (WebCore::RenderObject::setHasLayer):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::removeChildNode):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::removeChildNode):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::isSpaceAccordingToStyle):
        (WebCore::RenderText::minPrefWidth):
        (WebCore::RenderText::maxPrefWidth):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcPrefWidths):
        (WebCore::RenderView::layout):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::layout):

2007-04-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Fix spelling error in spelling method name.
        Expose new spelling callback methods to all platforms.

        * bridge/EditorClient.h:
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::updateSpellingUIWithGrammarString):
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithGrammarString):
        (WebCore::SVGEmptyEditorClient::getGuessesForWord):

2007-04-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Tim Hatcher.

        Fixed a few NSAutoreleasePool issues I noticed while reviewing Brady's patch.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::setCompositeOperation): Call -drain instead of 
        -release, since -release is a no-op in a GC world.

2007-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13445
        NodeList access by index is slow

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::item): Support iterating backwards from the last accessed node
        or from the last child.
        * dom/NodeList.h: Make cachedLength unsigned.

2007-04-26  Mark Rowe  <mrowe@apple.com>

        Gdk build fix.  Add missing stub.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::advanceToNextMisspelling):

2007-04-25  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12163
        SVG text does not appear in a scrolling <div>

        Make sure SVG text is painted when scrolling by taking into account the relative offset of the non-SVG parent in the paintInfo rect.

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

2007-04-26  Mark Rowe  <mrowe@apple.com>

        Fix non-Mac builds after r21081.

        Stub out new Editor methods for Qt and Gdk, and new SVGEmptyEditorClient methods
        for all non-Mac builds.

        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::spellingPanelIsShowing):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::showSpellingGuessPanel):
        (Editor::spellingPanelIsShowing):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::ignoreWordInSpellDocument):
        (WebCore::SVGEmptyEditorClient::learnWord):
        (WebCore::SVGEmptyEditorClient::checkSpellingOfString):
        (WebCore::SVGEmptyEditorClient::checkGrammarOfString):
        (WebCore::SVGEmptyEditorClient::udpateSpellingUIWithGrammarString):
        (WebCore::SVGEmptyEditorClient::updateSpellingUIWithMisspelledWord):
        (WebCore::SVGEmptyEditorClient::showSpellingUI):
        (WebCore::SVGEmptyEditorClient::spellingUIIsShowing):
        (WebCore::SVGEmptyEditorClient::getGuessesForWord):

2007-04-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5122153>
        Crash occurs at WebCore::Frame::loader() when switching to Bookmarks view while loading standalone image

        Don't call writeRawData if the data length is 0. (This is checked by the decoder for the non-raw case).

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

2007-04-26  Mark Rowe  <mrowe@apple.com>

        Gdk build fix courtesy of Alp Toker.

        * make-generated-sources.sh:  Remove conditional logic to ensure the
        script exits with the correct exit code.

2007-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/4869095> 
        default content type for XMLHttpRequest POSTs changed (breaks Flickrator 0.1 widget)
        
        Use the right MIME type.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2007-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - second round of preparation for Hyatt's "lazy minMaxWidth" change
          http://bugs.webkit.org/show_bug.cgi?id=13431

        These are small changes that are either safe to do first, or unrelated to the main
        change in Hyatt's patch.

        - Preallocate 4 entries each in m_layoutStruct and m_spanCells to save allocation
          in AutoTableLayout.
        - Add an early exit to RenderFlow::dirtyLinesFromChangedChild.
        - Change InlineBox::hasTextChildren() to use a bit directly and never a virtual function.
        - Save a virtual function call by using a local bool variable for isTableCell().

        - Fix containingBlock() so it returns 0 for table cells with no parent.

        - Change all callers who are getting at layer() as a boolean to use hasLayer().
        - Change if statements to max() function calls (only the ones Hyatt had in his patch).
        - Remove some old kdDebug calls.
        - Tweak formatting of some code.
        - Add const in one place.

        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/AutoTableLayout.h:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::hasTextChildren):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::InlineMinMaxIterator::next):
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

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

        Reviewed by Darin, Oliver.

        Refactor spelling codepaths

        * bridge/EditorClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::ignoreWordInSpellDocument):
        (WebCore::EditorClientGdk::learnWord):
        (WebCore::EditorClientGdk::checkSpellingOfString):
        (WebCore::EditorClientGdk::checkGrammarOfString):
        (WebCore::EditorClientGdk::udpateSpellingUIWithGrammarString):
        (WebCore::EditorClientGdk::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientGdk::showSpellingUI):
        (WebCore::EditorClientGdk::spellingUIIsShowing):
        (WebCore::EditorClientGdk::getGuessesForWord):
        * platform/gdk/EditorClientGdk.h:

2007-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - first round of preparation for Hyatt's "lazy minMaxWidth" change
          http://bugs.webkit.org/show_bug.cgi?id=13431

        This patch limits itself to renaming and making other super-simple
        changes so that the above change will be smaller and easier to review
        and understand.

        Rename:

            calcHorizontalMinMaxWidth -> calcHorizontalPrefWidths
            calcMinMaxWidth -> calcPrefWidths
            calcMinMaxWidthInternal -> calcPrefWidthsInternal
            calcVerticalMinMaxWidth -> calcVerticalPrefWidths
            setNeedsLayoutAndMinMaxRecalc -> setNeedsLayoutAndPrefWidthsRecalc
            trimmedMinMaxWidth -> trimmedPrefWidths

            RenderObject::m_maxWidth -> RenderObject::m_maxPrefWidth
            RenderObject::m_minWidth -> RenderObject::m_minPrefWidth
            RenderObject::maxWidth() -> RenderObject::maxPrefWidth()
            RenderObject::minWidth() -> RenderObject::minPrefWidth()

        Replace m_minMaxKnown, minMaxKnown(), and setMinMaxKnown() with
        m_prefWidthsDirty, prefWidthsDirty(), and setPrefWidthsDirty(),
        a boolean with the opposite sense.

        Convert some uses of if statements into "max".

        Change many uses of layer() to hasLayer(). For now it's just a boolean
        version of layer(), but Hyatt's patch makes it faster by using a bit.

        Added a guard to use of axObjectCache() to make RenderObject destruction
        a little faster for the normal case.

        Removed some assertions that will be removed in Hyatt's patch.

        Made some functions const that will be const in Hyatt's patch.

        Put in some revised comments from Hyatt's patch.

        Removed an unneeded nil check from RenderListMarker::setStyle.

        Moved RootInlineBox::setHorizontalOverflowPositions and
        RootInlineBox::setVerticalSelectionPositions to the RootInlineBox.h
        header and marked them inline.

        * dom/Document.cpp:
        (WebCore::Document::updateStyleSelector):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * page/Frame.cpp:
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcPrefWidths):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        * rendering/AutoTableLayout.h:
        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::recount):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcPrefWidths):
        * rendering/FixedTableLayout.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::handleCompactChild):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::calcPrefWidths):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::minPrefWidth):
        (WebCore::RenderBox::maxPrefWidth):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        (WebCore::RenderContainer::appendChildNode):
        (WebCore::RenderContainer::insertChildNode):
        (WebCore::RenderContainer::layout):
        * rendering/RenderContainer.h:
        (WebCore::RenderContainer::calcPrefWidths):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::calcPrefWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::calcPrefWidths):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::calcPrefWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::hasMultipleLines):
        (WebCore::RenderFlexibleBox::isVertical):
        (WebCore::RenderFlexibleBox::isHorizontal):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcPrefWidths):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildToFlow):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::calcPrefWidths):
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::calcPrefWidths):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateValue):
        (WebCore::RenderListItem::updateMarkerLocation):
        (WebCore::RenderListItem::calcPrefWidths):
        (WebCore::RenderListItem::layout):
        (WebCore::RenderListItem::explicitValueChanged):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::setStyle):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::calcWidth):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::calcPrefWidths):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::addLayers):
        (WebCore::RenderObject::removeLayers):
        (WebCore::RenderObject::moveLayers):
        (WebCore::RenderObject::addAbsoluteRectForLayer):
        (WebCore::RenderObject::checkForRepaintDuringLayout):
        (WebCore::RenderObject::dump):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::recalcMinMaxWidths):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasLayer):
        (WebCore::RenderObject::prefWidthsDirty):
        (WebCore::RenderObject::setPrefWidthsDirty):
        (WebCore::RenderObject::setNeedsLayoutAndPrefWidthsRecalc):
        (WebCore::RenderObject::calcPrefWidths):
        (WebCore::RenderObject::minPrefWidth):
        (WebCore::RenderObject::maxPrefWidth):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::setWidget):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::calcPrefWidths):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::calcPrefWidths):
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::calcPrefWidths):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::calcPrefWidths):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::calcPrefWidths):
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateFromElement):
        (WebCore::RenderTableCell::styleOrColWidth):
        (WebCore::RenderTableCell::calcPrefWidths):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::updateFromElement):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::calcPrefWidthsInternal):
        (WebCore::RenderText::setText):
        * rendering/RenderText.h:
        (WebCore::RenderText::minPrefWidth):
        (WebCore::RenderText::maxPrefWidth):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControl.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcPrefWidths):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::layout):
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::setHorizontalOverflowPositions):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        * rendering/TableLayout.h:

2007-04-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver
        
        <rdar://problem/5156401> 
        Crash when dragging text into a link inside a table cell

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        Don't avoid the anchor if doing so would skip over a line break, that
        would put content in the wrong paragraph, which can throw ReplaceSelectionCommand,
        which relies on moveParagraphs into infinite recursion.
        Renamed the input position.
        Don't need to re-fetch the enclosing anchor when preparing to push it down,
        since it hasn't changed since the top of the function.

2007-04-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5133011> 64-bit: Attempting to paste copied text in a input field results in a crash at WebCore::Range::startPosition()

        Change a couple incorrect uses of LONG_MAX to INT_MAX to match the variable type they are used in.
        The LONG_MAX on 64-bit was overflowing the int variables, causing this crash on paste.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):

2007-04-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/4966982> 64-bit: In a unordered list, TYPE=DISC and TYPE=CIRCLE attribute values are ignored

        We need to draw our full-circle arcs counter-clockwise, since a clockwise arc from 0 to 2Ï is no arc at all!
        This only worked on 32-bit due to a rounding error in CoreGraphics, causing it to draw a full circle anyway.

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

2007-04-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Beth, Hyatt, Ada, and Darin

        <rdar://problem/5011477> and <rdar://problem/5011514>
        Provide support for the icon.db to be moved to a different directory from the old WebKit-style
        icons, and remove the old directory if that is the case

        Support for this starts in WebCore, where we can use the metadata table in the icon.db to track
        whether or not we've ever done the import

        * WebCore.exp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename): Changed to "Icons.db"
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::deleteAllPreparedStatements): Delete the new statements added
        (WebCore::IconDatabase::imported): Grab this flag from the DB or return the cached flag
        (WebCore::IconDatabase::setImported): Store this flag into the DB
        (WebCore::IconDatabase::importedQuery): Actually do the DB query for this save
        (WebCore::IconDatabase::setImportedQuery): Actually do the DB query for this retrieval
        * loader/icon/IconDatabase.h:

2007-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix <rdar://problem/4356361> Selection after multiple delete
          keypresses and undo selects only the last deleted character

        Test: editing/undo/undo-combined-delete-boundary.html
        Test: editing/undo/undo-combined-delete.html
        Test: editing/undo/undo-delete-boundary.html
        Test: editing/undo/undo-delete.html
        Test: editing/undo/undo-forward-delete-boundary.html
        Test: editing/undo/undo-forward-delete.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Fix obviously-wrong code where there were missing
        braces. I couldn't find any real symptom of this, but I think the fix should go in anyway.
        All layout tests still pass.
        (WebCore::TypingCommand::deleteKeyPressed): Added code to compute a selection that goes
        back to the beginning of the composite editing operation.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.

        * editing/Selection.h:
        * editing/Selection.cpp: (WebCore::Selection::setWithoutValidation):
        Added. Back door to allow setting the ends of a selection without revalidating,
        because we need to use it on a selection where the endpoints may no longer be
        valid due to mutations done by earlier pieces of the editing operation.

        * editing/EditCommand.h:
        (WebCore::EditCommand::startingSelection): Return a const& for speed.
        (WebCore::EditCommand::endingSelection): Ditto.

2007-04-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=13448
          REGRESSION: setting an input element's value to JavaScript null gives "null"

        Test: fast/forms/input-null.html

        * html/HTMLInputElement.idl: Convert JS null to the empty string on setting
        DOMString attributes.

2007-04-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13453
          Control clip isn't applied to children's backgrounds, outlines and floats

        Test: fast/forms/control-clip.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Apply the clip in all phases that paint
        children. Split PaintPhaseOutline and PaintPhaseChildBlockBackground into
        two phases each, applying the clip only to the children.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject): Treat the scrollbar as part of the
        background rather than as a child's background, now that children are
        clipped out.

2007-04-24  Benjamin Otte  <otte@gnome.org>

        Reviewed by Mark Rowe.

        Gdk build system improvements.

        * make-generated-sources.sh: Exit with failure status if make fails.

2007-04-24  Benjamin Otte  <otte@gnome.org>

        Reviewed by Mark Rowe.

        Gdk build system improvements.

        * Projects/gdk/webcore-gdk.bkl:
        fail if running any of the commands failed. In particular
        make-generated-sources.sh

2007-04-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5155507> REGRESSION: Crash in 
        RenderLayer::setHasVisibleContent()

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::appendChildNode): Must null-check 
        enclosingLayer()
        (WebCore::RenderContainer::insertChildNode): Same.

2007-04-23  David Hyatt  <hyatt@apple.com>

        Fix for bug 13337, deep tag nesting is slow.  This patch fixes a number of O(n^2) issues as well as making
        a few performance optimizations based off profiling.  Details next to each change below.

        Note that calcMinMaxWidth being slow is a critical separate piece of this puzzle.  Until bug 13430 is fixed,
        render tree construction will be O(n^2) (because of the minmaxrecalc bit setting being stupid enough to
        always crawl to the root of the tree) and calcMinMaxWidth will waste tons of unnecessary time.

        When these fixes are combined with the calcMinMaxWidth fix in 13430, the penguin page specified in 13337
        loads in < 2 seconds (down from an infinite hang before).

        Reviewed by aroben, ollie

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        * css/csstyleselector.h
        Cap the depth of cousin searching on the shared style optimization.  We will be willing to (at most) crawl
        up the tree the same distance that we were willing to crawl backwards through sibling lists.  Leaving it
        uncapped resulted in pathological style resolution for the case of an infinitely nested chain of singletons.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::HTMLParser::popBlock):
        Cap the number of residual style tags that we are willing to reopen.  We will reopen at most 200
        residual style tags, since the assumption is that once that many tags are on the stack, you're probably already
        every kind of bold, italic, and color of the rainbow.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        absoluteClippedOverflowRect can just return the empty rect when the inline flow has no line boxes instead of
        doing a bunch of work (and calling containingBlock()) for no reason.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildToFlow):
        Remove the useless containingBlock() check from addChildToFlow.  Obviously every inline's containing block
        is a block flow.

        * rendering/bidi.cpp:
        (WebCore::inlineWidth):
        (WebCore::RenderBlock::createLineBoxes):
        Cap the depth of individual line trees to 200.  Again the assumption is that once that many open inlines exist
        all on one line that there's no way this would be intentional.

2007-04-23  David Hyatt  <hyatt@apple.com>

        Fix for bug 13430, cap inline splitting for continuations to a maximum depth of 200.

        Reviewed by olliej, antti

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):

2007-04-23  Alp Toker  <alp@atoker.com>

        Gdk build fix. Track EventHandler change made in r21042.

        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passMousePressEventToScrollbar):

2007-04-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5024945> -[DOMRange lineBoxRects] doesn't include start and end nodes that have offsets

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects): Use min(box->len(), end) instead of special-casing UINT_MAX.

2007-04-23  Adele Peterson  <adele@apple.com>

        Fix by Darin, reviewed by me.

        Fix for REGRESSION: Can't upload attachments to bugzilla since the file upload control is reset immediately 
        http://bugs.webkit.org/show_bug.cgi?id=13461

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::updateFromElement):
        Only clear the FileChooser if the value is empty *and* (not or) the filename is empty.

2007-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Updated fix for <rdar://problem/4887426> Set a reasonable maximum number of recent searches for search menu

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::parseMappedAttribute): Use a const int maxSavedResults instead of magic number 256.

2007-04-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/5024945> -[DOMRange lineBoxRects] doesn't include start and end nodes that have offsets

        Don't call selectionRect with a -1 end position, instead use the text length.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::addLineBoxRects):

2007-04-23  Adele Peterson  <adele@apple.com>

        Fixed and reviewed by Darin, Adele, and Oliver.

        WebCore part of fix for <rdar://problem/5107538> REGRESSION: Page scroll when selecting characters from inline input candidate window by arrow buttons
        http://bugs.webkit.org/show_bug.cgi?id=13263

        * dom/KeyboardEvent.h: (WebCore::KeypressCommand::isEmpty): Added helper method.

2007-04-23  Patti Hoa  <patti@apple.com>
        
        <rdar://problem/4938364> Attachment button has different string length between attributeStringForRange and stringForRange
        <rdar://problem/4939536> AXLengthForTextMarkerRange returns zero length for the range of an attachment
        
        Reviewed by Darin.

        * bridge/mac/WebCoreAXObject.mm:
        (nsStringForReplacedNode):
        Added helper routine to check if the replaced node should be exposed as an attachment character in string representation.
        Added an additional check to make sure that text node is not considered a replaced node.
        Removed helper routine AXAttributedStringAppendReplaced since half of the functions are now taken care by nsStringForReplacedNode.
        The other half is directly used in the doAXAttributedStringForTextMarkerRange method.
        (-[WebCoreAXObject doAXStringForTextMarkerRange:]):
        (-[WebCoreAXObject doAXAttributedStringForTextMarkerRange:]):
        Both string and AttrbributedString methods will now utilize the helper routine nsStringForReplacedNode to return replacement
        characters for range occupied by attachment.
        
2007-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/4887426> Set a reasonable maximum number of recent searches for search menu

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::parseMappedAttribute):
        Enforce a maximum of 256 saved results for the search field.

2007-04-23  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt & Adam.

        Fix for <rdar://problem/4807799> REGRESSION: calling select() in onSearch handler doesn't work if you hit enter to trigger the event
        Fix for <rdar://problem/5153970> onChange doesn't fire when focusing a popup, using type-ahead to select, and leaving

        This previous behavior to blur controls when hitting enter was added to achieve the result of firing the change event.  Firefox does not
        fire blur- just the change event, so this fix will match Firefox behavior.

        This also fixes a bug where we didn't fire the change event when using type-ahead selection with the popup menu.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): Fire change event instead of blur event when hitting enter.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::dispatchFocusEvent): Now that we have type-ahead selection for popups that can be opened with the arrow keys,
         we should always save the last selection when a popup gets focus, so it can be compared to the current selection when it loses focus.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): For the same reasons as above, we should fire onChange for all popups on blur.

        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Fire change event instead of blur event when hitting enter.  Removed an unnecessary
         check for form() before calling menuListOnChange().  Removed an unnecessary check for renderer() and usesMenuList().
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Remove call to blur.  Since list boxes fire the change event immediately after an
         action is taken, we don't need to fire anything after hitting enter.
        (WebCore::HTMLSelectElement::menuListOnChange): Reset m_lastOnChangeIndex after firing the change event.

2007-04-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Ada.

        <rdar://problem/5061022>
        REGRESSION: Acrobat 8 plug-in fails to scroll with trackpad two-finger scroll or mouse wheel (12995)
        
        Pass wheel events to all widgets.
        
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget):

2007-04-23  Alp Toker  <alp@atoker.com>

        Reviewed by Mark.

        Save and restore the context state when beginning and ending a transparency layer.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):

2007-04-23  Alp Toker  <alp@atoker.com>

        Reviewed by Mark.

        Further implementation and checks. The opacity layer code is not so beautiful
        but gets the job done with fewer complications than maintaining our own stack.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):

2007-04-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - rename box-sizing to -webkit-box-sizing
          because of <rdar://problem/4667227> REGRESSION: Shifted table on page at
          https://us.etrade.com/e/t/home (due to box-sizing)

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Rename.
        * css/CSSPropertyNames.in: Ditto.
        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): Rename and take out comment
        explaining why we aren't prefacing with -webkit.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Rename.
        * css/html4.css: Rename.
        * css/quirks.css: Rename.

2007-04-23  Alp Toker  <alp@atoker.com>

        Reviewed by Hyatt.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        Fix stroking and filling of ellipses and polygons.
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw): Make use of a new GraphicsContext
        function to simplify the code.
        (WebCore::Image::drawPattern): Now implemented. This makes content
        with tiled patterns (eg. CSS repeat) render correctly.
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::drawPattern): Remove old stub.

2007-04-22  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Tim Hatcher.

        Prettier, more modern 'cell' cursor
        http://bugs.webkit.org/show_bug.cgi?id=13441
        Also updates past ChangeLog entries to new email address

        * ChangeLog:
        * ChangeLog-2006-12-31:
        * Resources/cellCursor.png:

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

        Rubber-stamped by Hyatt.

        Rename cMaxPenderingSourceLengthInLowBandwidthDisplay to cMaxPendingSourceLengthInLowBandwidthDisplay.

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

2007-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Geoff.

        - move most of Window's data members into a separate private object, to avoid needing
        to use the oversize allocator for it
        http://bugs.webkit.org/show_bug.cgi?id=13381
        
        It was the only remaining JSObject subclass to use the oversize
        allocator on 32-bit platforms, and having oversize objects around
        makes garbage collection slower so this would hurt performance
        with many tabs/windows open.
        
        No significant effect on JS iBench.

        * bindings/js/kjs_events.cpp:
        (KJS::JSUnprotectedEventListener::JSUnprotectedEventListener):
        (KJS::JSUnprotectedEventListener::~JSUnprotectedEventListener):
        (KJS::JSEventListener::JSEventListener):
        (KJS::JSEventListener::~JSEventListener):
        (KJS::JSLazyEventListener::parseCode):
        * bindings/js/kjs_window.cpp:
        (KJS::WindowPrivate::WindowPrivate):
        (KJS::Window::Window):
        (KJS::Window::~Window):
        (KJS::Window::location):
        (KJS::Window::selection):
        (KJS::Window::locationbar):
        (KJS::Window::menubar):
        (KJS::Window::personalbar):
        (KJS::Window::statusbar):
        (KJS::Window::toolbar):
        (KJS::Window::scrollbars):
        (KJS::Window::mark):
        (KJS::Window::getValueProperty):
        (KJS::Window::findJSEventListener):
        (KJS::Window::findJSUnprotectedEventListener):
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::clear):
        (KJS::Window::setCurrentEvent):
        (KJS::Window::setReturnValueSlot):
        (KJS::Window::clearAllTimeouts):
        (KJS::Window::installTimeout):
        (KJS::Window::pauseTimeouts):
        (KJS::Window::resumeTimeouts):
        (KJS::Window::clearTimeout):
        (KJS::Window::timerFired):
        (KJS::Window::disconnectFrame):
        (KJS::Window::jsEventListeners):
        (KJS::Window::jsHTMLEventListeners):
        (KJS::Window::jsUnprotectedEventListeners):
        (KJS::Window::jsUnprotectedHTMLEventListeners):
        * bindings/js/kjs_window.h:

2007-04-22  David Hyatt  <hyatt@apple.com>

        Fix 1% regression on the PLT.  Make sure roundToDevicePixels does no
        work when no scale is in effect.

        Reviewed by mjs

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix small things noticed while looking into a font subsitution bug

        * platform/Font.h: (WebCore::Font::operator==): Corrected a misleading comment.

        * platform/Font.cpp:
        (WebCore::Font::Font): Initialize m_pageZero to 0 in the empty constructor instead
        of leaving it uninitialized. Initialize m_fontList for tighter code. Remove unneeded
        initialization of RefPtr members to 0. Changed the copy constructor to use initialization
        for tighter code.
        (WebCore::Font::operator=): Sorted to match the order from the header and the copy
        constructor, and removed the uneeded self-assignment check.

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5196
          <rdar://problem/4537384> input type=file fields with style=display:none do not post
          their values (5196)

        - fix http://bugs.webkit.org/show_bug.cgi?id=8248
          Can not clear file input field

        * manual-tests/clear-input-file.html: Added.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData): Remove check that prevents submission of
        form data when there is no renderer or the renderer is invisible. While well-intentioned,
        the rule does not match the behavior of other web browsers.
        (WebCore::HTMLInputElement::setValue): Instead of disallowing all value changes for file
        type, allow changes to the empty string.
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): Made file type return true
        for this. 1) The file type does store its value separate from the value attribute.
        2) The code in setInputType() should do the right thing given this new value, according to
        my inspection of the code. 3) The code in both reset() and setValue() will work properly
        if this is true, which was the motivation for changing it.

        * platform/FileChooser.h: Added a clear function.
        * platform/FileChooser.cpp: (WebCore::FileChooser::clear): Clear the filename and the icon.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::valueChanged): Used a local variable to make the code
        a little bit more readable (and match the change below).
        (WebCore::RenderFileUploadControl::updateFromElement): Used local variables a bit more in
        the old code. Added code that will call clear on the FileChooser and repaint if the DOM
        element has an empty value and the FileChooser does not.

2007-04-22  Grace Kloba  <klobag@gmail.com>

        Reviewed by Hyatt.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12279
        Implemented two pass loading. Enabled by WTF_USE_LOW_BANDWIDTH_DISPLAY flag.

        * dom/Document.cpp:
        (WebCore::Document::Document): initialize member variable m_inLowBandwidthDisplay

        * dom/Document.h:
        (WebCore::Document::haveStylesheetsLoaded): while in low bandwidth display mode, ignore pending style sheets
        (WebCore::Document::setDocLoader):
        (WebCore::Document::inLowBandwidthDisplay):
        (WebCore::Document::setLowBandwidthDisplay):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): while in low bandwidth display mode, don't execute JavaScript

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource): while in low bandwidth display mode, don't let style sheet and JavaScript block

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify): add notifyFinished() as client may need "this" pointer

        * loader/DocLoader.h:
        (WebCore::DocLoader::replaceDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::requestFrame): while in low bandwidth display mode, don't load sub-frame
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::begin): set to low bandwidth display mode if the top frame is HTML document
        (WebCore::FrameLoader::write):
        (WebCore::FrameLoader::endIfNotLoading):
        (WebCore::FrameLoader::checkCompleted): while in low bandwidth display mode, don't set complete
        (WebCore::FrameLoader::requestObject): while in low bandwidth display mode, don't care Object
        (WebCore::FrameLoader::addLowBandwidthDisplayRequest):
        (WebCore::FrameLoader::removeAllLowbandwidthDisplayRequests):
        (WebCore::FrameLoader::notifyFinished):
        (WebCore::FrameLoader::switchOutLowBandwidthDisplayIfReady):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::FrameLoader::needToSwitchOutLowBandwidthDisplay):
        (WebCore::FrameLoader::FrameLoader::setUseLowBandwidthDisplay):
        (WebCore::FrameLoader::FrameLoader::useLowBandwidthDisplay):

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13439
          4 problems found in dashboard-region parser and serializer

        Test: fast/css/dashboard-region-parser.html

        * css/CSSPrimitiveValue.cpp: (WebCore::CSSPrimitiveValue::cssText):
        Fix code that overwrote each additional region with the previous one to
        instead build a space-separated list. Check for the case of an identifier
        that's invalid, since that's (accidentally) how we represent a region
        value that doesn't have explicit top/right/bottom/left values. The old code
        would end up writing out four spaces after the region type.

        * css/cssparser.cpp: (WebCore::CSSParser::parseDashboardRegions):
        Fail to parse if there is something after the "none" identifier or after
        the arguments inside the dashboard-region "function". Also replaced code
        that produced a identifier with CSS_VAL_INVALID in a roundabout way with
        code that does it explicitly.

2007-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - support for fix for <rdar://problem/5100240> REGRESSION: Control-O broken

        * dom/KeyboardEvent.h: Include a vector of command names in the KeypressCommand object
        instead of a single command name.

2007-04-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13115
        REGRESSION: 1000% performance regression in DOM access by index, which was already slow

        * dom/NodeList.h: Move cached data into a separate class, so it can be shared.

        * dom/Node.h: Replace the set of registered NodeLists with a struct that also
        contains a shared NodeList::Caches (so the size of Node doesn't change).

        * dom/NodeList.cpp:
        (WebCore::NodeList::NodeList):
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::recursiveLength):
        (WebCore::NodeList::itemForwardsFromCurrent):
        (WebCore::NodeList::itemBackwardsFromCurrent):
        (WebCore::NodeList::recursiveItem):
        (WebCore::NodeList::itemWithName):
        (WebCore::NodeList::rootNodeChildrenChanged):
        (WebCore::NodeList::NodeListInfo::NodeListInfo):
        (WebCore::NodeList::NodeListInfo::reset):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::registerNodeList):
        (WebCore::Node::unregisterNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        Adjust for the above changes.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13391
          REGRESSION (r18819): Incomplete repaint of button text

        Test: fast/repaint/control-clip.html

        Ignore controls' lightweight clip in repaint rect computation for now.

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

2007-04-21  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/4816343> :-khtml-drag CSS pseudo-class changed to :-webkit-drag, need alias

        * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType):
        Since Apple documentation claims "-khtml-drag" works, we need to keep it working,
        so add it back as an alias.

2007-04-21  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/4782422> REGRESSION: -[stringByEvaluatingJavaScriptFromString]
          returns an empty string instead of nil for non-string results

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        Added a call to nsStringNilIfEmpty to restore the old behavior. It might be nice to
        distinguish the empty string from a non-string result, but there's no obvious way
        to do that, and for compatibility it's probably best to just restore the old
        behavior instead.

2007-04-21  David Hyatt  <hyatt@apple.com>

        Fix for bug 13432, determineFlowSpacing is O(n^2).

        Reviewed by aroben

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextOnLineExists):
        (WebCore::InlineBox::prevOnLineExists):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):

2007-04-21  Lamar Goddard <lamargoddard@gmail.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5262
        <rdar://problem/5018778>
        XMLSerializer drops Namespace information

        Updated WebCore::markup to output namespace information for elements/attributes whose namespace information
        doesn't appear in its scope in the output.

        Added test case: fast/dom/serialize-nodes.xhtml

        * WebCore/editing/markup.cpp:
        (WebCore::createMarkup(const Node*, ...)): Changed call to WebCore::markup to match parameters
        (WebCore::markup): Changed recursive call to match tree structure, removed ASSERT and no longer needed includeSiblings parameter.
        (WebCore::startMarkup): Added optional parameter to track namespaces in the current scope.
        (WebCore::addNamespace): Function to add namespace information to markup.
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::shouldAddNamespaceElem): Functions that test whether namespace information should be added for a given node.
        * WebCore/dom/Document.idl:
        (createElementNS):
        (createAttributeNS):
        (getElementsByTagNameNS): Added [ConvertNullToNullString] to namespaceURI parameter.
        * WebCore/dom/Node.cpp:
        (Node::getElementsByTagNameNS): removed test for namespaceURI being null as null can be a valid namespace.

2007-04-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13300
        Reproducible crash opening anekdot.ru

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::getNode):
        (WebCore::HTMLParser::handleIsindex):
        * html/HTMLParser.h:
        Made HTMLParser::form a RefPtr, and renamed it to m_currentFormElement.
        Made m_currentMapElement a RefPtr.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13353
          REGRESSION (r20754-20766): Textarea does not resize when scrollbar is present

        Test: fast/overflow/hit-test-overflow-controls.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Avoid activating scrollbars
        during layer resize.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInOverflowControl): Renamed isPointInScrollbar
        to this, to reflect that it returns true for points in the resize corner
        as well. Changed it to call the layer to do the actual work.
        (WebCore::RenderBlock::nodeAtPoint): Updated for the above rename.
        * rendering/RenderBlock.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::horizontalScrollbarWidget): Fixed typo in this function's
        name (it was horizontaScrollbarWidget).
        (WebCore::RenderLayer::hitTestOverflowControls): Added. Returns whether the
        hit point is in one of the scrollbars or the resize corner, and updates the
        platform scrollbar in the hit test result if a scrollbar was hit.
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl): Rename.
        * rendering/RenderListBox.h:

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13417
          Repro crash when the first argument to getMatchedCSSRules is not an element

        Test: fast/dom/Window/getMatchedCSSRules-null-crash.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleRulesForElement): Added null check.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13416
          Repro crash after referencing the user stylesheet from JavaScript

        No test included because DumpRenderTree does not support setting the user stylesheet.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        * css/cssstyleselector.h: Made m_userSheet a RefPtr.

2007-04-21  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam.

        NPObject should be forward declared using 'struct' instead of 'class'

        * page/Frame.h:

2007-04-21  Alp Toker  <alp@atoker.com>

        Gdk build fix.

        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Use the correct casts.

2007-04-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver (Black Sheep)

        <rdar://problem/3559794>
        [WebView setMaintainsBackForwardList:] doesn't actually flush out the current page caches

        * WebCore.exp:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::BackForwardList): Set the flag to true by default
        (WebCore::BackForwardList::addItem): Check the flag and bail if its false
        (WebCore::BackForwardList::setCapacity): More correct if it set the m_current to 
          NoCurrentItemIndex if we're setting capacity to 0
        (WebCore::BackForwardList::enabled): 
        (WebCore::BackForwardList::setEnabled): If we're disabling, cycle capacity to 0 and 
          back to flush things out
        * history/BackForwardList.h: Add enabled(), setEnabled(bool), and m_enabled

2007-04-20  David Hyatt  <hyatt@apple.com>

        Bug 13424, firstLineStyle and verticalPositionHint together take
        33% of the time on the new tag nesting PLT.  Don't waste time even
        looking for first-line styles if no stylesheet used them.

        Reviewed by beth

        * css/CSSGrammar.y:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::usesFirstLineRules):
        (WebCore::Document::setUsesFirstLineRules):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalPositionHint):
        (WebCore::RenderObject::firstLineStyle):

2007-04-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13420

        * platform/TextEncodingRegistry.cpp:
        (WebCore::addToTextEncodingNameMap): Change a pointer comparison to a
        strcmp(), since the strings here are not necessarily
        pointer-equivalent.

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

        Reviewed by Geoff Garen and John Sullivan.

        - fix <rdar://problem/4671964> document property on <iframe> elements causes problems for SAP application

        Test: fast/dom/iframe-document.html

        * bindings/js/kjs_html.h: Removed IFrameDocument.
        * bindings/js/kjs_html.cpp: (KJS::JSHTMLElement::iFrameGetter): Ditto.

2007-04-19  Alp Toker  <alp@atoker.com>

        Reviewed by Mark.

        * platform/gdk/FontGdk.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/gdk/FontPlatformDataGdk.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Fix font support in Gdk port.

2007-04-19  David Hyatt  <hyatt@apple.com>

        Fix for bug 13208, implement word-break.  This patch produces a partial
        implementation of word-break.  word-break: break-all is implemented.  In
        addition, a custom value, word-break: break-word is added that is a hybrid
        of word-wrap: break-word and word-break: break-all (and more useful than
        either).

        Reviewed by beth

        Added fast/text/word-break.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::):
        (WebCore::RenderStyle::breakWords):
        (WebCore::RenderStyle::wordBreak):
        (WebCore::RenderStyle::setWordBreak):
        (WebCore::RenderStyle::initialWordBreak):
        (WebCore::RenderStyle::initialWordWrap):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::calcMinMaxWidthInternal):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle):
        (WebCore::RenderTextControl::calcHeight):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2007-04-20  Mark Rowe  <mrowe@apple.com>

        Qt build fix for FreeBSD.

        * WebCore.pro: FreeBSD needs HAVE_PTHREAD_NP_H defined.

2007-04-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13403
          REGRESSION (r18875-r18899): Can no longer type into search form field after searching and then clicking "back"

        The problem was that the page was loaded from the page cache with a subtree
        marked for layout and the layout timer stopped (having been stopped when the
        page entered the page cache). FrameView::needsLayout() was returning false
        which prevented the pending layout from completing.

        * page/FrameView.cpp:
        (WebCore::FrameView::clear): Removed the call to stop the layout timer, since
        reset() does that already.
        (WebCore::FrameView::needsLayout): Changed to return true if there's a subtree
        pending relayout.

2007-04-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/5144139> 
        On delete, <BR> inserted into non-editable ToDo <TABLE> element
        
        The fact that the br was being inserted at a bad position 
        (a non-editable position and one inside a table instead of 
        before it) was fixed in the previous checkin. This change 
        stops us from inserting a br at all, to fix the bug.
        
        After a delete, we need a placeholder if the selection
        started at the start of a paragraph and ended at the end 
        of a paragraph. But not if it starts just before a table 
        and ends inside that table.  We need placeholders to hold 
        open emptied out table cells, but that is handled separately.
        
        Also, moved lineBreakExistsAtPosition to htmlediting.cpp 
        so that it can be used in more places.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::lineBreakExistsAtPosition):
        * editing/htmlediting.h:

2007-04-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Fixes some issues found while investigating:
        <rdar://problem/5144139> On delete, <BR> inserted into non-editable ToDo <TABLE> element
        
        Move the code to handle inserting content before/after
        tables for [table, 0/max] to insertNodeAt, so that
        all insertions get it, not just some.
        Changed insertNodeAt to take in a position instead of a
        node and an offset.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::insertNodeAtTabSpanPosition):
        (WebCore::CompositeEditCommand::insertBlockPlaceholder):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        If paragrahStart.node() is an atomic node, insertNodeAt can handle
        insertion, we don't need to special case it.
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion): Removed some
        dead code that handled insertion at non-editable positions.
        (WebCore::InsertTextCommand::insertTab):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertNodeAtAndUpdateNodesInserted):
        * editing/ReplaceSelectionCommand.h:

2007-04-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13336
          REGRESSION (r20646): editing/execCommand/hilitecolor.html crashes under guardMalloc

        Avoid calling selectionRect() and selectionGapRects() on a renderer that needs
        layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRects):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::BlockSelectionInfo::BlockSelectionInfo):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRect):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::SelectionInfo::SelectionInfo):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect):

2007-04-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5142012> 
        GoogleDocs: Crash at WebCore::Range::startPosition() when creating a list from a link
        
        List creation uses moveParagraphs to push content into list items.
        Its fragment creation (using createMarkup) incorrectly uses regular
        spaces instead of nbsps for spaces that were rendered (11475), which 
        causes spaces to be collapsed during the move operation.  This results 
        in a call to rangeFromLocationAndLength with a location past the end
        of the document.  We use the result from rangeFromLocationAndLength
        (null) and crash.
        
        Also when moveParagraphs tries to push content into a list item surrounded
        by an anchor, it fails because positionAvoidingSpecialElementBoundary avoids 
        the anchor, which also avoids the list item.  This was fixed by pushing
        down anchors before avoiding them.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::pushAnchorElementDown): Remove the
        old anchor after we push down clones of it, this is what callers
        expect.
        (WebCore::CompositeEditCommand::pushPartiallySelectedAnchorElementsDown):
        Call the new enclosingAnchorElement, that takes in a position instead
        of a node.
        (WebCore::CompositeEditCommand::moveParagraphs): If spaces collapsed
        as a result of the move, rangeFromLocationAndLength can return null,
        bail and don't try to preserve the selection in that case.
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        Moved from htmlediting.cpp.
        Make sure anchors are pushed down before avoiding them so that we don't
        also avoid structural elements like lists and blocks.
        * editing/CompositeEditCommand.h:
        * editing/TypingCommand.cpp: Moved isFirst/LastPositionBefore/AfterTable
        to htmlediting.cpp.
        * editing/htmlediting.cpp:
        Moved positionAvoidingSpecialElementBoundary so that it could call
        pushAnchorElementDown.
        (WebCore::isFirstPositionAfterTable): Moved here.
        (WebCore::isLastPositionBeforeTable): Moved here.
        (WebCore::enclosingAnchorElement): Moved here.
        (WebCore::enclosingListChild): Removed an extraneous space.
        * editing/htmlediting.h:

2007-04-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5120889> Sized table cells w/borders not 
        drawn to correct size

        When table cells have children with %-height, the cells were 
        incorrectly shrinking down to be the size of the child. This 
        exposed another problem with replaced children and sizing.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedHeightUsing): The exposed problem. 
        Subtract our borders and padding in the auto or percent table cell 
        containing block case.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): When our children can 
        flex, do not always set the cellTopExtra and cellBottomExtra to 0! 
        That is bad! We should do the same as the non-flex case.

2007-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=13333
        Support naturalWidth/naturalHeight on image elements

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::naturalWidth):
        (WebCore::HTMLImageElement::naturalHeight):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:

2007-04-19  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.
        - review suggestion for rdar://5145011 code change
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        return early if value attribute is not supported by the attachment view.

2007-04-19  Patti Hoa  <patti@apple.com>

        Reviewed by Darin.

        <rdar://problem/5145011> Allow attachment view of web object to handle accessibility actions
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        Only allow asking the attachmentView for value if attachmentView supports this value attribute 
        (-[WebCoreAXObject title]):
        (-[WebCoreAXObject accessibilityAttributeNames]):
        Should not return that long list of unrelated attributes for attachmentView.
        (-[WebCoreAXObject accessibilityActionNames]):
        (-[WebCoreAXObject accessibilityPerformAction:]):
        Allow attachmentView a chance to handle actions.
        (-[WebCoreAXObject accessibilityParameterizedAttributeNames]):
        Should not return that long list of unrelated attributes for attachmentView.
        
2007-04-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13291
          REGRESSION (r19595): WebViewDidBeginEditingNotification not posted when focusing with the mouse

        Covered by editing tests.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Moved the call to Editor::didBeginEditing()
        back into here.
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance): Removed the call to didBeginEditing().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance): Ditto.

2007-04-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=12249
          FCKeditor: <hr>, <ul> and <ol> have id="undefined"

        Convert undefined and null to a null string for third argument of
        execCommand(); 

        Test: editing/execCommand/arguments-combinations.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        (KJS::valueToStringWithUndefinedOrNullCheck):
        * bindings/js/kjs_binding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.idl:

2007-04-19  Alp Toker  <alp@atoker.com>

        Reviewed by hyatt.

        * WebCoreSources.bkl: Remove obsolete source file from build.

2007-04-18  Alp Toker  <alp@atoker.com>

        Gdk build fix.  Reviewed by Sam Weinig.

        Track changes to make GdkLauncher work again.

        * WebCoreSources.bkl:
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::createWindow):
        (ChromeClientGdk::createModalDialog):
        (Editor::markBadGrammar):

2007-04-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim

        <rdar://problem/5008925>
        Expose the NSURLConnection delegate willCacheResponse API to WebResourceLoadDelegate

        * WebCore.xcodeproj/project.pbxproj: Added ResourceLoaderMac.mm

        * loader/FrameLoaderClient.h: Add the willCacheResponse SPI for WebKit to implement

        * loader/ResourceLoader.h:
        * loader/mac/ResourceLoaderMac.mm: Added.
        (WebCore::ResourceLoader::willCacheResponse): Return the new cachedResponse from the client

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::willCacheResponse): Stub

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponse):  Return the new cachedResponse from the client

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]): Call to get the new 
          cachedURLResponse before calling for the cache policy

2007-04-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13375
          REGRESSION (r20901): failing fast/overflow/scrollRevealButton.html

        * dom/Document.cpp: (WebCore::Document::updateLayout):
        If we have a parent frame, update its layout too.

2007-04-18  Alp Toker  <alp@atoker.com>

        Gdk build fix.  Reviewed by Mark.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::loadedFromCachedPage):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToCachedPage):
        * loader/gdk/FrameLoaderClientGdk.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (CachedPage::close): Track PageCache to CachedPage refactoring.

2007-04-17  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13369
          REGRESSION (r13366): Invisible table cell background is painted

        Test: fast/table/invisible-cell-background.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Don't paint any
        background if the cell is not visible. This behavior matches WinIE and Opera.

2007-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5119244> 
        Crash when indenting a selected ToDo
        
        indentRegion() was using the old (incorrect) editable root 
        getter, which returned null for a valid, editable position, 
        causing the crash.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion):
        The editable root for a position is editableRootForPosition(p),
        not p.node()->rootEditableElement(), because of VisiblePositions 
        before/after tables, replaced elements and others.

2007-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by hyatt

        <rdar://problem/5138441> 
        GoogleDocs: Indented text looks like text that's been Quoted
        
        GoogleDocs uses FormatBlock, blockquotes and a style rule
        for blockquotes to implement a "Quote Text" feature.  Styles
        intended only for those blockquotes were added to the 
        blockquotes that we use for indenting.

        * css/html4.css: Removed the webkit-indent-blockquote class rule.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::createIndentBlockquoteElement): Use custom margins
        and turn off border and padding to override author rules for
        blockquotes.

2007-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5136770> 
        Gmail Editor: Hang when turning a particular multi-line selection into a list
        
        When InsertListCommand pushes content into list items, 
        it creates an empty list item and then calls moveParagraphs.  
        But moveParagraphs' selection preservation code fails when 
        it encounters empty list items (list items w/o placeholders).
        This causes InsertListCommand to lose track of where it has 
        already been performed, which causes the hang.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use brs to hold open 
        empty list items.

2007-04-17  Darin Adler  <darin@apple.com>

        Oops, rolled that last change out. I'll redo it again later after making
        som additional refinments.

2007-04-17  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - a few baby steps to try to make lockHistory and userGesture less confusing

        * page/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest): Add initialization of m_isUserGesture
        to true.
        (WebCore::FrameLoadRequest::shouldLockHistory): Renamed from lockHistory to avoid having
        a getter that sounds like a verb phrase.
        (WebCore::FrameLoadRequest::setShouldLockHistory): Ditto.
        (WebCore::FrameLoadRequest::isUserGesture): Added.
        (WebCore::FrameLoadRequest::setIsUserGesture): Ditto.

        * loader/FrameLoader.h: Remove userGesture parameter from load that takes
        FrameLoadRequest. Remove default values for lockHistory and userGesture parameters,
        since that just makes it more likely we'll forget to pass them in. Remove one of
        the overloads of urlSelected, since it's only called one place.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): Remove userGesture parameter, relying on
        the true default in FrameLoadRequest.
        (WebCore::FrameLoader::urlSelected): Call setShouldLockHistory and setIsUserGesture
        on the FrameLoadRequest, and call load directly; also eliminate the other urlSelected
        overload since this was the only place it was called.
        (WebCore::FrameLoader::load): Remove userGesture parameter, relying on the true
        default in FrameLoadRequest. In the other overload, clean up logic to eliminate the
        argsReferrer variable and get rid of the userGesture parameter, using the value from
        FrameLoadRequest.
        (WebCore::FrameLoader::submitForm): Remove userGesture parameter, relying on the value
        in the FrameLoadRequest. This actually changes behavior.

        * bindings/js/kjs_html.cpp: (KJS::JSHTMLDocument::putValueProperty): Pass
        false for userGesture explicitly instead of relying on default argument.

        * page/ContextMenuController.cpp: (WebCore::ContextMenuController::contextMenuItemSelected):
        Remove userGesture parameter, relying on the true default in FrameLoadRequest.

2007-04-16  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (fixed misspelling).

        * manual-tests/containing-block-position-chage.html: Removed.
        * manual-tests/containing-block-position-change.html: Added.

2007-04-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5134759> 
        GMail Editor: Hang after pasting underlined text multiple times
        
        The moveParagraphs call that ReplaceSelectionCommand
        performs must receive only inline content from createMarkup, 
        or else it will result in another call to moveParagraphs 
        when it performs the move, resulting in infinite recursion.

        * editing/markup.cpp:
        (WebCore::startMarkup): We were only converting a block to
        an inline if it had an inline style declaration or styles 
        coming from matched rules.  Cleaned up this code a bit by 
        handling an element's style separately from its other 
        attributes.

2007-04-16  Darin Adler  <darin@apple.com>

        - get layout tests going again

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry):
        Replace assertion with a runtime check. We can consider changing it back to
        an assertion some day, but it's not important.

2007-04-16  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13303
          <rdar://problem/5126341> REGRESSION: controls in a background Safari window
          maintain active appearance if the address bar has focus (13303)

        - fix a related problem where elements could look focused in non-active windows

        - simplify secure keyboard entry logic in Frame::setIsActive

        * WebCore.exp: Add two new symbols for use by WebKit.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dispatchFocusEvent): Call setUseSecureKeyboardEntryWhenActive
        rather than calling setSecureKeyboardEntry directly -- does nothing if the frame is not active.
        (WebCore::HTMLInputElement::dispatchBlurEvent): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::setUseSecureKeyboardEntryWhenActive): Added. Calls
        setUseSecureKeyboardEntry only if the frame is active, but also stores away the state,
        so that the setIsActive function doesn't have to recompute it.
        (WebCore::Frame::setIsActive): Rewrote all the comments in the function. Removed the code
        to manage control tints, which are not based on the whether the frame is active but rather
        on AppKit's concept of whether the window should have "key appearance". Simplified the
        logic about when to call setUseSecureKeyboardEntry by using the value of
        m_useSecureKeyboardEntryWhenActive.
        (WebCore::FramePrivate::FramePrivate): Initialize m_useSecureKeyboardEntryWhenActive.
        * page/Frame.h: Made setSecureKeyboardEntry private and renamed it to
        setUseSecureKeyboardEntry, removed isSecureKeyboardEntry, and
        added a public setUseSecureKeyboardEntryWhenActive.
        * page/FramePrivate.h: Added m_useSecureKeyboardEntryWhenActive.
        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry): Added an assertion,
        and removed isSecureKeyboardEntry().

        * page/FrameView.h: Added updateControlTints.
        * page/FrameView.cpp: (WebCore::FrameView::updateControlTints): Added. Code was moved
        here from setIsActive for two reasons: (1) it makes more sense in the view class, and
        (2) it needs to be called at the appropriate time for AppKit, not when active changes.

        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isFocused): Added an isActive
        check here to match the logic in the implementation of the CSS pseudo-state.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateFocusedState): Use the isFocused function instead of
        repeating the logic here. Removed the "need to add a key window test here" comment.
        (WebCore::RenderThemeMac::controlSupportsTints): Added a comment about the NSCell
        SPI that's related to the _windowChangedKeyState method we now use in WebHTMLView.

2007-04-16  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13227
          StringImpl::isLower incorrectly assumes islower returns 1 (it can return any non-0)

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::isLower): Based on test application results, changed to use &&
        instead of trying to use & to avoid branches. Use U16_NEXT so we can handle characters
        outside the BMP. Improved comments.
        (WebCore::StringImpl::lower): Improved comments.
        (WebCore::equalIgnoringCase): Changed to use && instead of trying to use & to avoid
        branches. Improved comments. Added an assertion about the assumption we're
        making that characters in the char* are all ASCII.

2007-04-13  David Kilzer  <ddkilzer@webkit.org>

        Patch and review by hyatt.  Testing and landing by ddkilzer.

        <rdar://problem/5078866>
        tables don't inherit text-align (in strict mode; they're not supposed to in quirks mode)

        Test: fast/css/table-text-align-quirk.html
              fast/css/table-text-align-strict.html

        Previous commit (r20731) removed the wrong property from WebCore/css/html4.css.  However,
        when the correct property was removed, it caused tables to inherit alignment properties
        from tags like <center> and <div align="center">.  This is fixed in
        WebCore::CSSStyleSelector::adjustRenderStyle() by special-casing tables to reset the
        text-align property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForTextAlign): Renamed KHTML_CENTER, KHTML_LEFT and KHTML_RIGHT to
        WEBKIT_CENTER, WEBKIT_LEFT and WEBKIT_RIGHT.
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Tables should not support -webkit-center,
        -webkit-left or -webkit-right values for text-align, so reset them back to auto.
        * css/html4.css: Removed "text-align: -webkit-auto;" property from tables selector.  It
        was previously added to css/quirks.css in r20731.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineHorizontalPosition): Renamed KHTML_* to WEBKIT_*.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHorizontalMargins): Ditto.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::caretRect): Ditto.
        * rendering/RenderStyle.h: Ditto.
        (WebCore::):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Ditto.

2007-04-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Black Sheep

        <rdar://problem/4664154> and http://bugs.webkit.org/show_bug.cgi?id=3546

        When you click on a link that opens in a new window from within gmail, they first create a new window 
        with an empty URL, then immediately document.write() into the window to schedule a redirect.

        Since the initial page doesn't have a URL associated with it, a history item never gets created.  The 
        reasonable solution?  To actually create the history item after the redirect (in updateHistoryForInternalLoad)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addHistoryForCurrentLocation): Updates global and B/F history with a new history item
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Call addHistoryForCurrentLocation
        (WebCore::FrameLoader::updateHistoryForInternalLoad): Call addHistoryForCurrentLocation if there is not already
          a current history item
        * loader/FrameLoader.h:

2007-04-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        This fixes <rdar://problem/5060766> -- Frameset with 
        an empty frame crashes due to null document.  Debug
        builds hit the frame->document() assertion in 
        EventHandler::prepareMouseEvent

        This null check seems necessary now, having run through 
        all the logic on the path to this crash it appears that
        we can't avoid this null check.  

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

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

        Reviewed by darin
        
        <rdar://problem/5131716> 
        Clicking just before a ToDo doesn't put the caret before the ToDo
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForCoordinates):
        Consider clicks inside the blocks padding, instead of
        incorrectly sending them to the position before the block.

2007-04-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders

        - WebCore part of fix for:
        <rdar://problem/5128697> REGRESSION: At least one PDF context menu item isn't appearing on Leopard

        * platform/ContextMenuItem.h:
        (WebCore::):
        add two PDF-related context menu items to enum to keep it in sync with WebKit

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        add the new context menu items to the do-nothing case of a big switch statement

2007-04-12  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fixed drawing of justified text in the Qt port.

        * platform/qt/FontQt.cpp:
        (Font::drawGlyphs):

2007-04-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Adding RetainPtr to the many global obj-c pointers we use in
        C/C++ methods.  This is necessary to prevent GC from collecting
        globals we want to keep around.

        We use RetainPtr in obj-c++ and c++ files, and CFRetain/Release in pure
        obj-c.

        Also made the Pasteboard::m_pasteboard a RetainPtr although it
        shouldn't be necessary as the only NSPasteboard instances that 
        should ever be inserted are the system clipboard and dragging 
        pasteboard.  Neither of which should ever be collected.

        * page/mac/WebCoreFrameBridge.mm:
        (_getPreSmartSet):
        (_getPostSmartSet):
        * platform/Pasteboard.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        * platform/mac/FontDataMac.mm:
        (WebCore::webFallbackFontFamily):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForURL):
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2007-04-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11362
          Native popup with size="1" wraps options

        Test: fast/forms/menulist-option-wrap.html

        * css/html4.css: Added white-space declaration for select[size="0"] and
        select[size="1"]. Added border-radius declaration for select.

2007-04-11  Darin Fisher  <darin@chromium.org>

        Reviewed by Maciej.

        Add a Frame pointer to ChromeClient methods:
        http://bugs.webkit.org/show_bug.cgi?id=13127

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        (WebCore::Chrome::createModalDialog):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::createWindow):
        (WebCore::SVGEmptyChromeClient::createModalDialog):

2007-04-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada

        <rdar://problem/5080987> - Crash in DocumentLoader::frameLoader() const

        This was free nil checking lost during the ObjC -> C++ conversion

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Null check the DocumentLoader

2007-04-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5126166> 
        Deleting selection starting at before ToDo checkbox to end of line, inserts a BR in the subsequent ToDo
        
        If a selection ends in a table cell, we shouldn't perform
        a merge after deleting that selection.  We have code in
        place to prevent those merges, but it failed here.
        
        It fails because the end of the selection was [tableCell, 0],
        (normally not a valid VisiblePosition, but valid here
        because the table cell is empty).  We prevent the merge
        if the node of the position at the end of the selection 
        has an enclosingTableCell.  Even though [tableCell, 0] has 
        an enclosing table cell, the node tableCell doesn't, so 
        the check fails.
        
        Fixed this by changing enclosingTableCell to take in
        a position, instead of a node.  The other enclosing element
        getters should be changed in this way as well.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        Call the new enclosingTableCell.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMerge): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::enclosingTableCell): Take in a position instead
        of a node.
        * editing/htmlediting.h:

2007-04-12  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * WebCore.pro:
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::markBadGrammar):
        * history/qt/CachedPageQt.cpp: Added.
        (WebCore::CachedPage::close):
        * history/qt/PageCacheQt.cpp: Removed.

2007-04-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti

        <rdar://problem/5125648> and http://bugs.webkit.org/show_bug.cgi?id=13326

        Crash opening a link in a new window from Gmail

        Problem here is that the currentHistoryItem in the new window is null.  This *shouldn't* be the case, 
        and is the cause of a very long standing bug - 
        http://bugs.webkit.org/show_bug.cgi?id=3546 - Can't go back to first page in new window opened from gmail

        For now, adding a null check prevents this crash and restores the original, long standing regression
 
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForInternalLoad): NULL check

2007-04-11  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Made image document copying more cross-platform.

        All layout tests pass.

        * editing/Editor.cpp:
        (WebCore::imageNodeFromImageDocument): Added.
        (WebCore::Editor::canCopy): Called imageNodeFromImageDocument.
        (WebCore::Editor::copy): Ditto.
        (WebCore::Editor::copyImage): Updated for changes to Pasteboard.
        * platform/Pasteboard.h: Made writeImage more general, which allowed
        getting rid of its second incarnation.
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Collapsed logic from the two
        writeImage methods into one.
        (Pasteboard::writeImage): Updated for Pasteboard changes.
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage): Ditto.

2007-04-11  Darin Adler  <darin@apple.com>

        * css/CSSValueKeywords.in: Fix a comment.

2007-04-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4932260> 
        Invalid attributed string for attachment range obtained via AXPreviousWordStartTextMarkerForTextMarker
        
        By default, text iterators don't emit anything for replaced 
        elements.  Boundary finding code works around this but has 
        bugs: replaced elements act as sentence boundaries and the 
        above bug, where previousBoundary moves past the start of a 
        word if there is a replaced element just before it. This 
        patch fixes these issues by treating replaced elements as 
        punctuation for boundary finding.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Set m_pastStartNode, the node after (in a reverse pre-order traversal) the 
        last one that should be processed.
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        Stop at m_pastStartNode.
        Iterate over nodes in reverse pre-order (TextIterator traverses in 
        pre-orer). This makes knowing when to emit characters after nodes vs. when
        to emit characters before nodes easier.
        Remove the special case for entering a new block, emitting characters 
        after nodes can now be handled generally, in handleNonTextNode(), because
        of the way we traverse.
        Set m_handledChildren to false every iteration since we now do traverse in 
        reverse pre-order.
        (WebCore::SimplifiedBackwardsTextIterator::handleReplacedElement):
        Emit a comma for replaced elements.  We only use this kind of iterator 
        for finding boundaries, so we can do this unconditionally.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        Don't use emitNewline, instead specify where the newline should be positioned.
        A node is handled before its children, so characters emitted here should 
        be positioned after the node, not before it.
        (WebCore::SimplifiedBackwardsTextIterator::exitNode): 
        Don't use emitNewline, instead specify where the newline should be positioned.
        (WebCore::CharacterIterator::CharacterIterator): 
        Create a TextIterator that emits content for replaced elements, if requested.
        * editing/TextIterator.h:
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): 
        Removed replaced element handling code.
        If the start of the chunk that contained the boundary was in a non-text
        node, then the boundary is not necessarily in that node.  Particularly
        because it is only the end of the chunk that is guaranteed to be a valid
        position in those cases.  We must iterate backwards by character from 
        the end of the chunk to find the boundary.
        (WebCore::nextBoundary): Removed replaced element handling code.

2007-04-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/4887095> - PageCache and PageState should be combined

        These two objects are a relic of when the PageCache was split between WebCore and WebKit
        It just makes good sense to combine them now, and the new object is more appropriately
        called "CachedPage"

        This patch is vast in scope, but simple in depth - anywhere a PageCache or PageState object 
        was used has been adjusted to use a CachedPage object instead.  The most notable change is
        that HistoryItem - which always used to have a PageCache object which may or may not have 
        had a PageState - now may or may not have a CachedPage.  This actually simplifies the 
        HistoryItem code a bit while making the role of CachedPage much more clear.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem):
        (WebCore::BackForwardList::setCapacity):
        (WebCore::BackForwardList::setPageCacheSize):
        (WebCore::BackForwardList::clearPageCache):
        (WebCore::BackForwardList::close):

        * history/PageCache.cpp: Removed.
        * history/PageCache.h: Removed.
        * page/PageState.cpp: Removed.
        * page/PageState.h: Removed.
        * history/CachedPage.cpp: Added.
        (WebCore::CachedPage::create):
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::~CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        (WebCore::CachedPage::setDocumentLoader):
        (WebCore::CachedPage::documentLoader):
        (WebCore::CachedPage::setTimeStamp):
        (WebCore::CachedPage::setTimeStampToNow):
        (WebCore::CachedPage::timeStamp):
        * history/CachedPage.h: Added.
        (WebCore::CachedPage::document):
        (WebCore::CachedPage::mousePressNode):
        (WebCore::CachedPage::URL):

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::setCachedPage):
        (WebCore::HistoryItem::setURL):
        (WebCore::HistoryItem::alwaysAttemptToUseCachedPage):
        (WebCore::HistoryItem::setAlwaysAttemptToUseCachedPage):
        (WebCore::HistoryItem::cachedPage):
        (WebCore::cachedPagesPendingRelease):
        (WebCore::HistoryItem::releaseCachedPagesOrReschedule):
        (WebCore::HistoryItem::releaseAllPendingCachedPages):
        (WebCore::HistoryItem::scheduleCachedPageForRelease):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:

        * history/HistoryItemTimer.cpp:
        (WebCore::HistoryItemTimer::HistoryItemTimer):
        (WebCore::HistoryItemTimer::callReleaseCachedPagesOrReschedule):
        * history/HistoryItemTimer.h:

        * history/mac/PageCacheMac.mm: Removed.
        * history/mac/CachedPageMac.mm: Added.
        (WebCore::CachedPage::close):
        (WebCore::CachedPage::setDocumentView):
        (WebCore::CachedPage::documentView):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::loadFromCachedPage):
        (WebCore::DocumentLoader::setLoadingFromCachedPage):
        (WebCore::DocumentLoader::isLoadingFromCachedPage):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::cachePageToHistoryItem):
        (WebCore::FrameLoader::createHistoryItem):
        (WebCore::FrameLoader::purgePageCache):
        (WebCore::FrameLoader::invalidateCurrentItemCachedPage):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        (WebCore::FrameLoader::updateHistoryForClientRedirect):
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation):
        (WebCore::FrameLoader::updateHistoryForReload):
        (WebCore::FrameLoader::updateHistoryForInternalLoad):
        (WebCore::FrameLoader::updateHistoryForCommit):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

        * page/mac/WebCoreFrameBridge.h: Got rid of unused WebCorePageCacheStateKey
        * page/mac/WebCoreFrameBridge.mm: Ditto

        * platform/graphics/svg/SVGImage.cpp:
        * platform/graphics/svg/SVGImageEmptyClients.h: Update to reflect the new names
        (WebCore::SVGEmptyFrameLoaderClient::loadProvisionalItemFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::invalidateCurrentItemCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::loadedFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::clearLoadingFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::isLoadingFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::setDocumentViewFromCachedPage):
        (WebCore::SVGEmptyFrameLoaderClient::saveDocumentViewToCachedPage):

2007-04-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://5057686> 
        Flex box layout example hangs in WebCore::RenderFlexibleBox::allowedChildFlex
        
        Forcibly distribute remaining pixels if the algorithm is not advancing.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2007-04-11  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):

2007-04-10  Patti Hoa <patti@apple.com>

        Reviewed by Justin Garcia.

        <rdar://problem/5122276> Allow focused frame to fire off notification
        Improve accessibility support for Mail WebView embedded Notes.

        * bridge/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postNotification):
        The focused document with the selection change should fire the selection changed notification, not the top level document
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityDescription]):
        Allow the name attribute of the html body to be used as the accessibility description

2007-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Support for fixing fast/forms/textarea-paste-newline.html.
        
        Changed clients to use new preference specifying whether a Page should 
        allow pasting through the DOM API, instead of a global flag.

        Removed old behavior of always allowing DOM paste in debug builds. In 
        light of the new preference-based API, that behavior makes no sense anymore. 
        Instead, developers who want to test paste inside Safari can set the 
        preference for themselves.

        * WebCore.exp:
        * editing/CommandByName.cpp: Removed crazy hack to keep an identically 
        named but invalid copy of the global "pate allowed" flag in this file.
        (WebCore::Frame::enabledPaste):
        * editing/JSEditor.cpp: Removed "always allow" behavior for debug builds.
        (WebCore::JSEditor::queryCommandSupported):
        * editing/JSEditor.h:
        * page/Settings.cpp:
        (WebCore::Settings::setDOMPasteAllowed):
        * page/Settings.h:
        (WebCore::Settings::isDOMPasteAllowed):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation): Removed crazy hack to allow DOM paste
        after this function has been called.

2007-04-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher

        - fixed <rdar://problem/4859132> Grammar must always be checked in entire-sentence chunks, 
          and shouldn't show markers for current sentence

        * editing/Editor.h:
        add markBadGrammar, now distinct from markMisspellings

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        call markMisspellings on one word, and markBadGrammar on entire sentence
        (WebCore::markMisspellingsOrBadGrammar):
        new static function, extracted from markMisspellings
        (WebCore::Editor::markMisspellings):
        now calls extracted function
        (WebCore::Editor::markBadGrammar):
        new method, calls extracted function

        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):
        update grammar markers for entire new and old sentences

2007-04-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        * WebCore.exp:
        Add __ZNK7WebCore11FrameLoader10isCompleteEv.
        
2007-04-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fixes <rdar://4921797> and http://bugs.webkit.org/show_bug.cgi?id=12005

        The original regression was to claim that more loads were the result of a "user gesture" than really
        were.  A lot of the ways a frame load could be kicked off didn't properly set up this flag, and it 
        wasn't properly propagated and respected where it should've been.

        This patch cleans much of that up.  One loose end is the "treatAsUserGesture" flag which is a stop
        gap measure to keep "slow redirects" working to create a new history item.  In the future, we need
        to cleanup the meaning and use of "userGesture" and "lockHistory."  This includes integrating them 
        in to FrameLoadRequest and being very clear of what their meaning actually is at different stages of
        the Frame load process.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Pass only the delay for the redirect

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Pass "lockHistory" false, "userGesture" true

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Pass "lockHistory" false, "userGesture" true

        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection): Figure "lockHistory" and "userGesture" from the 
          delay here, instead of at 3 other different sites that call this method
        (WebCore::FrameLoader::changeLocation): Set userGesture correctly
        (WebCore::FrameLoader::urlSelected): Propagate userGesture down
        (WebCore::FrameLoader::requestFrame): 
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::scheduleRedirection): Pass only the delay here
        (WebCore::FrameLoader::redirectionTimerFired): Set userGesture correctly
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::updateHistoryForInternalLoad): Insteading of asserting we aren't a redirect,
          handle the case where we *are* a redirect by updating the previous history item
        * loader/FrameLoader.h:

2007-04-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5120801> 
        http://bugs.webkit.org/show_bug.cgi?id=13247
        Closing a page during slow cloning causes crash in setJSStatusBarText (13247)

        * bindings/js/kjs_window.cpp:
        (KJS::Window::put):
        Return early if m_frame is null. A closed window only has one property, "closed" 
        so no properties should be settable in that case.

2007-04-09  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Justin Garcia.
        
        Fix for http://bugs.webkit.org/show_bug.cgi?id=12959
        "REGRESSION: Edit -> Copy not enabled on standalone images"

        * dom/Document.h: Add support for determining if a document is an image
        (WebCore::Document::isImageDocument):
        * editing/Editor.cpp:
        (WebCore::Editor::canCopy): Image documents are copyable
        (WebCore::Editor::copy): If copying an image document, call appropriate pasteboard methods
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::isImageDocument): Override to return true for image documents
        * platform/Pasteboard.h: Add new writeImage function to pasteboard
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Add writeImage implementation that takes Node and URL
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage): Stub for Qt implementation of pasteboard

2007-04-08  Oliver Hunt  <oliver@apple.com>

        rs=Adam.

        Add ASSERT(selectedRange) to previous change

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2007-04-08  Oliver Hunt  <oliver@apple.com>

        rs=Adam.

        Fix minor error when writing selection to pasteboard.
        This shouldn't have an effect as selectedRange should be the
        selected range from source frame, however this is safer.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2007-04-08  David Hyatt  <hyatt@apple.com>

        Fix mouseover/out failing layout tests.

        Reviewed by aroben

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/EventHandler.h:

2007-04-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5113621> REGRESSION: Dragging PDF as image does not give any feedback

        If we fail when attempting to create a drag image for a dragged
        image, we fall back to the appropriate icon.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):

2007-04-08  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Bestowed the gift of -webkit-dashboard-region upon all platforms, since
        there's nothing Mac-specific about it other than the name. This also
        allowed me to get rid of FrameViewMac.mm.

        Removed a lot of #if PLATFORM(MAC):

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getDashboardRegionValue):
        (WebCore::CSSPrimitiveValue::):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDashboardRegions):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::paint):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateDashboardRegions): Moved from FrameViewMac.mm.
        * page/FrameView.h:
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::dashboardRegionsChanged): Stubbed out.
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::dashboardRegionsChanged): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):

        * WebCore.xcodeproj/project.pbxproj: Removed FrameViewMac.mm.
        * bridge/mac/FrameViewMac.mm: Removed.

2007-04-08  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/qt/TemporaryLinkStubs.cpp:

2007-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed one more case of <rdar://problem/5112273> REGRESSION(TOT): 
        Reproducible crash loading an old version of amazon.com as a web archive

        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):

2007-04-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix MouseEvent so it's possible to distinguish between
        a MouseMouseEvent with NoButton down, and a move with
        LeftButton down.  It would be nice if the DOM allowed 
        for NoButton to exist, but it doesn't so this is necessary.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::noButton):

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/MouseEventGdk.cpp:

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_op: Variable "info_ptr" tracked as NULL was dereferenced."

        * platform/image-decoders/png/pngrutil.c:
        (png_handle_gAMA):

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "(this)->clientptr" tracked as NULL was passed to a function that dereferences it."

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2007-04-06  David Hyatt  <hyatt@apple.com>

        Fix more of the layout test failures caused by fixing the slider layout test failure (sigh).  clear()
        needs to null out the capturingMouseEventsNode in the case where a mousedown or move while captured
        causes a navigation to another page.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2007-04-06  David Hyatt  <hyatt@apple.com>

        Fix failing slider layout test.  Don't clear the subframe capture unless we really were capturing on a
        subframe.

        Reviewed by adele, darin

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

2007-04-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff and Darin.

        Fix for <rdar://problem/4875433> WebView underlines are too thick 
        when scaled small

        When we have a small scale factor, we should follow the line-
        drawing code as if we were printing. Meaning, specifically, that we 
        should not round to device pixels and we should antialias.

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

2007-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/5112273> REGRESSION(TOT): Reproducible crash loading 
        an old version of amazon.com as a web archive
        
        The problem was JavaScript executing inside a frame with a NULL document.
        It's probably a bug that the document was NULL, but we don't want a minor
        bug to be a crasher, and we don't want the DOM to depend on the implementation
        details of the JS bindings, so I added NULL checks.

        * bindings/js/kjs_window.cpp: Call FrameLoader::completeURL instead of
        Document::completeURL, since FrameLoader::completeURL is safe against a
        NULL document.
        (KJS::Window::put):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Location::put):
        (KJS::LocationFunc::callAsFunction):

2007-04-06  David Hyatt  <hyatt@apple.com>

        Fix for bug 13274.  Rework mouse events so that subframe capturing works again.  Make sure
        everything just comes down through the top FrameView even when capturing is in effect.  Update
        scrollbar handling logic so that scrollbars receive events correctly while capturing is in
        effect.  Eliminate the notion of widget capture.  Fix mouse moves so that they only fire
        on the innermost hit frame.

        Reviewed by olliej

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::subframeForTargetNode):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::scrollbarCapturingMouse):
        (WebCore::PopupMenu::setScrollbarCapturingMouse):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::handleMouseReleaseEvent):
        * platform/Widget.h:
        (WebCore::Widget::geometryChanged):

2007-04-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5115601> 
        REGRESSION: Crash deleting a selection that starts in an editable table cell
        
        The selection starts at the start of an editable 
        root that's embedded in a non-editable ToDo (table).  
        Removing the selection removes all editable 
        VisiblePositions from the root.  Then, the creation 
        of mergeDestination fails, and using it causes a crash.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        Nil-check mergeDestination to avoid crashing and
        also insert a break in that case at m_upstreamStart, 
        so that we can create a valid mergeDestination and
        perform the merge.
        
        
2007-04-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver.

        Eliminate PlatformMouseEvent::currentEvent.

        No test possible (no change to functionality).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        * platform/PlatformMouseEvent.h:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        * platform/win/TemporaryLinkStubs.cpp:

2007-04-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for rdar://problem/4849948 -- JSCanvasRenderingContext2D::drawImage
        crashes when given invalid arguments.

        JSCanvasRenderingContext2D frequently casts from JSValue* to JSObject*
        and then checks isObject *after* the cast.  JSObject::isObject is unsafe 
        if applied to a JSImmediate value (null, undefined, etc).  This patch 
        corrects the logic in a number of places by performing the isObject check
        before casting to JSObject.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::createPattern):

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://problem/4965597> REGRESSION: mouseup doesn't fire for slider (causes it to always default to max)

        Test: fast/forms/slider-mouse-events.html

        * page/EventHandler.cpp: (WebCore::EventHandler::dispatchMouseEvent):
        Since the actual target node of the event can't be a shadow node, set the target node to the capturing node before adjusting it.

2007-04-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Added reportLocalLoadFailed to FrameLoader to send an error to the console when
        calls to canLoad fail. 

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reportLocalLoadFailed):
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Add text-align: -webkit-auto for form controls.  Buttons already override this property to center their text.

        * css/html4.css:

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by rwlbuis.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "page" tracked as NULL was passed to a function that dereferences it."

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "unicode" tracked as NULL was passed to a 
        function that dereferences it."

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

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5113593> REGRESSION: Search fields in RSS pages don't show ibeam cursor

        * css/html4.css: Set the cursor values explicitly for input, textarea (to auto), & select (to default).

2007-04-05  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5078866> tables should only reset text-align
        in quirks mode.

        Reviewed by beth

        * css/html4.css:
        * css/quirks.css:

2007-04-05  Adele Peterson  <adele@apple.com>

        Fixing typo that's crashing.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
          Use evt instead of null variable k.

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5021500> Cursor should stay as pointer when slider is being dragged

        Don't set the selection ibeam cursor when there's a node that's capturing mouse events.

        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        (WebCore::EventHandler::handleMouseMoveEvent):

2007-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        More clean-up while fixing <rdar://problem/5112273> REGRESSION(TOT): 
        Reproducible crash loading an old version of amazon.com as a web archive
        
        Layout tests pass.
        
        Removed more superfluous document NULL checks. (Node::document() never 
        returns NULL, and it asserts as much.)
        
        Merged some duplicate editing code into a static inline function.
        
        * page/mac/WebCoreFrameBridge.mm:
        (updateRenderingForBindings): Removed superfluous static_cast.

2007-04-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        A little cleanup from my last checkin.  Always check if an Event is really a MouseEvent or a KeyboardEvent
        before casting it.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp: (WebCore::SVGAElement::defaultEventHandler):
        * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent):
        * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::userResize):
        * rendering/RenderSlider.cpp: (WebCore::HTMLSliderThumbElement::defaultEventHandler):

2007-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Some clean-up while fixing <rdar://problem/5112273> REGRESSION(TOT): 
        Reproducible crash loading an old version of amazon.com as a web archive
        
        Removed superfluous document NULL checks. (Node::document() never returns
        NULL, and it asserts as much.)
        
        Removed duplicate implementation of displayString.
        
        Layout tests pass.

        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::supportsFocus):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createNPObject):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * rendering/HitTestResult.cpp:
        (WebCore::displayString):
        * rendering/HitTestResult.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState):

=== Safari-5522.6 ===

2007-04-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix rdar://problem/5030934 -- landscape PDFs embedded as an image are cut off
        also fixes scaling of pdf images

        PDFDocumentImage was not accounting for page rotation in a number of places

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size):
          we need to account for rotation of the pdf image effecting our bounds
        (WebCore::PDFDocumentImage::draw):
          When compensating for flipped coords we need to use the correct rect for the 
          coordinate space.  We can't pass size() to CGContextDrawPDFDocument as it
          returns the rotated bounds now -- this is also save the old 
          FloatSize -> IntSize -> FloatSize conversions.
          
2007-04-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13278
        REGRESSION: cannot change SELECT option

        Test: fast/forms/option-change-single-selected.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): If multiple selection is not allowed, 
        be sure to deselect the previous option.

2007-04-04  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Fix for <rdar://5105009> Prepare for fix to send mousedown and mouseup (but not click) events when right-clicking

        * page/EventHandler.cpp: Don't ever send click events for right-clicks.
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        
        Check that the mousedown and mouseup are not with the right button before performing default behavior.
        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.cpp:(WebCore::SVGAElement::defaultEventHandler):
        * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::userResize):
        * rendering/RenderSlider.cpp: (WebCore::HTMLSliderThumbElement::defaultEventHandler):

2007-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5026848> Can cut/delete ToDo subunits
        
        We were removing non-editable content during a delete.

        * editing/DeleteSelectionCommand.cpp: 
        (WebCore::DeleteSelectionCommand::initializePositionData): 
        Set m_startRoot and m_endRoot.
        (WebCore::DeleteSelectionCommand::removeNode): If a node
        is not inside both the start and end roots, remove it only
        if it is in editable content.
        * editing/DeleteSelectionCommand.h: Added m_startRoot and 
        m_endRoot, the editable roots that contain the start and end
        of the selection, respectively.  We consult these every
        time we remove a node, and don't want to recompute them 
        on every call to removeNode().

2007-04-03  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5108896>, make sure the assert for setEncodedSize
        deals with the error case.

        Reviewed by andersca

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

2007-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dave Hyatt.

        * loader/ImageDocument.cpp:
        Don't call error() in stopParsing.

2007-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5107422> 
        TOT REGRESSION: Delete key fails to delete text, and cursor disappears in Mail.app
        <rdar://problem/5107413> 
        TOT REGRESSION: Crash deleting text in email (infinite recursion in shouldInsertNode)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        Back out the call to shouldInsert until we
        add WebViewInsertActionMoved, because Mail returns
        NO from shouldInsert for WebViewInsertActionPasted
        to override our Paste operation.

2007-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Make window.innerWidth/innerHeight include the size of any present scrollbar to match Firefox.
        
        Make document.body.clientWidth/clientHeight return the width/height of the visible content when in
        quirks mode to match WinIE.
        
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        Return the width and height of the scroll view, not the visible width and height.
        
        * dom/Element.cpp:
        (WebCore::Element::clientWidth):        
        (WebCore::Element::clientHeight):
        Return the visible size if the element is the body element and we're in quirks mode.

2007-04-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Updated fix for <rdar://problem/5107095> REGRESSION: disabled text color calculations are slowing down launchtime measurements

        * platform/graphics/Color.cpp: Moved optimization for lightening black and darkening white into the Color class.
        (WebCore::Color::light):
        (WebCore::Color::dark):
        * rendering/RenderTextControl.cpp: (WebCore::disabledTextColor): Skip the difference calculation for black text, which will always be lightened.

2007-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Tim.

        <rdar://problem/4649516> 
        Turn off slow script dialog or crank up time that makes it come up
        
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        Increase the timeout to 10 seconds to match Firefox.

2007-04-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13251
          editing/style/fontsize-1.html fails intermittently when run multiple times on Intel, generates incorrect DOM

        Covered by existing editing tests.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getFloatValue): Added ASSERTs that the requested conversion
        is from a scalar type to a scalar type. The intermittent failures in the test were
        the result of trying to convert an identifier type to a scalar type.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::checkForLegacyHTMLStyleChange): Added a check that the
        font-size property value is an absolute length. If it is not (such as in the case
        of relative units or keywords like "x-large"), then no corresponding 'size' attribute
        will be generated for legacy HTML.

2007-04-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13218
          <rdar://problem/5095977>
          Reproducible crash after call to window.close()

        * manual-tests/stale-currentEvent.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hoverTimerFired): Instead of faking a mouse event,
        just hit-test the last mouse event coordinates and update for hover state
        changes. This eliminates the use of currentEvent, which can be a non-mouse
        event or even a stale event.

2007-04-02  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5107095> REGRESSION: disabled text color calculations are slowing down launchtime measurements

        Hardcode disabled text colors for the most common cases- black and white.

        * rendering/RenderTextControl.cpp: (WebCore::disabledTextColor):

2007-04-02  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5105784>, assertion failure in cache.  Encoded sizes were being set to
        garbage by accident because of a mismatch between derived class and base class constructors.  This
        patch cleans all of this up and gets rid of expiration date as a concept separate from the response.

        Reviewed by anders

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::finish):
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::CachedXBLDocument):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::requestResource):
        * loader/DocLoader.h:

2007-04-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Render tree memory savings, part 3
        
        These changes shrink all RenderBlocks by additional 28 bytes. Together with parts 1 and 2
        RenderBlock goes from 172 bytes to 128 bytes, a saving of 26%.
        
        - Pack bitfields together in RenderFlow
        - Move top/bottom min/max margin values to a struct that is only allocated in case these
          variables have non default values. Usually this is <5% of all blocks. 
        - Move rarely used column variables to hash

        * rendering/RenderBlock.cpp:
        (WebCore::ColumnInfo::ColumnInfo):
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        (WebCore::RenderBlock::desiredColumnWidth):
        (WebCore::RenderBlock::desiredColumnCount):
        (WebCore::RenderBlock::columnRects):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::setMaxTopMargins):
        (WebCore::RenderBlock::setMaxBottomMargins):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::maxTopMargin):
        (WebCore::RenderBlock::maxBottomMargin):
        (WebCore::RenderBlock::maxTopPosMargin):
        (WebCore::RenderBlock::maxTopNegMargin):
        (WebCore::RenderBlock::maxBottomPosMargin):
        (WebCore::RenderBlock::maxBottomNegMargin):
        (WebCore::RenderBlock::initMaxMarginValues):
        (WebCore::RenderBlock::MaxMargin::MaxMargin):
        (WebCore::RenderBlock::MaxMargin::topPosDefault):
        (WebCore::RenderBlock::MaxMargin::topNegDefault):
        (WebCore::RenderBlock::MaxMargin::bottomPosDefault):
        (WebCore::RenderBlock::MaxMargin::bottomNegDefault):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::RenderFlow):
        (WebCore::RenderFlow::hasColumns):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        * rendering/RenderInline.h:

2007-04-03  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix asserts, these may also be called for rel positioned elements

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStaticX):
        (WebCore::RenderBox::setStaticY):

2007-04-02  David Hyatt  <hyatt@apple.com>

        Throw in an assert to try to track down a problem where an image is being set to a smaller encoded
        size.

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

2007-04-02  Ada Chan  <adachan@apple.com>

        Reviewed by Adele.

        <rdar://5105331> Missing null check in Editor::execCommand
        Added null check.

        * editing/Editor.cpp:
        (WebCore::Editor::execCommand):

2007-04-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5058163> 
        Hitting return inserts a new line between two To Dos, but caret is position after second ToDo

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        Removed refPos, it was unused.
        Don't assume that upstream() moves to a different
        node.  This assumption caused the line break to
        be inserted *after* the caret and a bad position
        to be set (added a testcase).
        Use isStartOfParagraph instead of checking
        for the existence of a br because the line might 
        be broken by a newline character in text that 
        preserves newlines.  Paragraphs that are created 
        in other ways, like with blocks, are handled 
        above (added a testcase).

 2007-04-02  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4906488> text attributes are not working for frame based web page

        Attribute handling now treats each WebArea as its own world, rather than sometimes
        referring back up to the top WebArea. e.g. getting/setting the selection now
        operates on the WebArea containing the WebCoreAXObject that is being messaged (self).
        The methods that sit above this and are able to go into arbitrary WebAreas
        are accessibilityFocusedUIElement and doAXTextMarkerForPosition, allowing VoiceOver
        to navigate between frames.
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject topRenderer]):
        (-[WebCoreAXObject frameView]):
        (-[WebCoreAXObject topFrameView]):
        Removed topDocument, renamed topView to topFrameView, added frameView.
        
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        AXSelectedTextMarkerRange, AXStartTextMarker, and AXEndTextMarker now use
        self's WebArea, rather than the top WebArea.
        
        (-[WebCoreAXObject doAXTextMarkerRangeForLine:]):
        Use self's WebArea, rather than the top WebArea.

        (-[WebCoreAXObject doAXTextMarkerForPosition:]):
        Use renamed methods for accessing top WebArea.
         
        (-[WebCoreAXObject doAXBoundsForTextMarkerRange:]):
        Use renamed methods for accessing self's WebArea.

        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetFont):
        (AXAttributeStringSetStyle):
        (AXAttributeStringSetElement):
        (-[WebCoreAXObject rendererForView:]):
        Clean up uses of nil and NULL.
        
        (-[WebCoreAXObject accessibilityFocusedUIElement]):
        Find the focused node on the whole page. If there is no focused node,
        return the WebArea for the focused document.
        
        (-[WebCoreAXObject doSetAXSelectedTextMarkerRange:]):
        Use self's WebArea, rather than the top WebArea.

2007-04-02  Antti Koivisto  <antti@apple.com>

        Fix build. This one was not supposed to be checked in.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):

2007-03-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Render tree memory savings, part 2
        
        - Move staticX and staticY variables to RenderLayer since they are only
          applicable to positioned objects
        - Move very rarely used overrideSize variable to hash
        
        These changes shrink all box types by 12 bytes

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::overrideSize):
        (WebCore::RenderBox::setOverrideSize):
        (WebCore::RenderBox::overrideWidth):
        (WebCore::RenderBox::overrideHeight):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::staticX):
        (WebCore::RenderBox::staticY):
        (WebCore::RenderBox::setStaticX):
        (WebCore::RenderBox::setStaticY):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::staticX):
        (WebCore::RenderLayer::staticY):
        (WebCore::RenderLayer::setStaticX):
        (WebCore::RenderLayer::setStaticY):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::):
        (WebCore::RenderObject::hasOverrideSize):
        (WebCore::RenderObject::setHasOverrideSize):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2007-03-31  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Font::selectionRectForComplexText):
        (Font::drawComplexText):

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12778
        REGRESSION: Nightly won't load Curl plugin for full page use

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Re-order cases to give more priority to plugins.
        This also fixes Adobe SVG Viewer and any plugins that register XML MIME types.
        Added a case for XHTML to avoid enumerating plugins.

2007-03-31  David Hyatt  <hyatt@apple.com>

        Fix for bug 13234, layout of selected justified text is broken.  Rework TextRuns to avoid having
        from/to members.  Let those be passed in only by the functions that need them (drawing and selection rect).

        Reviewed by mitz

        fast/text/justified-selection-at-edge.html

        * platform/Font.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advance):
        (WebCore::Font::canUseGlyphCache):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/Font.h:
        (WebCore::TextRun::m_len):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/mac/FontMac.mm:
        (WebCore::addDirectionalOverride):
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        * platform/qt/TemporaryLinkStubs.cpp:
        (Font::selectionRectForComplexText):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcMinMaxWidth):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::width):

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13243
              <rdar://problem/5103226>
          REGRESSION (r20506): Repro crash/assert when using scroll wheel on a list box taller than its contents

        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::setValue): Cleaned up a little.
        (WebCore::Scrollbar::scroll): Changed to apply the minimum and maximum constraints
        in the right order, and cleaned up a little.

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13242
          REGRESSION: Repro crash when specifying the content property for an image

        Test: fast/images/text-content-crash.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Added a check that the
        renderer is an image.
        (WebCore::HTMLImageElement::attach): Ditto.

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

        Reviewed by Darin.

        A more correct fix for http://bugs.webkit.org/show_bug.cgi?id=13129
        Bug 13129: Democracy Player dies in NSException from WebScriptObject on startup

        The previous attempt at a fix in r20343 attempted to conditionally expose the 'count'
        method.  It did not work which resulted in 'count' always being hidden.  This change
        disables -[WebScriptObject count] completely until it can be determined whether it is
        needed and how to support it without breaking third-party applications.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject count]):
        * bindings/objc/WebScriptObjectPrivate.h:

2007-03-31  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=13184
        HTMLImageElement longdesc should be complete resolved URL

        Test: fast/dom/HTMLImageElement/image-longdesc-absolute-url.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::longDesc): Return absolute URL.
        Behaviour now matches Firefox and Opera.

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13209
          REGRESSION (r18756-18765): Incomplete list marker repaint when resizing list item

        Test: fast/repaint/list-marker-2.html

        A list marker can increase the horizontal overflow after layoutInlineChildren(),
        so made that function return only the vertical bounds of the repaint rect. As the
        horizontal bounds, made layoutBlock() just use the overflow bounds after layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13178
          Helvetica zero-width space has non-zero width

        Test: fast/text/wide-zero-width-space.html

        * platform/FontData.cpp:
        (WebCore::FontData::FontData): Force the ZERO WIDTH SPACE glyph to have width
        0, unless the SPACE character maps to the same glyph.

2007-03-31  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8016
          REPRO: Safari hangs loading 18 MB page (deeply nested DOM tree)

        Test: fast/tokenizer/lessthan-terminates-tags-and-attrs.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Made "<" terminate tag and attribute
        names. This matches Firefox.

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

        Debug build fix.

        * xml/XPathValue.cpp:
        (WebCore::XPath::): Define Value::adopt.

2007-03-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13021
        XPath can be very slow

        This patch finally makes us faster than Firefox 2.0 on this test case.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunConcat::evaluate): Use a Vector buffer for faster appending.
        (WebCore::XPath::FunId::evaluate): Move the result NodeSet into Value instead of copying it.
        (WebCore::XPath::FunLocalName::evaluate): Cosmetic changes.
        (WebCore::XPath::FunNamespaceURI::evaluate): Ditto.
        (WebCore::XPath::FunName::evaluate): Ditto.
        (WebCore::XPath::FunNormalizeSpace::evaluate): Ditto.

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNodeSet):
        (WebCore::XPath::Value::modifiableNodeSet):
        (WebCore::XPath::Value::toBoolean):
        (WebCore::XPath::Value::toNumber):
        (WebCore::XPath::Value::toString):
        * xml/XPathValue.h:
        (WebCore::XPath::ValueData::ValueData):
        (WebCore::XPath::Value::Value):
        Made Value copying faster by putting large data members into a separate refcounted ValueData class.
        Added provisions for moving a NodeSet in and out of Value without copying.
        Made construction safer by moving bool version to a template constructor.
        Removed an (almost) unused default constructor.

        * xml/XPathPredicate.h: Store a Value for literal string and number expressions to avoid 
        constructing one each time.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate):
        (WebCore::XPath::LocationPath::evaluate):
        (WebCore::XPath::Path::evaluate):
        * xml/XPathPath.h:
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::NumericOp::evaluate):
        (WebCore::XPath::Union::evaluate):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::snapshotItem):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::Step::nodesInAxis):
        * xml/XPathStep.h:
        Got rid of unnecessary NodeSet copying in many cases.

2007-03-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5076323> Only one To Do can be created by a selection in a message

        When Mail's ToDoify operation called moveToEndOfDocument: 
        with a selection that started just before a ToDo, we'd 
        move them to the end of the document, not to the end
        of the editable root, because we incorrectly checked
        for the editability of positions before ToDos.  Then Mail
        would refuse to create a ToDo because the selection was 
        outside of the region where they allowed editing.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        Check the position for editability, not the position's node,
        since there are editable positions of the form [node, offset]
        where node is contenteditable=false.
        Re-use pos.  Nothing that happens after it's created can invalidate
        it or the position and affinity used to create it.
        (WebCore::SelectionController::modifyMovingRightForward): Ditto.
        (WebCore::SelectionController::modifyExtendingLeftBackward): Ditto.
        (WebCore::SelectionController::modifyMovingLeftBackward): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Ditto.

2007-03-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Added DeleteWordBackward and DeleteWordForward to execCommand.

        * editing/Editor.cpp:
        (WebCore::execDeleteWordBackward):
        (WebCore::execDeleteWordForward):
        (WebCore::CommandEntry::):

2007-03-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack

        * WebCore.pro: Fix release Qt builds.

2007-03-30  Antti Koivisto  <antti@apple.com>

        Reviewed by bdash.

        Spotted an int that should be float in previous patch.

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):

2007-03-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Render tree memory savings, part 1
        
        - Eliminate caching of monospace char width from RenderText. This optimization is not needed
          anymore since Font already caches space width (RenderText -4 bytes)
        - Eliminate caching of tab width from RenderBlock. Similary this optimization has become
          obsolete (RenderBlock -4 bytes)

        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::Font::spaceWidth):
        * platform/Font.h:
        (WebCore::Font::tabWidth):
        * platform/TextStyle.h:
        (WebCore::TextStyle::TextStyle):
        (WebCore::TextStyle::allowTabs):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::setStyle):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedMinMaxWidth):
        (WebCore::RenderText::calcMinMaxWidthInternal):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        (WebCore::RenderText::allowTabs):
        * rendering/bidi.cpp:

2007-03-30  David Hyatt  <hyatt@apple.com>

        Fix (take 2) for bug 4334, flickering when floating elements gain/lose transparency.

        Reviewed by mitz

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):

2007-03-29  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13166
          REGRESSION (2005-10-16 - 2005-10-19): Ampersands showing up in the last column of the Gmail contacts table

        Test: fast/tokenizer/write-partial-entity.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Reordered to avoid resetting the buffer position
        after script execution which can write to the buffer.

2007-03-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5099303> Deleting after a ToDo puts the caret in the wrong position
        
        We were failing to create the correct selection 
        for DeleteSelectionCommand because the selection extension 
        operations don't skip over non-editable content for editable 
        selections.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        When extending an editable selection, don't extend into
        non-editable content.
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        Ditto.

2007-03-29  Patti Hoa  <patti@apple.com>

        Reviewed by harrison.

        <rdar://problem/4918397> Exception raise inspecting note contents in the background
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject subrole]):
        (-[WebCoreAXObject title]):
        Check that attachment supports the attribute before requesting it.

2007-03-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/5032066> Delete should work between ToDos
        
        Stop selecting the table when the user attempts to delete
        the line break just after it, instead, extend the selection
        into the last table cell.
        Let deletion merge content into table cells (as long as 
        its not from another table cell).  
        Start calling shouldInsertNode:replacingDOMRange:givenAction: 
        when moving content with moveParagraphs, so that Mail can 
        modify content before it is moved into a ToDo during a delete.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Ask the
        delegate before performing the move.  This will let Mail
        prevent styles from entering a ToDo.
        Added a FIXME about adding a new WebViewInsertAction
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        Allow merging into table cells from content not in a table.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        Don't select the table when extending by character/word from
        just before it.  This code was here to make it easier to select
        tables in order to delete them, but the deletion UI makes it 
        largely unnecessary.
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        Ditto.
        * editing/TypingCommand.cpp:
        (WebCore::isFirstPositionAfterTable): Added.
        (WebCore::isLastPositionBeforeTable): Ditto.
        (WebCore::TypingCommand::deleteKeyPressed): When pressing
        the delete key with a caret at the beginning of a paragraph
        just after a table, move the paragraph into the last table
        cell.
        Do not do this if it would mean moving a block table.
        Removed some old irrelevant comments.
        * editing/htmlediting.cpp: Removed unused functions.
        * editing/htmlediting.h:

2007-03-29  Adam Treat  <adam@staikos.net>

        Reviewed and committed by George Staikos.

        Remove redundant line.

        * platform/qt/FontDataQt.cpp:
        (WebCore::FontData::platformInit):

2007-03-29  Adam Treat  <adam@staikos.net>

        Reviewed by David Hyatt, committed by George Staikos.

        Test: fast/text/justified-selection.html

        Take into account the entire run length to get a proper selection.

        * platform/Font.cpp:
        (WebCore::WidthIterator::WidthIterator):

2007-03-29  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/4545060>, technorati and arstechnica fail because of getComputedStyle not
        reporting display:none properly when it is set.  This is bugzilla bug 13103.

        Reviewed by mitz

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

2007-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Rename DocLoader::setPasteInProgress, etc to more generic 
        setAllowStaleResources, etc

        * editing/Editor.cpp:
        (WebCore::Editor::paste):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::checkForReload):
        * loader/DocLoader.h:
        (WebCore::DocLoader::setAllowStaleResources):
        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag):

2007-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders and Steve.

        Add a flag to DocLoader to prevent it from reloading 
        when performing a paste or drop operation.
        
        Remove m_cachePolicy from CachedResource as it is never used
        
        Fixes rdar://problem/5044366 : REGRESSION: Repro ASSERT failures 
        dragging image into GMail message in _web_writeImage and 
        documentFragmentFromDragData

        * editing/Editor.cpp:
        (WebCore::Editor::paste):
          prevent the docloader from reloading resources on paste
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::updateFromElement):
        * loader/Cache.cpp:
        (WebCore::createResource):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::CachedXBLDocument):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
           Tidy up constructor initialise new field
        (WebCore::DocLoader::checkForReload):
           Prevent reload when pasting
        * loader/DocLoader.h:
        (WebCore::DocLoader::setPasteInProgress):
          new field and setter
        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag):
          prevent the docloader from reloading resources on drop

2007-03-27  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - fix typo in gdk build.

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::contentsToWindow):

2007-03-28  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Darin.
        
        - fixed <rdar://problem/4820817> Autoscroll is broken in Mail.app (message jumps around when trying to select text)
                
        Handle scrolling external scrollviews around the webview during
        autoscroll or when scrolling into view.
        
        This should also restore performance on BenchJS test 6 lost due to Tim's partial fix.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollRectIntoViewRecursively):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::updateContents):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRectConsideringExternalScrollers):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
       
2007-03-28  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed  and landed by Darin

        Get rid of some misuses of |islower| and |tolower| for non-ASCII characters.
        http://bugs.webkit.org/show_bug.cgi?id=13138

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::isLower):
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::equalIgnoringCase):

2007-03-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://problem/5092653>
        REGRESSION: Image decoding making scrolling slow
        
        If decoder gave back a null frame (which I think happens regularly if you don't have full frame 
        data yet for image that does not decode incrementally) m_decodedSize was incremented anyway. This
        led to massive growth in calculated image size and eventually made cache prune constantly. 
        
        No test, I don't know how to make one for this.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::cacheFrame):

2007-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Kevin M.

        WebCore part of fix for <rdar://problem/5095515> VitalSource Bookshelf should not pass return statements into stringByEvaluatingJavaScriptFromString

        * page/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        Convert return value to a string.  This matches the behavior in Safari 2.0.

2007-03-28  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13190
        XPath incorrectly handles namespaces on attributes

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Added a special case for faster attribute lookup; gives a slight but 
        measurable performance improvement for bug 13021.
        (WebCore::XPath::Step::nodeMatches): Fixed NameTest for attribute nodes.

        * xml/XPathStep.h:
        (WebCore::XPath::Step::NodeTest::NodeTest):
        (WebCore::XPath::Step::NodeTest::namespaceURI):
        (WebCore::XPath::Step::nodeTest):
        (WebCore::XPath::Step::setNodeTest):
        Move m_namespaceURI to NodeTest, where it belongs. Removed unused m_nodeTestData (oops!).

        * xml/XPathGrammar.y:
        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::optimizeStepPair):
        Accounted for the above change.

2007-03-28  Oliver Hunt  <oliver@apple.com>

        rs=Hyatt.

        Rollout local changes :-/

        * loader/Cache.cpp:
        (WebCore::Cache::pruneAllResources):
        (WebCore::Cache::remove):

2007-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        Roll out r20511 due to incredible badness

        * loader/Cache.cpp:
        (WebCore::Cache::pruneAllResources):
        (WebCore::Cache::remove):

2007-03-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Don't enforce text-selection drag delay when we are
        going to drag an image anyway.

        Fixes rdar://problem/4668935

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

2007-03-27  Justin Garcia  <justin.garcia@apple.com>

        Build fix
        
        * editing/markup.cpp:
        (WebCore::startMarkup):

2007-03-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5091898> REGRESSION: GMail Editor: A line of underlined text copied with Select All pastes with wrong font family
        
        createMarkup skipped elements if they were blocks
        when called from moveParagraphs (because that function 
        must receive only inline content).  This patch adds 
        code to inline these blocks instead of skipping them 
        so that we don't lose any of the style that they 
        contribute to the copied markup.

        * editing/markup.cpp:
        (WebCore::startMarkup): Add an inlineBlocks option.
        Make sure to overwrite display:block coming from
        a style sheet or the inline style declaration.
        (WebCore::createMarkup): Don't refuse to include a 
        specialCommonAncestor that's a block if we were asked 
        to include only inline content, since we can now inline 
        block elements in startMarkup.

2007-03-27  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5026141> REGRESSION: Aperture Viewer Flashes when switching from Index Page to Detail page in Web Gallery

        This disables the paint that occurs after WebCore finishes loading the document.  We should reenable this when we
        move the dispatchDidFinishLoad delegate callback to happen around the same time as the JS onload call.  See <rdar://problem/5092361>.

        * dom/Document.cpp: (WebCore::Document::implicitClose):

2007-03-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5065910> REGRESSION: In Mail and GMail, Can't apply color to pasted line of text
        <rdar://problem/5084241> After deleting a paragraph of colored text, can't change text color
        <rdar://problem/5065605> REGRESSION: Text copied with Select All + Copy loses color on Paste
        <rdar://problem/4916887> GMAIL: Can't apply color to text once it becomes indented

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copyInheritableProperties):
        If a node's text fill color is invalid, then its children use 
        their font-color as their text fill color (they don't inherit 
        it).  Likewise for stroke color.

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        * platform/ScrollBar.h:
        Use wtf/MathExtras.h instead of math.h

2007-03-27  Zack Rusin  <zrusin@trolltech.com>

        Fix the compile - when using math.h functions
        actually include the header with them.

        * platform/ScrollBar.h:

2007-03-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        The WebArchiver needs all the subresources of a document to be accessible
        through the DocLoader, so we can't remove a CachedResource simultaneously
        from the global Cache and all DocLoaders, just because it needs to be 
        reloaded in one.

        Fixes rdar://problem/5044366

        * loader/Cache.cpp:
        (WebCore::Cache::remove):
           Don't evict the resource from all DocLoaders
        * manual-tests/test-iframes-loading-the-same-resource.html: Added.
           Alas it wasn't possible to make a nice layout test, even this manual test
           is not entirely deterministic

2007-03-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Add support for glyph offsets to the GlyphBuffer.
       
        Reviewed by olliej

        * platform/Font.cpp:
        (WebCore::Font::drawGlyphBuffer):
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::offsetAt):
        (WebCore::GlyphBuffer::add):

2007-03-27  Antti Koivisto  <antti@apple.com>

        Keep buildbot happy.

        * platform/mac/PlatformScrollBarMac.mm:
        (WebCore::PlatformScrollbar::scrollbarHit):

2007-03-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        On Mac, support fine grained wheel events generated by trackpad and Mighty Mouse.
        http://bugs.webkit.org/show_bug.cgi?id=13134
        <rdar://problem/5076249?

        * WebCore.exp:
            Export _wkGetWheelEventDeltas
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
            Remove (0, 0) scroll event hack, it is not needed anymore.
            Do per-pixel scrolling for fine grained events.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::isContinuous):
            Add new m_isContinuous boolean to indicate fine grained wheel events.
        * platform/ScrollBar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::setSteps):
        (WebCore::Scrollbar::scroll):
        * platform/ScrollBar.h:
        (WebCore::Scrollbar::value):
            Use float to represent current position to support finer grained scrolling.
            Add ScrollByPixel, remove ScrollByWheel (which was same as ScrollByLine anyway)
        * platform/ScrollTypes.h:
        (WebCore::):
        * platform/gdk/WheelEventGdk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
            Initalize m_isContinuous
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            Add wkGetWheelEventDeltas for getting fine grained wheel events
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
            Get the wheel deltas using new wkGetWheelEventDeltas interface
        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
            Initalize m_isContinuous
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::calcHeight):
            Pass item height to scrollbar

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/5088234> REGRESSION: Crash occurs at WebCore::Node::
        createRendererIfNeeded() when changing map views with MS Virtual Earth 
        (http://www.ziprealty.com/)
        
        The cause of the crash was the insertion of a <script> element whose
        script removed it from the document. The <script> element would then be 
        garbage when the insertion routine went on to attach() it.
        
        The solution here is to check that an element is still your child before
        trying to attach() it. This matches the style of checks we do elsewhere
        in the node insertion and removal code.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):

2007-03-26  David Carson  <dacarson@gmail.com>

        Reviewed by Darin, landed by Anders.

        Manual test case for: REGRESSION (r19559): Java applet crash
        http://bugs.webkit.org/show_bug.cgi?id=13142
        <rdar://problem/5080340>

        * manual-tests/liveconnect-applet-get-boolean.html: Added.
        * manual-tests/resources/CheckerApplet.class: Added.
        * manual-tests/resources/CheckerApplet.java: Added.

2007-03-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13194
          <rdar://problem/5087738>
          REGRESSION: Selection rects are wrong for images in search results from images.google.com

        Test: fast/replaced/selection-rect-in-table-cell.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRect):

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Removed now-stale #includes of <assert.h>.
        
        * WebCorePrefix.h:
        * config.h:
        * css/CSSGrammar.y:
        * platform/Arena.cpp:
        * platform/KURL.cpp:
        * platform/SegmentedString.h:
        * rendering/DataRef.h:
        * rendering/RenderArena.cpp:

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Kevin McCulough.

        Global replace of "assert(" with "ASSERT(" to assist debugging. Removed
        one instance of commented-out code containing "assert(" instead of replacing it.

2007-03-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Adam.

        Fix <rdar://problem/5049842>
        Gmail Editor: Dragging message text in the message body results in a crash at WebCore::Frame::eventHandler()

        Null check frame in m_dragTarget, it might be gone already.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):

2007-03-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        A partial fix for http://bugs.webkit.org/show_bug.cgi?id=13021
        XPath can be very slow

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate): Reset a reference to the context node, as this may prevent the whole document
        from being destroyed in time.

        * dom/Attr.cpp:
        (WebCore::Attr::createTextChild): Instead of calling appendChild(), just do the few operations it really needs to perform.
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::fastSetFirstChild):
        (WebCore::ContainerNode::fastSetLastChild):
        Added operations that let Attr hack internal ContainerNode data (evil, but fast!).

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::Step::nodesInAxis):
        (WebCore::XPath::Step::nodeMatches):
        * xml/XPathStep.h:
        Merged node testing into axis enumeration. This saves a lot of Vector resizing and passing, and is necessary for future 
        optimizations (sometimes, we can just pick the single result node instead of enumerating and filtering the whole axis).

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13156
          REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar

        Test: fast/text/midword-break-after-breakable-char.html

        Breaking in the middle of the word
        is allowed only if no breaking opportunity between words has occurred yet. The
        first position on the line should not be considered "between words" even if
        it is a breaking opportunity.
        
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Changed according to the above. Also
        cleaned up a couple of lines.

2007-03-24  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 13187, place a hard limit on the amount of decoded data that WebCore will keep
        around even on live pages (pages being displayed in tabs/windows or in the back/forward cache).
        Images will decode to paint and once the decoded data exceeds the cache size, the decoded data will be
        tossed.

        Refine the flushing algorithm to apply the two-pass decode/evict model to each LRU-SP queue individually, rather
        than to all the lists at once.  This allows the cache to evict large encoded resources before flushing small
        or frequently accessed decoded onces.

        Added information on live/decoded data to the cache statistics.

        Reviewed by darin

        * loader/Cache.cpp:
        (WebCore::Cache::Cache):
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneAllResources):
        (WebCore::Cache::setMaximumSize):
        (WebCore::Cache::remove):
        (WebCore::Cache::lruListFor):
        (WebCore::Cache::removeFromLRUList):
        (WebCore::Cache::insertInLRUList):
        (WebCore::Cache::liveLRUListFor):
        (WebCore::Cache::removeFromLiveResourcesList):
        (WebCore::Cache::insertInLiveResourcesList):
        (WebCore::Cache::addToLiveResourcesSize):
        (WebCore::Cache::removeFromLiveResourcesSize):
        (WebCore::Cache::adjustSize):
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        (WebCore::Cache::TypeStatistic::TypeStatistic):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::decodedSizeWillChange):
        (WebCore::CachedImage::decodedSizeChanged):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::ref):
        (WebCore::CachedResource::deref):
        (WebCore::CachedResource::setEncodedSize):
        (WebCore::CachedResource::liveResourceAccessed):
        * loader/CachedResource.h:
        (WebCore::CachedResource::liveAccessCount):
        (WebCore::CachedResource::resetLiveAccessCount):
        (WebCore::CachedResource::increaseLiveAccessCount):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::cacheFrame):
        * platform/graphics/ImageObserver.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorderImage):

2007-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13123
          CSS selectors that use :lang, :not, and namespaces do not serialize correctly

        Test: fast/css/css-selector-text.html

        * css/CSSSelector.cpp: (WebCore::CSSSelector::selectorText): Add the namespace
        prefix for tag or attribute names, the sub-selector for :not, and the argument
        for :lang.

2007-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        <rdar://problem/5086210> - Move RetainPtr to WTF

        * ForwardingHeaders/wtf/RetainPtr.h: Added.
        * WebCore.xcodeproj/project.pbxproj: Removed WebCore/RetainPtr.h
        
        * history/HistoryItem.h: Changed #include to <wtf/RetainPtr.h>
        * history/PageCache.h: Ditto
        * page/mac/WebCoreFrameBridge.mm: Ditto
        * platform/ContextMenu.h: Ditto
        * platform/ContextMenuItem.h: Ditto
        * platform/DragImage.h: Ditto
        * platform/FileChooser.h: Ditto
        * platform/PlatformKeyboardEvent.h: Ditto
        * platform/PopupMenu.h: Ditto
        * platform/SharedBuffer.h: Ditto
        * platform/cf/RetainPtr.h: Removed.
        * platform/graphics/Icon.h: Changed #include
        * platform/mac/ClipboardMac.h: Ditto
        * platform/mac/PasteboardMac.mm: Ditto
        * platform/mac/WidgetMac.mm: Ditto
        * platform/network/AuthenticationChallenge.h: Ditto
        * platform/network/ResourceError.h: Ditto
        * platform/network/ResourceHandle.h: Ditto
        * platform/network/ResourceRequest.h: Ditto
        * platform/network/ResourceResponse.h: Ditto
        * rendering/RenderThemeMac.mm: Ditto

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Fix for <rdar://problem/5086797>, layoutPending is now reporting incorrect results, which will lead
        to all sorts of layout issues.  This is in bugzilla as 13179.

        Reviewed by hyatt

        - fix http://bugs.webkit.org/show_bug.cgi?id=13179
          REGRESSION (r20410): In debug builds, loading a certain page is suspended until redisplay is forced

        Moved the root->needsLayout() check from layoutPending() to needsLayout()
        to restore the behavior before r20324.

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutPending):
        (WebCore::FrameView::needsLayout):

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13180
              <rdar://problem/5084478>
          Another debug build crash from ASSERTION FAILED: !needsLayout()

        No test possible because updateRendering() is always called after script
        execution.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Get the layout root after calling recalcStyle()
        since a style recalc may result in needing to do start layout at the root.

2007-03-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed. Build fix.

        Fix FloatRect vs. IntRect confusion.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtPoint):

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

        Fix incorrect radar number.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2007-03-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Fix all known RenderSVGImage problems.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12126 (RenderSVGImage seems to suffer from integer overflow)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12442 (raster images disappearing during script execution (SVG))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12572 (WebKit does not properly invalidate image region after image load)

        Added test: svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html

        In RenderSVGImage::paint, do not call shouldPaint() as this will never work properly for SVG renderers, as shouldPaint
        doesn't take into account any special SVG transformation (localTransform/absoluteTransform). Just remove the call.

        Fix hit detection on RenderSVGImage - it didn't work properly at all. No idea why I didn't notice before.
        Thanks Andreas Neumann once again for writing excellent bug reports and pointing me to them :-)

        The carto.net navigation tools work as expected now, and also the "dock like" image effect example.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::nodeAtPoint):

2007-03-24  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13177
          Suppress control characters in the ATSUI code path

        * platform/mac/FontMac.mm:
        (WebCore::overrideLayoutOperation):
        (WebCore::ATSULayoutParameters::initialize):

2007-03-24  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5086400>, images scrolled offscreen continue to animate.  Safari 2 would
        halt animations when images were no longer visible.

        Reviewed by mjs, olliej

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):

2007-03-24  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/508328>, sluggish text entry in search field.  Make sure
        our size actually changed before we decide to do a full repaint because of background/border
        complexities.

        Reviewed by aroben

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

2007-03-23  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5048219>, spurious glyphs in gmail.   This is bugzilla bug 13136, which
        will remain open to cover patching the complex text path.
        
        Reviewed by aroben

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace):
        * platform/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):

2007-03-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13153
          REGRESSION: Visual highlighting of pre-populated blank line in textarea is broken

        - fix a bug where selecting across a soft line break did not highlight to
          the end of the first line if it contained skipped whitespace

        Test: fast/text/selection-hard-linebreak.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState): Changed to treat a selection that ends on the
        end of a hard line break as if it ends after the line break. Fixed the case of a selection
        that starts and ends in the same text object as the box but does not intersect it
        to return SelectionNone instead of selectionBoth.

2007-03-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13124
          REGRESSION: Reproducible crash in Widget::getView

        Test: fast/frames/hover-timer-crash.html

        * page/Frame.cpp:
        (WebCore::Frame::setView): Added a call to EventHandler::clear().

2007-03-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele

        <rdar://problem/5078739> 
        Crash in in ReplaceSelectionCommand if the fragment contains only a style span

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Check 
        for an empty fragment after removing a redundant
        style span instead of before.

2007-03-23  David Hyatt  <hyatt@apple.com>

        <rdar://problem/5085063>

        Fix non-looping animation on cuteoverload.com. Just always flush
        decoded data for large animated images to avoid our cache getting
        out of sync with the image source.

        Reviewed by ggaren

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):

2007-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5061024> REGRESSION: Returning false from onkeypress event on Input is ignored when key is Tab
        http://bugs.webkit.org/show_bug.cgi?id= 13020

        No known way to add a layout test for this.  We would need a way to know exactly how the event was consumed.

        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler):
          If the keypress event has its default behavior prevented, then we should consider the keydown event handled.

2007-03-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5080333> 
        REGRESSION: Selection changes when changing the alignment of an image
        
        Regression occurred when we started using moveParagraphs
        to move content in applyBlockStyle.  moveParagraphs 
        moves by copying, deleting and reinserting content, and
        so must be accompanied by selection preservation code.
        That code uses rangeFromLocationAndLength and rangeLength,
        which use TextIterators, which don't emit anything for images 
        and other replaced elements, causing this bug.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Ask rangeLength 
        and rangeFromLocationAndLength to request that their
        TextIterators emit spaces for replaced elements.
        Use rangeCompliantEquivalent()s when creating a Range from
        VisiblePositions, since some VisiblePositions have illegal
        deepEquivalent()s.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Ditto.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::handleReplacedElement): Emit
        a space if requested.
        (WebCore::TextIterator::representNodeOffsetZero): Emit
        ranges before m_node, not around m_lastTextNode.  These
        ranges should represent the part of the document associated
        with the emitted character. 
        (WebCore::TextIterator::rangeLength): Take in the new bool.
        (WebCore::TextIterator::rangeFromLocationAndLength): Ditto.
        Also, don't loop an extra time after finding the end of the
        range when we're looking for zero length ranges.  This appeared
        to be a workaround for the bugs fixed in representNodeOffsetZero
        in this patch.
        * editing/TextIterator.h:

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

        Rubber-stamped by Darin.

        * Configurations/WebCore.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.

2007-03-23  Darin Adler  <darin@apple.com>

        * html/HTMLBodyElement.cpp: Fix comment typo.

2007-03-23  Adam Treat  <adam@staikos.net>

        Reviewed and committed by George.

        Patch from Adam Treat to make the Qt build work without SVG and XSLT.
        XMLNames is required in any case.

        * WebCore.pro:

2007-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/5074439> handle margins on frame and iframe elements
          without involving FrameView, FrameLoader, etc.

        * html/HTMLBodyElement.cpp: (WebCore::HTMLBodyElement::insertedIntoDocument):
        Grab the margin from the frame directly here. There was no real benefit
        to doing this via FrameView. Later we can delete quite a bit of unneeded code
        here and in WebKit that exists only to set up the margin values in FrameView,
        which are now unused.

2007-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5080428> REGRESSION: getting value for hidden input element fails after the fix for Bug 11866
        http://bugs.webkit.org/show_bug.cgi?id=13121

        Rolled out the change for 11866 that made hidden input elements store the value separately from the value attribute.
        Added an m_originalValue field that gets set when the element is done being parsed (in closeRenderer).  In reset,
        use the m_originalValue for hidden input elements.

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

2007-03-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13157
              <rdar://problem/5083995>
          List markers positioned incorrectly and don't repaint properly on Oxford homepage

        Test: fast/lists/marker-image-error.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::imageChanged): Mark ourselves for relayout if
        the image failed to load, since that means we will use a bullet instead.

2007-03-23  Zack Rusin  <zrusin@trolltech.com>

        Fix the compile.

        * platform/graphics/qt/ImageSourceQt.cpp:

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5083072>.

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):

2007-03-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Ada.

        <rdar://problem/5074974>
        CrashTracer: [USER] repro crash in Safari at com.apple.WebCore: WebCore::FrameLoader::activeDocumentLoader const + 6
        
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        Don't use ResourceResponse:isHTTP here since that only looks at the protocol instead of if the response came from a 
        HTTP server (and not a web archive).

2007-03-22  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/graphics/cairo/ImageSourceCairo.cpp:

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5083473>.  Make sure wheeling still forwards to the frame view even
        when no node is hit.  Technically not ever hitting a node is a regression from the RenderView
        size changes (making it be the size of the initial containing block according to CSS2.1), but
        we should still handle this case gracefully in case it comes up again.
       
        Reviewed by olliej

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

2007-03-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin

        <rdar://problem/5081257> 
        REGRESSION: New Mail signatures start out empty

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition): Allow
        descent from positions inside the document into an 
        editable body.

2007-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele and John

        <rdar://5043528> - Prepare for new API
        
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::clearAuthentication): Clear CF type

2007-03-22  Beth Dakin  <bdakin@apple.com>

        Patch by Hyatt, reviewed and committed by me.

        Does not reproduce consistently, so a layout test does not seem 
        possible.

        Fix for <rdar://problem/5082421> Constantly hitting ASSERT(!
        needsLayout()) in RenderView::paint()

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutPending): It is not enough to ask if the 
        layout timer is active. There may be times that we don't have a 
        body yet so we cannot schedule layout yet, but the root still needs 
        layout.  

2007-03-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        Followup for recent fix to 5079700, found by assertion added to Safari.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForLabelsBeforeElement):
        Fixed another place in this method where an empty NSString was being returned instead of nil.
        Cleaned up the style a little too.

2007-03-22  David Hyatt  <hyatt@apple.com>

        Remove unnecessary destroyFrameAtIndex call.  Now that we throw away
        the image source, it is no longer needed.

        Reviewed by beth

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2007-03-22  David Harrison  <harrison@apple.com>

        Reviewed by Geoff, Darin.

        <rdar://problem/5077892> In RapidWeaver 3.5.1, a crash occurs when attempting to load Safari Bookmarks in iMedia Browser
        
        * platform/mac/ThreadCheck.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        Change default on Tiger to NSLog rather than raise an exception.

2007-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - use binary_search instead of hash table; slightly better performance and
          less memory use

        * platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::portAllowed):
        Use binary_search.

2007-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/5074630> detachChildren call should move from WebKit to WebCore

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::setDocumentLoader):
        Add a call to detachChildren() after the call to prepareForDataSourceReplacement().
        There was no reason for this crucial loading step to be left to the client.

2007-03-22  David Hyatt  <hyatt@apple.com>

        Minor refactoring and cleanup of the bridge calls that want to control layout settings on the RenderView.
        Have the bridge talk through the FrameView instead of just asking for the RenderView directly.

        Add an assert to help catch situations where the RenderView needs layout at paint time, since this is a known
        catastrophic scenario that will (much of the time) result in a crash in RenderTableSection::paint.

        Reviewed by aroben

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::setNeedsLayout):
        * page/FrameView.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge needsLayout]):
        (-[WebCoreFrameBridge setNeedsLayout]):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Re-worked the fix in r20375. 'M' and 'm' are not the only commands that
        accept "extra" coordinates -- virtually all commands accept them.

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):

2007-03-21  David Harrison  <harrison@apple.com>

        Reviewed by hyatt.

        <rdar://problem/5072460> CrashTracer: [USER] 1 crashes in Xcode at com.apple.ImageIO.framework: getBandProcPNG + 168

        An NSData object was being alloc/init'd, then returned callers who cast the pointer as a
        CFDataRef, including calling CFRelease on it. The problem is that under garbage collection, the NS
        retain count is ignored (it's always 0), but the CFRetain and CFRelease are not ignored. This
        caused the object to be over-released. The solution that works in both GC and non-GC is to "transfer"
        the initial NS retain count to the CF retain count, using HardRetainWithNSRelease.
        
        The creator of the NSData was SharedBuffer::createNSData. The callers were PDFDocumentImage::dataChanged()
        and ImageSource::setData(). This particular crash involved the ImageSource::setData() case.

        * platform/SharedBuffer.h:
        Declare createCFData().
        
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        Call createCFData instead of createNSData.
        
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        Call createCFData instead of createNSData.
        
       * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        Implement createCFData(). Use HardRetainWithNSRelease for gc safety.
        
2007-03-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13145
          Regression: Scrollbar not resizing after display none

        Test: fast/dynamic/view-overflow.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout): Reset overflowHeight() and overflowWidth()
        before calling docHeight() and docWidth(), since the former act as a lower
        bound for the latter.

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        A little cleanup based work I've been doing on the SVG parsers.

        * ksvg2/svg/SVGParserUtilities.h:
        (WebCore::skipString):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Moved checkString into
        SVGParserUtilities.h, so it could be with all its friends. Renamed 
        "checkString" to "skipString" to match the rest of the code and to be 
        clear about which functions move the buffer pointer.
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute): Changed gotos into 
        returns. Removed unnecessary magic number.

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/5078471> SVG rgb color parser runs past end of 
        buffer when running fuzzing test

        * ksvg2/svg/SVGColor.cpp:
        (WebCore::parseNumberOrPercent): Check for past the end condition.
        (WebCore::SVGColor::colorFromRGBColorString): Reversed "read past end
        of buffer, then check if you're past the end" logic.

2007-03-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/5079410> SVG path parser hangs, exhausts memory when 
        running fuzzer test

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG): Don't assume that extra digits are
        always preceded by an 'M' or an 'm'.

2007-03-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam
        
        - fixed <rdar://problem/5079700> REGRESSION (r19702): Name/password aren't autofilled 
          or saved for .Mac homepage login

        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForLabelsBeforeElement):
        don't count empty strings as valid results

2007-03-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl): 
        Release the RefPtr to avoid increasing/decreasing
        the refcount unnecessarily.
        (WebCore::propertyMissingOrEqualToNone): Added and used
        instead of converting values to strings.
        (WebCore::elementHasTextDecorationProperty): 
        (WebCore::createMarkup):

2007-03-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5075944> 
        REGRESSION: Partially selected underlined content pastes as plain text
        
        We stopped adding markup for all the ancestors
        of lastClosed up to the commonAncestorBlock
        because it was adding a lot of unnecessary markup.
        This caused us to lose underlining when copying a 
        partially selected underlined element (even though 
        we put all styles that the copied markup inherits 
        into a style span, because the text-decoration 
        isn't inheritable).

        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesAndInlineDecl): Moved
        code here.
        (WebCore::elementHasTextDecorationProperty): Added.
        (WebCore::createMarkup): If the copied markup has a
        text-decoration because some common ancestor has
        a text-decoration property set, include that ancestor
        and all its descendants in the copied markup.

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

        Reviewed by Antti.

        Update a few SVG attribute parsers to be more defensive against
        reading beyond the end of input. 

        Fixes rdar://problem/5077218 -- SVG transform parser runs past
        end of buffer when running fuzzing test

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):
        * ksvg2/svg/SVGParserUtilities.h:
        (WebCore::skipOptionalSpacesOrDelimiter):
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::parseTransformParamList):
        (WebCore::SVGTransformable::parseTransformAttribute):

2007-03-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=13140
        Crash after loading SVG fragment with XMLHttpRequest (Yosemite Map Geology Layer)

        Test: svg/carto.net/frameless-svg-parse-error.html

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportError): Added a null check.
        (WebCore::SVGDocumentExtensions::reportWarning): Ditto.

2007-03-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/5072678> Crash in
        RenderLayer::scrollRectToVisible with MallocScribble enabled

        I tried to fix this earlier today but my fix caused a regression
        scrolling through RSS pages. It turns out that sometimes scroll
        events need to propagate immediately, and sometimes they must be
        delayed or they risk deleting objects that are expected to be
        around after the event has propagated. Mitz's original fix made
        sheduleEvent() only delay events that happen during layout. This
        fix marks two other places in addition to layout where events also
        need to be delayed. These two places are places that were marked
        with FIXMEs that Mitz removed in his original patch. (There was a
        third FIXME in RenderLayer::updateScrollInfoAfterLayout() but that
        case is only called through layout and is covered by Mitz's
        original patch.)

        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView): Added assertion.
        (WebCore::FrameView::layout): Call new functions to increment and 
        decrement the queued events count.
        (WebCore::FrameView::pauseScheduledEvents):
        (WebCore::FrameView::resumeScheduledEvents): Decrement queued 
        events count and dispatch events if the count has zeroed.
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::Marquee::start):

2007-03-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13130
          REGRESSION: Sometimes a frame resizer keeps following the mouse after mouseup

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize): Reordered the code to allow resizing
        to be terminated by a mouseup event regardless of whether the frameset needs
        layout.

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5077252> 
        In NetNewsWire 2.1.1 and 3.0d62, a crash occurs after triple-clicking a link on the page
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Move the m_inStopAllLoaders check to the load function that's common for loading a request or substitute data.

2007-03-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders.

        <rdar://problem/5073391> and http://bugs.webkit.org/show_bug.cgi?id=13137

        Crash in IconDatabase when private browsing is enabled.

        The problem was caused by http://trac.webkit.org/projects/webkit/changeset/20182 
        which changed many uses of char[] and Vector<char> to SharedBuffer.  The patch
        tended to literally replace a Vector<char> with RefPtr<SharedBuffers> but forgot
        to enforce the concept that Vector<char>'s always exist, whereas RefPtr<SharedBuffers>
        can be null.  This led to derefs.

        I took the opportunity to rework the iconDB functions to live in a SharedBuffer 
        world, as that didn't exist when they were originally written - now they just return
        SharedBuffers instead of taking a Vector<char>& as a parameter

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconURL): Return a SharedBuffer
        (WebCore::IconDatabase::iconForPageURL): Null check the SharedBuffer before asking
          it if it's empty
        (WebCore::IconDatabase::imageDataForIconURLQuery): Return a new SharedBuffer

        * loader/icon/IconDatabase.h: Return SharedBuffer's instead of taking Vector<char>&'s

2007-03-20  Adam Roben  <aroben@apple.com>

        Rubberstamped by Adele.

        Roll out r20348 because it was causing crashes.

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleEvent):

2007-03-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Kevin Decker.

        Rolling out part of r19828 that caused a scrolling regression in Mail.

        <rdar://problem/4820817> Message jumps around when trying to select text

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::updateContents):

2007-03-20  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        <rdar://5071341> - Crash in IconLoader::finishLoading()
        
        Though the reproducibility of the crash is still elusive, there's been a crasher likely uncovered 
        Hyatt's recent caching changings to the IconLoader.  This crash tends to hit on sites without favicons,
        that serve up complex 404 pages, often when the load is cancelled or redirected.  Occasionally, it *seems*
        the IconLoader is getting failed/cancelled twice.
        
        This patch adds some assertions and a "fail gracefully in a release build" check that will have to
        serve us until we know more about the cause.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didFail): Add an assertion to catch this case
        (WebCore::IconLoader::finishLoading): Add an assertion to catch the case, and fail
          gracefully in debug builds.  Also add an efficiency check to not commit to the DB if there is no
          IconURL

2007-03-20  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10747
        REGRESSION: Using two fingers on a trackpad to scroll inside a text area makes the whole page move
        <rdar://problem/5045710>
        
        Eat smooth scroll events in WebCore if pointer is over scrollable area. Not
        really a good fix, smooth scrolling should be supported properly. It should do for now.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isScrollable):
        * rendering/RenderListBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isScrollable):
        * rendering/RenderObject.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::isScrollable):
        * rendering/RenderTextControl.h:

2007-03-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Covered by existing test case.

        Fix for <rdar://problem/5072678> Crash in 
        RenderLayer::scrollRectToVisible with MallocScribble enabled

        This removes some code that was added with http://bugs.webkit.org/
        show_bug.cgi?id=8360. This code was not needed to fix that bug, but 
        the idea behind it was that there are times when it is safe for 
        scheduleEvent() to propagate the event immediately. The 
        MallocScribble crash revealed that this assumption was a bit too 
        broad; the cause of the crash was that we were propagating events 
        immediately when it was not safe. Mitz and I discussed this online 
        and we agree that the safest solution is to revert to the old 
        behavior here, and always delay the propagation of the event. 

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleEvent):

2007-03-20  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Add some very helpful logging to the IconLoader's SubresourceLoaderClient impl.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didReceiveData):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::didFinishLoading):

2007-03-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/5071074> 
        REGRESSION: Links are pasted as plain text at certain positions
        
        moveParagraphs calls createMarkup without annotation, which leaves
        out anchor elements that aren't fully selected.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): We don't want 
        createMarkup to do full annotation here.  Doing so could include 
        special ancestor blocks, which would prevent the copied content 
        from appearing in the destination paragraph when it's re-inserted.  
        Annotation would also inline styles from style sheets,  which is 
        unnecessary because the content is being moved to the same 
        document it's being moved from.
        Added a new bool to createMarkup that when true allows markup for 
        special ancestors as long as they are inline when annotation is off.
        * editing/markup.cpp:
        (WebCore::createMarkup): Don't set specialCommonAncestor if annotation
        is off, unless it's inline and we've been told it's ok to include such
        elements.
        * editing/markup.h:

2007-03-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12497
        Implement XPath result ordering.

        XPath::NodeVector typedef is replaced with a real XPath::NodeSet class that knows how 
        to sort itself, and can remember whether it has been already sorted.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added XPathNodeSet files.

        * xml/XPathExpression.cpp: Fixed includes.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate): Mark the resulting node-set as unsorted.
        (WebCore::XPath::FunLocalName::evaluate): Replacing NodeVector with NodeSet.
        (WebCore::XPath::FunNamespaceURI::evaluate): Ditto.
        (WebCore::XPath::FunName::evaluate): Ditto.
        (WebCore::XPath::FunCount::evaluate): Ditto.
        (WebCore::XPath::FunSum::evaluate): Ditto.

        * xml/XPathNodeSet.cpp: Added.
        (WebCore::XPath::parentWithDepth):
        (WebCore::XPath::sortBlock):
        (WebCore::XPath::NodeSet::sort): Sort the node-set in document order.
        (WebCore::XPath::NodeSet::reverse): Reverse the order (useful for making axes such as 
        parent or ancestor sorted).
        (WebCore::XPath::NodeSet::firstNode): Returns the first node in document order; currently
        implemented via fully sorting the node-set, but this can obviously be optimized.
        (WebCore::XPath::NodeSet::anyNode): Added for symmetry with firstNode().
        
        * xml/XPathNodeSet.h: Added.
        (WebCore::XPath::NodeSet::NodeSet):
        (WebCore::XPath::NodeSet::operator=):
        (WebCore::XPath::NodeSet::size):
        (WebCore::XPath::NodeSet::isEmpty):
        (WebCore::XPath::NodeSet::operator[]):
        (WebCore::XPath::NodeSet::reserveCapacity):
        (WebCore::XPath::NodeSet::clear):
        (WebCore::XPath::NodeSet::swap):
        (WebCore::XPath::NodeSet::append):
        (WebCore::XPath::NodeSet::markSorted):
        (WebCore::XPath::NodeSet::isSorted):
        Most of these methods just call Vector counterparts. 

        * xml/XPathParser.cpp: Updated the copyright notice.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate): Replacing NodeVector with NodeSet.
        (WebCore::XPath::Path::evaluate): Ditto.
        (WebCore::XPath::LocationPath::evaluate): Replacing NodeVector with NodeSet. This function
        always marks the result as unsorted, because it is hard to tell whether a step breaks node order.
        Identifying and implementing special cases when it is not necessary to do so is an important
        future optimization.

        * xml/XPathPath.h: Replacing NodeVector with NodeSet.
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::EqTestOp::compare): Replacing NodeVector with NodeSet.
        (WebCore::XPath::Union::evaluate): Replacing NodeVector with NodeSet. Currently, Union just
        marks the result as unordered; we can consider using merge sort to avoid this.

        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult): Replacing NodeVector with NodeSet.
        (WebCore::XPathResult::singleNodeValue): Ditto.
        (WebCore::XPathResult::snapshotLength): Ditto.
        (WebCore::XPathResult::iterateNext): Ditto.
        (WebCore::XPathResult::snapshotItem): Ditto.
        (WebCore::XPathResult::convertTo): Ditto. Sort the result when requested to.

        * xml/XPathResult.h: Replacing NodeVector with NodeSet.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::evaluate): If the input is not sorted, mark the output as such, too.
        (WebCore::XPath::Step::nodesInAxis): Fixed a number of bugs when enumerating with an
        attribute context node.
        (WebCore::XPath::Step::nodeTestMatches): Replacing NodeVector with NodeSet.
        * xml/XPathStep.h: Ditto.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode): XPath data model doesn't put attribute data into child
        nodes, so passing such node as a context could cause problems.

        * xml/XPathUtil.h: Removed NodeVector typedef.

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::Value):
        (WebCore::XPath::Value::toNodeSet):
        (WebCore::XPath::Value::toBoolean):
        (WebCore::XPath::Value::toNumber):
        (WebCore::XPath::Value::toString):
        * xml/XPathValue.h:
        (WebCore::XPath::Value::):
        (WebCore::XPath::Value::isNodeSet):
        Replacing NodeVector with NodeSet.

2007-03-21  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject methodForSelector:]):
        (-[WebScriptObject respondsToSelector:]):

2007-03-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13129.
        Bug 13129: Democracy Player dies in NSException from WebScriptObject on startup.

        Some cross-language scripting bridges use the presence of -(int)count to determine
        whether to treat objects as sequence-like.  All WebScriptObject's exposed this method
        which lead to non-collection WebScriptObject's being mishandled by PyObjC.  We now
        expose -count only when the object we wrap looks like a collection from a JavaScript
        point of view (eg, it has a length property).

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _shouldRespondToCount]):
        (-[WebScriptObject methodForSelector:]):
        (-[WebScriptObject respondsToSelector:]):
        (-[WebScriptObject _count]):
        * bindings/objc/WebScriptObjectPrivate.h:

2007-03-20  Darin Adler  <darin@apple.com>

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMouseMoveEvent):
        Fix obvious typo in the change from last night -- forgot to assign to the variable.

2007-03-20  Dave Hyatt  <hyatt@apple.com>

        Refactor fonts a bit for portability.
       
        Reviewed by aroben

        * platform/Font.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        (WebCore::Font::floatWidthForSimpleText):
        * platform/Font.h:
        * platform/FontData.h:
        (WebCore::FontData::isSystemFont):
        (WebCore::FontData::scriptCache):
        * platform/GlyphBuffer.h:
        (WebCore::GlyphBuffer::add):

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Stub out a couple of CFNetwork backend functions.
        
        * platform/network/ResourceHandle.h:

2007-03-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.

        Protect against possibility of JS detaching a frame (and losing its view)
        midway through a mouse move.

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

2007-03-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13107
        XPath should raise an exception when trying to parse an unknown function

        Test: fast/xpath/invalid-functions.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunction): Return 0 if the function couldn't be created.
        * xml/XPathGrammar.y: Handle nulls returned from createFunction().

2007-03-19  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13087
        <rdar://problem/5064316> REGRESSION: Allow setting the checked attribute in js and in markup for unnamed radio buttons (dominos.com)

        Test: fast/forms/radio_checked_name.html

        We were matching a WinIE quirk that does not allow a user to check and uncheck an unnamed radio button.  But they still
        allow the checked attribute to be set in html, and changed in javascript.  So this change matches that behavior.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): We no longer need a special call to setChecked when parsing the name
         attribute, since we setChecked will now work with unnamed radio buttons.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Added comment.
        (WebCore::HTMLInputElement::setChecked): Don't check for the unnamed radio button case here.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Don't call setChecked for unnamed radio buttons.
        (WebCore::HTMLInputElement::defaultEventHandler): ditto.

2007-03-19  Adam Roben  <aroben@apple.com>

        Rubberstamped by Oliver.

        * bridge/JavaScriptStatistics.cpp: Added missing header for
        correctness.

2007-03-19  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Maciej.

        Really set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)

        * WebCore.xcodeproj/project.pbxproj:

2007-03-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5071074> 
        REGRESSION: Links that aren't fully selected copy and paste as only text
        
        We stopped adding markup for all commonAncestorBlocks
        and the ancestors of lastClosed up to them because it 
        was adding a lot of unnecessary markup.

        * editing/markup.cpp:
        (WebCore::createMarkup): Also include markup for nodes
        up to an enclosing anchor.  Cleaned up the code for
        including special common ancestors a bit.

2007-03-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Lars Knoll.

        Fix crash when opening a SVG document which contains SVG elements, but no <svg> root element.
        Moving the mouse was crashing WebKit. Fixes svg/hixie/dynamic/006.xml.

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

2007-03-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13117
        REGRESSION (r14658): Flickering text fields when updating via javascript

        * page/Frame.cpp:
        (WebCore::Frame::forceLayout): Added a flag to allow partial relayout.
        * page/Frame.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge forceLayoutAdjustingViewSize:]): Allow partial relayout
        if not adjusting view size.
        (-[WebCoreFrameBridge needsLayout]): Changed to check for pending subtree
        layout instead of just whether the root needs layout.

2007-03-18  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Make JS function calls on POD-types (ie. SVGLength) take effect.
        Calling ie. newValueInSpecifiedUnits on SVGLength works as expected.

        This worked fine before we switched to SVGLength POD type, so this
        can be considered as P1 regression fix.

        Partly fix svg/hixie/dynamic/005-broken.svg. We match Opera now though
        it's not yet completly fixed. Setting baseVal attribute on SVGAnimatedString
        doesn't work as expected - needs a seperated fix.

        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-19  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Adding comments and a little cleanup from my last checkin.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Removed commented out assert.  Added comment about how we use onChange.
        (WebCore::HTMLSelectElement::selectAll): Added comment about how we use saveLastSelection and onChange.
        (WebCore::HTMLSelectElement::dispatchFocusEvent): ditto.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): ditto.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): ditto.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): ditto.
        (WebCore::HTMLSelectElement::menuListOnChange): Added assert that usesMenuList() is true.
        (WebCore::HTMLSelectElement::listBoxOnChange): Added assert that usesMenuList() is false.
        (WebCore::HTMLSelectElement::saveLastSelection): Added early return for menu lists.

2007-03-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Tim Hatcher.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13091
          REGRESSION (r20075): Wrong text style and pixel break in Apple Store Locator HUD

        Test: fast/innerHTML/additional-inline-style.html

        * editing/markup.cpp:
        (WebCore::startMarkup): Changed to add inline style based on CSS rules only
        in AnnotateForInterchange mode.

2007-03-19  Zack Rusin  <zrusin@trolltech.com>

        Compile fix.

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

2007-03-19  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt and Maciej.

        Renamed WebCoreJavaScript to JavaScriptStatistics and made it C++ as
        part of <rdar://problem/5071653>.

        All layout tests pass.

        * WebCore.exp: Updated.
        * WebCore.xcodeproj/project.pbxproj: Updated.
        * bridge/JavaScriptStatistics.cpp: Moved from
        bridge/mac/WebCoreJavaScript.mm, and converted to C++.
        (WebCore::collect):
        (WebCore::JavaScriptStatistics::objectCount):
        (WebCore::JavaScriptStatistics::interpreterCount):
        (WebCore::JavaScriptStatistics::protectedObjectCount):
        (WebCore::JavaScriptStatistics::rootObjectTypeCounts):
        (WebCore::JavaScriptStatistics::garbageCollect):
        (WebCore::JavaScriptStatistics::garbageCollectOnAlternateThread):
        (WebCore::JavaScriptStatistics::shouldPrintExceptions):
        (WebCore::JavaScriptStatistics::setShouldPrintExceptions):
        * bridge/JavaScriptStatistics.h: Added.
        * bridge/mac/WebCoreJavaScript.h: Removed.
        * bridge/mac/WebCoreJavaScript.mm: Removed.

2007-03-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - avoid static construction (and global variable access) in a smarter, more portable way,
        to later enable MUTLI_THREAD mode to work on other platforms and compilers.
        
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBaseFunction::JSHTMLInputElementBaseFunction):
        * bindings/js/JSHTMLOptionElementConstructor.cpp:
        (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNamedNodeMap::getOwnPropertySlot):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::HTMLElementFunction):
        (KJS::JSHTMLCollection::getOwnPropertySlot):
        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute):
        * bindings/objc/WebScriptObject.mm:
        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-18  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe

        Set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)

        * WebCore.xcodeproj/project.pbxproj:

2007-03-18  David Hyatt  <hyatt@apple.com>

        Fix for REGRESSION bug 13108, frame borders being painted when they shouldn't be.  Rework both frame borders
        and resizing to be more like other browsers.

        Reviewed by ggaren

        fast/frames/no-frame-borders.html

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::attach):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::hasFrameBorder):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::attach):
        * html/HTMLFrameSetElement.h:
        (WebCore::HTMLFrameSetElement::hasFrameBorder):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::edgeInfo):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        (WebCore::RenderFrameSet::GridAxis::resize):
        (WebCore::RenderFrameSet::fillFromEdgeInfo):
        (WebCore::RenderFrameSet::computeEdgeInfo):
        (WebCore::RenderFrameSet::edgeInfo):
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::startResizing):
        (WebCore::RenderFrameSet::continueResizing):
        (WebCore::RenderFrameSet::canResizeRow):
        (WebCore::RenderFrameSet::canResizeColumn):
        (WebCore::RenderFrameSet::splitPosition):
        (WebCore::RenderFrameSet::hitTestSplit):
        (WebCore::RenderFrameSet::dump):
        * rendering/RenderFrameSet.h:
        (WebCore::):
        (WebCore::FrameEdgeInfo::FrameEdgeInfo):
        (WebCore::FrameEdgeInfo::preventResize):
        (WebCore::FrameEdgeInfo::allowBorder):
        (WebCore::FrameEdgeInfo::setPreventResize):
        (WebCore::FrameEdgeInfo::setAllowBorder):

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

        Rubber-stamped by Brady.

        Update references to bugzilla.opendarwin.org with bugs.webkit.org.

        * ChangeLog:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * manual-tests/ATSU-bad-layout.html:
        * manual-tests/accidental-strict-mode.html:
        * manual-tests/applet-param-no-name.html:
        * manual-tests/bidi-parens.html:
        * manual-tests/bugzilla-3855.html:
        * manual-tests/bugzilla-4840.html:
        * manual-tests/bugzilla-6821.html:
        * manual-tests/containing-block-position-chage.html:
        * manual-tests/contenteditable-link.html:
        * manual-tests/css3-cursor-fallback-quirks.html:
        * manual-tests/css3-cursor-fallback-strict.html:
        * manual-tests/custom-cursors.html:
        * manual-tests/dictionary-scrolled-iframe.html:
        * manual-tests/dom-manipulation-on-resize.html:
        * manual-tests/drag-image-to-address-bar.html:
        * manual-tests/empty-link-target.html:
        * manual-tests/empty-title-popup.html:
        * manual-tests/first-line-style-crash.html:
        * manual-tests/invalid-mouse-event.html:
        * manual-tests/left-overflow-repaint.html:
        * manual-tests/linkjump-3.html:
        * manual-tests/log-keypress-events.html:
        * manual-tests/named-window-blank-target.html:
        * manual-tests/plain-text-paste.html:
        * manual-tests/plugin-controller-datasource.html:
        * manual-tests/pre-tab-selection-rect.html:
        * manual-tests/redirection-target.html:
        * manual-tests/redraw-page-cache-visited-links.html:
        * manual-tests/reset-initiatedDrag.html:
        * manual-tests/resources/named-window-blank-target-step2.html:
        * manual-tests/resources/named-window-blank-target-step3.html:
        * manual-tests/resources/named-window-blank-target-step4.html:
        * manual-tests/resources/redraw-page-cache-visited-links-2.html:
        * manual-tests/scrollbar-hittest.html:
        * manual-tests/scrollbar-hittest2.html:
        * manual-tests/subview-click-assertion.html:
        * manual-tests/tabbing-input-google.html:
        * manual-tests/text-field-autoscroll.html:
        * manual-tests/textarea-after-stylesheet-link.html:
        * manual-tests/textarea-focus.html:
        * manual-tests/whitespace-pre-affinity.html:

2007-03-18  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::update): add a stub

2007-03-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Hyatt

        http://bugs.webkit.org/show_bug.cgi?id=13111
        When stopped a load before it completes, partial images become the 
        broken image icon

        * loader/loader.cpp:
        (WebCore::Loader::didFail): Split off into a method that knows the 
          difference between failed and cancelled.  If a load is cancelled,
          don't call error() on the object - only remove it from the cache
        (WebCore::Loader::cancelRequests): Call didFail(loader, true)
        * loader/loader.h: Added didFail(SubresourceLoader*, bool cancelled)

2007-03-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13101
          REGRESSION (NativeTextField): Specifying word-wrap:break-word makes text field wrap

        Test: fast/forms/input-text-word-wrap.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle): Force the inner block to
        'word-wrap:normal'.

2007-03-18  Dan Waylonis  <waylonis@mac.com>

        Reviewed by Tim Hatcher.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13005
        Bug 13005: WebScriptObject +throwException needs NULL check.

        Add checking for NULL interpreter before throwing exception.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):

2007-03-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=13106
        REGRESSION: Incomplete document.all implementation breaks abtelectronics.com 
        (Style Change Through JavaScript Blanks Content)
        
        When indexing into collections, treat the empty string as an invalid argument,
        instead of the number 0.

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollection::getOwnPropertySlot):
        (KJS::JSHTMLCollection::callAsFunction):
        (KJS::JSHTMLCollectionPrototypeFunction::callAsFunction):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Use fillRect instead of drawLine, since drawLine has some odd behavior (it's only used for borders).

        Reviewed by aroben

        * platform/graphics/IntRect.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Change the frameborder color to be light gray for framesets.

        Reviewed by aroben

        * rendering/RenderFrameSet.cpp:
        (WebCore::borderFillColor):
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Make iframes work properly with frameborder="0".

        Reviewed by aroben

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::mapToEntry):
        (WebCore::HTMLIFrameElement::parseMappedAttribute):

2007-03-18  David Hyatt  <hyatt@apple.com>

        Add a 2px border by default to <iframe>s for compatibility with other browsers.

        Reviewed by aroben

        * css/html4.css:

2007-03-18  David Hyatt  <hyatt@apple.com>

        Move frame borders out of WebKit and into WebCore.

        Reviewed by aroben, olliej

        * bridge/mac/FrameViewMac.mm:
        * css/html4.css:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        (WebCore::HTMLFrameSetElement::mapToEntry):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::attach):
        * html/HTMLFrameSetElement.h:
        (WebCore::HTMLFrameSetElement::hasBorderColor):
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        * page/FrameView.h:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::topLeft):
        (WebCore::IntRect::topRight):
        (WebCore::IntRect::bottomLeft):
        (WebCore::IntRect::bottomRight):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::viewCleared):
        * rendering/RenderFrameSet.cpp:
        (WebCore::borderStartEdgeColor):
        (WebCore::borderEndEdgeColor):
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        (WebCore::RenderFrameSet::paint):
        * rendering/RenderFrameSet.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::viewCleared):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2007-03-17  David Hyatt  <hyatt@apple.com>

        Make onload do an explicit paint when a top-level document is ready (to ensure that a first paint always
        happens before any timers set by the onload can fire).

        Reviewed by aroben

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::update):

2007-03-17  Dave Hyatt  <hyatt@apple.com>

        Prevent starvation of user input and painting when processing timers.
        If we are already in the processing of a custom timer message, don't allow that
        processing to do another PostMessage.  Force SetTimer to be used instead.
      
        Reviewed by ggaren

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

2007-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/5070967> REGRESSION (r20211): Repro crash when 
        closing View Source window
        
        I award myself 0 points, and may God have mercy on my soul.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):

2007-03-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (Pasteboard::writeURL):

2007-03-17  David Hyatt  <hyatt@apple.com>

        Fix tiny PLT regression.  Don't examine the border/background data for RenderImage when images change
        unless we actually have a border/background.

        Reviewed by Brady

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):

2007-03-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam Weinig.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13046 (CSS styles on hover and focus are broken for <use>)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12838 (SVG <use> CSS styles broken)
        Added test: svg/custom/use-css-events.svg

        In general this fixes the peepo.co.uk website.

        Forgot to pass the actual StyleChange to the recalcStyle() function,
        when calling it on the shadow tree root element.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):

2007-03-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Made Version.xcconfig smarter when building for different configurations.
        Now uses the 522+ OpenSource version for Debug and Release, while using the
        full 522.4 version for Production builds. The system prefix is also computed
        based on the current system, so 4522.4 on Tiger and 5522.4 on Leopard.

        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2007-03-17  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12595
        REGRESSION: Can't add item to cart at lnt.com (JS type error)
        <rdar://problem/4722863>
        
        Emulate Firefox behavior where form elements accessed by a name
        can be accessed with that name later even if the name changes or
        even if element is removed from the document.
        
        This is loosely based on Darin's earlier patch for the same problem but
        is much less expansive. It takes somewhat different approach to more closely
        mimic Firefox behavior. Includes expanded test case.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
            Use new the HTMLFormElement::getNamedElements() method
        (WebCore::JSHTMLFormElement::nameGetter):
            Use new the HTMLFormElement::getNamedElements() method
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::elementForAlias):
        (WebCore::HTMLFormElement::addElementAlias):
            Maintain a map of known element aliases
        (WebCore::HTMLFormElement::getNamedElements):
            Get a list of elements matching the name, based both their
            current names and known aliases (earlier names).
            Keep the alias list in sync.
        * html/HTMLFormElement.h:

2007-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4990050> REGRESSION: onchange gets fired when clicking on a programmatically selected element in a listbox
        http://bugs.webkit.org/show_bug.cgi?id=12725

        Test: updated fast/forms/listbox-onchange.html

        Added HTMLSelectElement::saveLastSelection that is called before changing a selection that could result
        in onChange being called.  m_lastOnChangeIndex and m_lastOnChangeSelection no longer have to be up-to date all the time, 
        they just have to be up-to-date before we execute an action that may trigger onChange.

        * html/HTMLOptionElement.cpp: (WebCore::HTMLOptionElement::setSelectedState): Added.
          The HTMLSelectElement will only set an option's selected state with this method.  This ensures
          that notifyOptionSelected won't get called when the call originates from the select element.
        * html/HTMLOptionElement.h:

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::deselectItems): Calls setSelectedState.
        (WebCore::HTMLSelectElement::setSelectedIndex): ditto. Don't update the last selection variables here.  Scroll to the new selection.
         The scrolling call used to only be in notifyOptionSelected.  There's no reason we shouldn't scroll when the selection is set through
         the HTMLSelectElement.
        (WebCore::HTMLSelectElement::setValue): Call setSelectedIndex to update all options selected state.
        (WebCore::HTMLSelectElement::restoreState): Call setSelectedState.
        (WebCore::HTMLSelectElement::selectAll): Call saveLastSelection before making the selection, and calling onChange.
        (WebCore::HTMLSelectElement::recalcListItems): Call setSelectedState.  Don't need to save selection here anymore, 
         since it will get saved before we call onChange.
        (WebCore::HTMLSelectElement::reset): ditto.
        (WebCore::HTMLSelectElement::dispatchFocusEvent): Added. Call saveLastSelection for menu lists, since onChange can be fired
         on blur.
        (WebCore::HTMLSelectElement::dispatchBlurEvent): Call menuListOnChange.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Call saveLastSelection before showing the popup window.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):  Call saveLastSelection during mousedown (to prepare for an 
         onchange during mouseup, or after autoscroll).
        (WebCore::HTMLSelectElement::updateListBoxSelection): Call setSelectedState.

        (WebCore::HTMLSelectElement::menuListOnChange): Added. Compares the m_lastOnChangeIndex to the selectedIndex().
        (WebCore::HTMLSelectElement::listBoxOnChange): Move the m_lastOnChangeSelection creation to saveLastSelection.
        (WebCore::HTMLSelectElement::saveLastSelection): Added. Sets m_lastOnChangeIndex or m_lastOnChangeSelection.
        * html/HTMLSelectElement.h:
        * platform/PopupMenu.h:

2007-03-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.

        The old canSaveAsWebArchive call was necessary as stand alone
        images used to be rendered by ImageDocument.

        Fixes rdar://problem/5061252

        * dom/Clipboard.cpp:
        * dom/Clipboard.h:
        (WebCore::Clipboard::setDragHasStarted):
        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteDragImage):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::declareAndWriteDragImage):

2007-03-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4869095>
        default content type changed for XMLHttpRequest POSTs changed (breaks Flickrator 0.1 widget)
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2007-03-16  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Tim Hatcher

        Update the hash table header for Window object properties

        * bindings/js/kjs_window.cpp:

2007-03-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/5061826> and
        http://bugs.webkit.org/show_bug.cgi?id=12863
        Implement window.stop()

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction): Add case Window::Stop
        * bindings/js/kjs_window.h:
        (KJS::Window::): Add "Stop"

2007-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.

        Fixed dir creation to account for already existing dirs and missing leading
        dirs in path.
        
        * loader/icon/IconDatabase.cpp:
        (WebCore::makeAllDirectories):

2007-03-16  David Hyatt  <hyatt@apple.com>

        Fix for 13084, assertion failure in the Cache.  Convert the client list
        to a HashCountedSet so that multiple refs and derefs are allowed.

        Fix RenderImage so that if it has the same image used as a background/border
        and as the foreground that it will repaint properly (can be tested using
        border-image and a foreground image).

        Optimize list marker so that it doesn't waste time in the base class method,
        since list markers don't support background or border images.

        Reviewed by andersca

        * ChangeLog:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::ref):
        * loader/CachedResource.h:
        * loader/CachedResourceClientWalker.cpp:
        (WebCore::CachedResourceClientWalker::CachedResourceClientWalker):
        * loader/CachedResourceClientWalker.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::imageChanged):

2007-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Fixed <rdar://problem/5065399> REGRESSION: leaks in Frame::bindingRootObject 
        seen on buildbot

        The problem was that we were initializing the same WebScriptObject twice.
        This caused it to leak its original set of ivars.
        
        I think some refactoring could prevent this situation from arising in the
        first place, but I'm just adding a check at the call site for now, to do 
        the simplest thing.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _setImp:originRootObject:rootObject:]): Added ASSERTs
        against multiple calls.

        * bindings/objc/WebScriptObjectPrivate.h: Renamed _initializeWithObjectImp
        to setImp because "init" vs "initialize" was a too subtle indication that
        one was a Cocoa initializer and one was not.

2007-03-16  Lars Knoll <lars@trolltech.com>

        don't use #import in .cpp files.

        * editing/qt/EditorQt.cpp:

2007-03-16  Lars Knoll <lars@trolltech.com>

        Fix the Qt build once again.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::clear):

2007-03-15  Shrikant Gangoda  <shrikant.gangoda@celunite.com>

        Gdk build fix.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::blockedError):
        * loader/gdk/FrameLoaderClientGdk.h:

2007-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13088 REGRESSION
        (r19761-19779): Copy image no longer includes image address 
        (rdar://5067927)

        writeURL() does not need an isImage parameter. Now that it accepts 
        the types as a parameter, we can just declare the appropriate image 
        types within writeImage and send them to writeURL(). Also, 
        declaring the types twice is what broke this.

        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2007-03-15  Adele Peterson  <adele@apple.com>

        Reviewed by Kevin Decker.

        Fix for <rdar://problem/4926179> Text in menulist control should never update if menu is open

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::updateFromElement):
          Only setTextFromOption if the menu isn't visible.

2007-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        A few platform specific tweaks

        * platform/cf/RetainPtr.h:
        (WebCore::RetainPtr::releaseRef): Fixed releaseRef to work with CF
        
        * platform/network/ResourceHandle.h: Added a "releaseRef" style call

2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Steve.

        * config.h: Remove unneeded hack.

2007-03-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/5062376> 
        REGRESSION: In Mail and Gmail, can't change alignment to text after it has been applied
        
        Bring back the remove step in applyBlockStyle.  It's 
        necessary because addBlockStyleIfNeeded assumes that 
        the properties it adds aren't already on the block that 
        it adds them to.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): 
        Bring back the remove step (added a testcase).
        Don't do the add step if m_removeOnly is true (no testcase
        because there aren't any clients using removeOnly functionality
        to remove styles yet, only styled elemets).
        Moved the code for creating new blocks up one level
        to this function so that we can pass blocks to removeCSSStyle.
        When converting VisiblePositions to indices and vice versa,
        use the highest node in the shadow tree if we're in one as
        the scope (working on a testcase).
        (WebCore::ApplyStyleCommand::addBlockStyle): Moved code to
        applyBlockStyle.
        * editing/ApplyStyleCommand.h: 

2007-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/4429701>
        Implements a port blocking black list that matches Firefox's

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::blockedError): Call through to the client for blockedError 
        * loader/FrameLoader.h:

        * loader/FrameLoaderClient.h: Get the "port blocked" error for the current platform

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::wasBlocked): ResourceHandleClient method to pass on the didFail(error)
        (WebCore::ResourceLoader::blockedError): Following the pattern of "CancelledError()", get the 
          error to fail with for the didFail() call
        * loader/ResourceLoader.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::blockedError): Added stub

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create): If the port is blocked, create the handle but schedule it for
          deferred failure on a timer
        (WebCore::ResourceHandle::scheduleBlockedFailure): Do the timer scheduling
        (WebCore::ResourceHandle::fireBlockedFailure): Fire the timer here
        (WebCore::ResourceHandle::portAllowed): Implements checking of Mozilla's
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::wasBlocked): Virtual for clients to get the "blocked" message

2007-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5065396> REGRESSION: leaks in 
        RenderBlock::layoutInlineChildren seen on buildbot

        This leak appeared after http://trac.webkit.org/projects/webkit/
        changeset/20188. This change shifted line boxes around in 
        removeChild(). But since removeChild() calls 
        setNeedsLayoutAndMinMaxRecalc(), all of the line boxes will be 
        removed once we actually lay out anyway. So this patch fixes the 
        leak by deleting the line boxes instead of shifting them around. 

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph): Call into 
        updateLayout(). This fixes an assertion I got in editing/
        execCommand/4976800.html This is very similar to the line box fix I 
        made recently (http://trac.webkit.org/projects/webkit/changeset/
        20177). We need to update layout before relying on VisiblePositions 
        after removing a node.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLinesForBlock): New helper function 
        since this functionality is needed in three places now.
        (WebCore::RenderBlock::makeChildrenNonInline): Call into new 
        deleteLinesForBlock().
        (WebCore::RenderBlock::removeChild): Same.
        * rendering/RenderBlock.h:

2007-03-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        * Factored out most of our common build settings into .xcconfig files. Anything that was common in
          each build configuration was factored out into the shared .xcconfig file.
        * Adds a Version.xcconfig file to define the current framework version, to be used in other places.
        * Use the new $(BUNDLE_VERSION) (defined in Version.xcconfig) in the preprocessed Info.plist.
        * Use the versions defined in Version.xcconfig to set $(DYLIB_CURRENT_VERSION).

        * Configurations/Base.xcconfig: Added.
        * Configurations/DebugRelease.xcconfig: Added.
        * Configurations/Version.xcconfig: Added.
        * Configurations/WebCore.xcconfig: Added.
        * Info.plist:
        * WebCore.xcodeproj/project.pbxproj:

2007-03-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::handleKeypress):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::loadPlatformResource):

2007-03-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        ~2x speed up of 5k rich text paste:
        http://shakespeare.mit.edu/hamlet/full.html        

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Remove the top 
        level style span if it's unnecessary before inserting
        into the document, it's faster than doing it after.
        * editing/ReplaceSelectionCommand.h: Exposed 
        ReplacementFragment::removeNodePreservingChildren so that
        the style span can be removed using non-undoable removes,
        like the rest of the removes done on the ReplacementFragment.
        * editing/markup.cpp:
        (WebCore::createMarkup): Make the style span the top level
        element, otherwise it's useless.  This also facilitates the
        optimization mentioned above.
        When including markup for a fully selected root, include markup
        for all the nodes beneath that fully selected root, to preserve 
        the structure and appearance of the copied markup.  Did this
        by merging with the code for adding markup for descendants of
        special commonAncestorBlocks.

2007-03-15  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Adele.

        Rolling out http://trac.webkit.org/projects/webkit/changeset/20148 
        (which is a fix for http://bugs.webkit.org/show_bug.cgi?id=12595 
        and rdar://4722863) because it causes a horrible memory-trasher. 

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName):
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/kjs_dom.cpp:
        (KJS::):
        (KJS::DOMNamedNodesCollection::DOMNamedNodesCollection):
        (KJS::DOMNamedNodesCollection::lengthGetter):
        (KJS::DOMNamedNodesCollection::indexGetter):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/kjs_dom.h:
        (KJS::DOMNamedNodesCollection::classInfo):
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollection::getNamedItems):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::item):
        (WebCore::NameNodeList::nodeMatches):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::rootNodeAttributeChanged):
        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::nodeMatches):
        (WebCore::Node::registerNodeList):
        (WebCore::Node::unregisterNodeList):
        * dom/Node.h:
        * dom/NodeList.cpp:
        (WebCore::NodeList::NodeList):
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::recursiveLength):
        (WebCore::NodeList::itemForwardsFromCurrent):
        (WebCore::NodeList::itemBackwardsFromCurrent):
        (WebCore::NodeList::recursiveItem):
        (WebCore::NodeList::itemWithName):
        (WebCore::NodeList::rootNodeChildrenChanged):
        * dom/NodeList.h:
        (WebCore::NodeList::rootNodeAttributeChanged):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::formData):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::removeFormElement):
        * html/HTMLFormElement.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::parseMappedAttribute):
        (WebCore::HTMLGenericFormElement::insertedIntoTree):
        * html/HTMLGenericFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):

2007-03-15  Geoffrey Garen  <ggaren@apple.com>

        Added an assert to help catch a bug. Hopefully someone will hit it!
        
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):

2007-03-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Fix for rdar://problem/5061737.
        
        This was a regression from the original Objective-C -> C++ conversion
        for the drag logic.  We don't need to call Range::startNode as we just
        need the document that contains the range.   

        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):

2007-03-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=13071
          REGRESSION: Plain text files no longer wrap lines longer than the width of the browser window

        Test: fast/loader/text-document-wrapping.html

        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write): Specified word-wrap:break-word for the <pre> element.

2007-03-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13072
          REGRESSION (r15617): white-space: pre-wrap breaks off the last character of a wide word

        Test: fast/text/whitespace/pre-wrap-last-char.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Undid the change from r15617.

2007-03-14  David Hyatt  <hyatt@apple.com>

        Add asserts to help catch double refs and double derefs of CachedResources.

        Reviewed by mjs

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::ref):
        (WebCore::CachedResource::deref):

2007-03-14  Alice Liu  <alice.liu@apple.com>

        Rubber-stamped by Hyatt.

        Adding null check to prevent the crash that happens on 2nd run of iBench HTML load test

        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::writeToDatabase):

=== Safari-5522.4 ===

2007-03-14  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5062898> REGRESSION: autocomplete window in text fields doesn't come up

        When we moved the initialization of a bunch of variables in the HTMLFormElement constructor, m_autocomplete accidently got initialized to false.

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

2007-03-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Added missing null check in case this is called on a subframe
        that hasn't started loading.

        * page/Frame.cpp:
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted): Check for a null document.

2007-03-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13060
        REGRESSION: Repro ASSERT failure in Cache::adjustSize running layout tests
        <rdar://5060208>
        
        Script evaluation may have dereffed the CachedScript object already, causing double deref and
        eventually m_liveResourcesSize underflow.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::notifyFinished):

2007-03-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Added InsertTab, InsertBacktab, InsertLineBreak, and InsertNewline to the editing command table.
        Added Event parameter to execCommand, and to all of the enabled and exec functions.  Right now,
        the event is only used by the newly added commands.  But in the future, many (and possibly all) of
        these editing commands will need to consider the event so they are applied to the correct selection.

        * WebCore.exp:
        * editing/Editor.cpp:
        (WebCore::execCopy):
        (WebCore::execCut):
        (WebCore::execDelete):
        (WebCore::execBackwardDelete):
        (WebCore::execForwardDelete):
        (WebCore::execMoveBackward):
        (WebCore::execMoveBackwardAndModifySelection):
        (WebCore::execMoveUpByPageAndModifyCaret):
        (WebCore::execMoveDown):
        (WebCore::execMoveDownAndModifySelection):
        (WebCore::execMoveForward):
        (WebCore::execMoveForwardAndModifySelection):
        (WebCore::execMoveDownByPageAndModifyCaret):
        (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::execPaste):
        (WebCore::execSelectAll):
        (WebCore::execToggleBold):
        (WebCore::execToggleItalic):
        (WebCore::execRedo):
        (WebCore::execUndo):
        (WebCore::execInsertTab):
        (WebCore::execInsertBacktab):
        (WebCore::execInsertNewline):
        (WebCore::execInsertLineBreak):
        (WebCore::enabled):
        (WebCore::canPaste):
        (WebCore::hasEditableSelection):
        (WebCore::hasEditableRangeSelection):
        (WebCore::hasRangeSelection):
        (WebCore::hasRichlyEditableSelection):
        (WebCore::canRedo):
        (WebCore::canUndo):
        (WebCore::CommandEntry::):
        (WebCore::Editor::toggleBold):

        (WebCore::Editor::execCommand): Added optional event parameter.
        (WebCore::Editor::insertText): Added.  Calls handleTextInputEvent.
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Renamed from insertText.
         Performs the actual insertion without dispatching any event.
        * editing/Editor.h:
        * page/EventHandler.cpp: (WebCore::EventHandler::defaultTextInputEventHandler):
          Call insertTextWithoutSendingTextEvent.

2007-03-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        ~3x speedup pasting 5k lines of rich text:
        http://shakespeare.mit.edu/hamlet/full.html
        ~2x speedup pasting 10k lines of plain text
        
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedStyle): Added for convenience.
        * css/CSSComputedStyleDeclaration.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
        The code that pushed down the top level style span had
        a bug in it that made it do unnecessary work.  Instead of
        fixing the bug I removed the code because it was used to 
        help see more redundancies in second level style spans, but 
        createMarkup now *only* creates a top level style span.
        Only remove redundant styles from style spans and only remove
        unstyled elements if they are style spans.  FF doesn't
        remove redundant styles from elements, or remove redundant 
        font tags on copy/paste.  We could offer this functionality 
        through a separate "cleanup" command.
        * editing/markup.cpp:
        (WebCore::createMarkup): Only add markup for ancestors of 
        lastClosed if we're including markup for acommonAncestorBlock 
        (we do this for commonAncestorBlocks like tables and lists),
        otherwise it's unnecessary/redundant.

2007-03-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Ada.

        Make sure to call ResourceLoader::didReceiveData to ensure that there's a shared buffer with the resource
        data, since SubresourceLoaderClients now make use of that buffer.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):

2007-03-14  Administrator  <acarlsson@apple.com>

        Get the size from the shared buffer.
        
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2007-03-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt, thumbs up by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12782
          Reproducible crash in BidiContext::deref

        Test: fast/dynamic/anonymous-block-orphaned-lines.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Added an assertion that we return a root inline box.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild): Added code to adopt the line boxes of
        anonymous blocks being destroyed instead of leaving them orphaned, which
        is what caused this crash. The boxes will be deleted on the next layout, but
        this ensures consistency in the mean time.

2007-03-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Antti.

        Fix the Qt build.
        Add a getter to SharedBuffer that returns a reference to the internal
        Vector to avoid an extra copy of the data.

        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::buffer):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::detectImageFormat):
        (WebCore::createDecoder):
        (WebCore::ImageSource::setData):

2007-03-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.
        
        Fix <rdar://problem/5058774>
        REGRESSION: In Mail, caret appears oversized when typing in a To Do note
        
        Horizontal and vertical were switched. Was regression from
        http://trac.webkit.org/projects/webkit/changeset/20103

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):

2007-03-14  David Hyatt  <hyatt@apple.com>

        Tweak the data() functions of stylesheets and scripts to be internally consistent.

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):

2007-03-14  David Hyatt  <hyatt@apple.com>

        Fix Radar 5050688.  

        For large animated GIFs, destroy and recreate the source for every animation frame.  This keeps
        the memory consumption down while giant images are animating.

        Reviewed by andersca

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:

2007-03-14  David Hyatt  <hyatt@apple.com>

        Make sure to use CFDataCreateWithBytesNoCopy where we can.

        Reviewed by andersca

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2007-03-13  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 13050 and also radar p1 5050645.

        This patch reworks resource loading to avoid having redundant buffers in the icon database and in cached
        images in the WebCore cache.  It also avoids overcopying in top-level image documents and in the icon
        database.

        There is now only one SharedBuffer for a resource and everybody observes that buffer now instead of ever
        making their own.  Even ImageIO uses the SharedBuffer while decoding.

        The page in 13050 dropped from 145mb down to 45mb of memory use with this change for a stunning savings
        of 100mb.

        Reviewed by olliej, mjs

        * WebCore.exp:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/CachedResource.h:
        (WebCore::CachedResource::data):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedScript.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::writeRawData):
        (WebCore::ImageTokenizer::finish):
        * loader/icon/IconDataCache.cpp:
        (WebCore::IconDataCache::setImageData):
        (WebCore::IconDataCache::writeToDatabase):
        * loader/icon/IconDataCache.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setHaveNoIconForIconURL):
        (WebCore::IconDatabase::imageDataForIconURLQuery):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didReceiveData):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::finishLoading):
        (WebCore::IconLoader::clearLoadingState):
        * loader/icon/IconLoader.h:
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::getColumnBlobAsVector):
        (WebCore::SQLStatement::isExpired):
        * loader/icon/SQLStatement.h:
        * loader/loader.cpp:
        (WebCore::Loader::didFinishLoading):
        (WebCore::Loader::didReceiveData):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::isEmpty):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::setData):
        * platform/graphics/Image.h:
        (WebCore::Image::dataChanged):
        (WebCore::Image::data):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
        * platform/mac/PasteboardMac.mm:
        (WebCore::fileWrapperForImage):

2007-03-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5046875> 
        Gmail Editor: Applying alignment to selected text in message also applies alignment to signature

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::doApply): Don't call applyBlockStyle unless
        there is a block style to apply.
        (WebCore::ApplyStyleCommand::applyBlockStyle): Don't do the remove step.
        It was unnecessary and removed properties from blocks that could contain 
        content outside the range being operated on (added a testcase).
        (WebCore::ApplyStyleCommand::addBlockStyleIfNeeded): Used an early return
        instead of if-nesting.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        Return the new block, if one was created.  Use moveParagraphs to move
        paragraphs into the new block, instead of moving nodes.  The old code moved
        too much (added a testcase).
        * editing/CompositeEditCommand.h:

2007-03-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        To fix <rdar://problem/5044366> we now pass a NSString
        representation of the URL extracted with _web_originalDataAsString
        instead of relying on [NSURL absoluteString] in the bridge

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):

2007-03-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/5048818> - REGRESSION: Incompletely loaded resources being saved to the object cache

        Due to a subtle change in loader behavior back in 10904, we would stop all loaders before calling 
        didFail() on them in the Cache loader.  As a result, we basically cleared all of the Subresource Loaders 
        out of the Cache loader before more properly failing them as errored out.  The result?  Partially loaded
        resources being cached.
        
        Since Loader::didFail() both calls error() on the object *and* removes the loader, the solution is to call 
        didFail() for all cancelled loaders instead of *only* removing them from the set of active loaders.
        
        In addition, pages that didn't completely load were being saved to the back/forward cache.  To fix that,
        I added a null check on the DocumentLoader's error to see if the page ended in an error, or did indeed 
        completely load.

        Note that the layout test for this - if possible - will require other enhancements including possibly adding
        support for window.stop().  That task is documented in <rdar://problem/5061826>

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted): Fixed a few bugs relating to my original BFCache rewrite to
          more perfectly restore the original behavior - including only caching HTML documents via the 
          m_client->canCachePage() call
        (WebCore::FrameLoader::canCachePage): Don't make the call to m_client->canCachePage() as that serves a different
          purpose
          - Check the mainDocumentError to see if the load ended in error as a further criteria in determining the 
          cachability of a page

        * loader/loader.cpp:
        (WebCore::Loader::cancelRequests): Call didFail(cancelledError()) instead of just removing the loaders from the 
          loaders-in-progress set.  This adds the effect of properly cleaning up the cached object.

2007-03-13  Beth Dakin  <bdakin@apple.com>

        Rendering part reviewed by Hyatt. Editing part consulted with and 
        rubber stamped by Justin and Harrison.

        Fix for <rdar://problem/5025925> A hang occurs in Safari when 
        attempting to print page at http://www.pcadvisor.co.uk

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline): 
        RenderBlock::makeChildrenNonInline() takes a block's inline 
        children and turns them into block children. If the children had 
        line boxes, those boxes were being leaked. In the layout test I 
        added with the change (and at pcadvisor.co.uk during printing) 
        children were being made non-inline, and then they were being made 
        inline again. This meant that some of the children ended up 
        pointing to totally stale line boxes that are normally just leaked. 
        This caused an infinite loop in RenderFlow::destroy(). This patch 
        simply deletes everyone's line boxes in 
        RenderBlock::makeChildrenNonInline()

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): The other part 
        of this fix is that I added a call to updateLayout in 
        InsertParagraphSeparatorCommand::doApply(). One layout test 
        (editing/spelling/spelling.html) was changed by my patch to 
        RenderBlock. doApply() inserts a node into the render tree. In at 
        least one case in spelling.html, that caused some line boxes to be 
        deleted. Back in doApply() this meant that the RenderTree was out-
        of-date, and we mistakenly thought we were at the end of the 
        paragraph. This caused us to insert a RenderBR() at the end of the 
        tree instead of an empty RenderText(). No one seems to know exactly 
        why we insert either, or if the change is necessarily a problem. It 
        is clear, though, that the RenderTree in doApply() is out-of-date 
        after inserting the node and deleting some line boxes, so it seems 
        prudent to call into updateLayout().

2007-03-13  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        * platform/FontData.h: Added m_isSystemFont parameter to match NSFont.

2007-03-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Export DocumentLoader::setFrame(). Part of fix for <rdar://
        problem/4277074> 8F32: Help Viewer crashed on clicking link - 
        KHTMLView::viewportMouseReleaseEvent (12647)

        * WebCore.exp:

2007-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12794
          <rdar://problem/5028154> REGRESSION: TripTik planner at aaa.com never
          finishes loading due to unclosed canvas tag (12794)

        Change <canvas> elements so that their contents are parsed normally,
        but not rendered. This change fixes the bug, because normal parsing
        rules close the <canvas> element in that case. The special parser
        stuff was just getting in the way.

        Also do some basic cleanup to the HTML parser. This was motivated by
        an earlier version of this patch that made even more changes to the
        parser, but the cleanup is still worth landing.

        Test: fast/canvas/canvas-hides-fallback.html
        Test: fast/canvas/script-inside-canvas-fallback.html
        Test: fast/canvas/unclosed-canvas-1.html
        Test: fast/canvas/unclosed-canvas-2.html
        Test: fast/canvas/unclosed-canvas-3.html
        Test: fast/canvas/unclosed-canvas-4.html

        * html/HTMLCanvasElement.h: Added a data member to keep track of whether the
        renderer is a RenderHTMLCanvas or not.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createRenderer): If JavaScript is enabled, create
        a RenderHTMLCanvas. If it's not, let the default code create the default type
        of renderer, which will result in fallback content being visible. The
        RenderHTMLCanvas class already hides all of its children. Set the m_rendererIsCanvas
        boolean accordingly. Since the actual storage for the canvas is allocated lazily
        when you actually get a drawing context, we don't need to do anything special
        to prevent it when JavaScript is disabled; the relevant functions won't be called.
        (WebCore::HTMLCanvasElement::reset): Protect the code that manipulates the
        RenderHTMLCanvas with a check of m_rendererIsCanvas. This is the only code inside
        the DOM element that relies on the renderer type.

        * html/HTMLParser.h: Removed unneeded includes. Marked HTMLParser as
        Noncopyable. Changed the Document parameter to the constructor to instead
        be HTMLDocument. Renamed discard_until to m_skipModeTag for clarity.
        Removed unused noSpaces function and unneeded public doc() function.
        Moved data members all down to the end so you can see them together in order.
        Renamed map to m_currentMapElement and isindex to m_isindexElement.
        Removed unused end and headLoaded data members.  Renamed m_fragment to
        m_isParsingFragment to make it clearer that it's a boolean, not a fragment.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser): Changed to use member construction
        syntax instead of calling reset(). This is especially helpful in the
        fragment case, where calling reset() later on is illegal, so not using
        it in the constructor lets us assert.
        (WebCore::HTMLParser::~HTMLParser): Did an explicit deref instead of
        calling setCurrent for its side effect.
        (WebCore::HTMLParser::reset): Updated for member name changes and removal
        and to use document instead of doc().
        (WebCore::HTMLParser::setCurrent): Use document instead of doc().
        (WebCore::HTMLParser::setSkipMode): Added. No longer inline. Now sets the
        m_inCanvasBeforeFirstOpenTag data member to false.
        (WebCore::HTMLParser::parseToken): Tightened up the skip mode logic at the
        top of the function, and added a FIXME about the strange case there where
        we don't skip yet stay in skip mode. Updated for renaming and doc().
        (WebCore::HTMLParser::insertNode): Updated for renaming and doc().
        (WebCore::HTMLParser::handleError): Ditto.
        (WebCore::HTMLParser::framesetCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::isindexCreateErrorCheck): Changed to use RefPtr.
        (WebCore::HTMLParser::noscriptCreateErrorCheck): Updated for renaming and doc().
        (WebCore::HTMLParser::mapCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::getNode): Removed the special case for canvas here.
        Canvas fallback is now handled in the DOM, not the parser. Updated for
        renaming and doc().
        (WebCore::HTMLParser::allowNestedRedundantTag): Changed a #define into a C++
        constant.
        (WebCore::HTMLParser::processCloseTag): Updated for renaming and doc().
        (WebCore::HTMLParser::isInline): Ditto.
        (WebCore::HTMLParser::tagIsOnStack): Added. Used by new canvas logic.
        (WebCore::HTMLParser::popBlock): Updated for renaming and doc(). Also renamed
        the local variable Elem to elem.
        (WebCore::HTMLParser::createHead): Ditto.
        (WebCore::HTMLParser::handleIsindex): Changed to use RefPtr.
        (WebCore::HTMLParser::startBody): Updated for renaming and doc().
        (WebCore::HTMLParser::finished): Ditto.

2007-03-13  David Hyatt  <hyatt@apple.com>

        Two more cleanup fixes to the cache.  Don't call destroyDecodedData in the BitmapImage destructor, since
        clearing the image source and calling setData on it again causes it to do an extra copy of the encoded
        data.  Since we're about to be destroyed this is just wasteful.

        When the cache prunes, don't allow it to destroy the decoded data of an image that is still actively loading,
        since we've established that ImageIO can actually crash if you yank the rug out from under it like that.

        Reviewed by ggaren

        * loader/Cache.cpp:
        (WebCore::Cache::prune):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage):

2007-03-13  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the Qt build.
        
        * editing/Editor.h:
        (WebCore::Editor::setStartNewKillRingSequence):

2007-03-13  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/5031181> cntl-k at end of paragraph adds nothing to the kill ring
        <rdar://problem/5031189> REGRESSION: cntl-y yanks only the most recently killed content

        For rdar://5031181, properly extend the selection before the killring handling, and
        make sure plainText of that selection returns a linefeed.
        
        For rdar://5031189, restore Editor::deleteRange() code that continued current killring,
        even though the range deletion implicitly stopped it via changing the selection.
        
        A byproduct of this change is the elimination of RUNDFINDER vs CONTENT TextIterator. The
        only difference between the two was whether to emit a newline when the range started
        with a blockflow element. No callers actually need that any more.

        Tests added:
        * editing/pasteboard/emacs-ctrl-k-y-001-expected.checksum: Added.
        * editing/pasteboard/emacs-ctrl-k-y-001-expected.png: Added.
        * editing/pasteboard/emacs-ctrl-k-y-001-expected.txt: Added.
        * editing/pasteboard/emacs-ctrl-k-y-001.html: Added.

        * editing/Editor.cpp:
        (WebCore::Editor::deleteRange):
        Clear the "start new kill ring sequence" setting, because it was set to true
        when the selection was updated by deleting the range.
        
        (WebCore::Editor::deleteWithDirection):
        If extending the selection to the end of paragraph resulted in a caret selection,
        extend by character, to handle the case when the selection started as a caret at
        the end of paragraph.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        Initialize new member variables for tracking handling of the beginning of the range.
        
        (WebCore::TextIterator::advance):
        Call representNodeOffsetZero on the m_endContainer.
        Move visibility checks into handleTextNode and handleReplacedElement.
        
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        Call emitText.
        
        (WebCore::TextIterator::handleReplacedElement):
        Moved visibility check into here.
        
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        (WebCore::TextIterator::representNodeOffsetZero):
        New. Emits proper sequence when encountering offset 0 of a node, including the
        m_endContainer. Started with code from handleNonTextNode.
        
        (WebCore::TextIterator::handleNonTextNode):
        Call representNodeOffsetZero.
        
        (WebCore::TextIterator::exitNode):
        Similar to shouldRepresentNodeOffsetZero, do not emit the newline if the node
        was collapsed, and before any other emitted content.
        
        (WebCore::TextIterator::emitCharacter):
        
        (WebCore::TextIterator::emitText):
        New. Consolidates code used by handleText and handleTextBox.
        
        (WebCore::CharacterIterator::CharacterIterator):
        Removed RUNFINDER.

        (WebCore::WordAwareIterator::WordAwareIterator):
        Removed RUNFINDER.
        
        (WebCore::WordAwareIterator::advance):
        Formatting.

        (WebCore::TextIterator::rangeLength):
        Formatting.
        
        * editing/TextIterator.h:
        Added member variables for tracking handling of the beginning of the range.
        Eliminated concept of RUNDFINDER vs CONTENT TextIterator.
        
        * editing/visible_units.cpp:
        (WebCore::nextBoundary):
        Eliminated concept of RUNDFINDER vs CONTENT TextIterator.

2007-03-13  David Hyatt  <hyatt@apple.com>

        Clean up the null image case in CachedImage::data to make sure the size totals will stay accurate.
        I'm not convinced this case can even be hit, but I'm cleaning it up just in case.

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

2007-03-13  David Hyatt  <hyatt@apple.com>

        Reorder the call to allReferencesRemoved, since otherwise the live object size will become
        incorrect.

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

2007-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=11083
        REGRESSION: Typing tab key fails to insert a tab character in Google Docs editable area
        <rdar://problem/4757650>
        
        Allow inserting tabs in designMode. Backtab behaves like before (matches FF).

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

2007-03-13  David Hyatt  <hyatt@apple.com>

        Fix two counting errors in the decoded size of objects in the WebCore cache.  We need to explicitly
        destroy decoded data when clearing out a partially loaded image that had an error, since the destructor
        (although it does destroy the data) disconnects the observer so that the notification doesn't happen.

        Some CachedImages aren't in the cache (like image documents).  When the decoded size of such an image
        changes we should not notify the cache, since - newsflash - we aren't actually in it.

        Reviewed by ggaren

        * loader/CachedImage.cpp:
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::decodedSizeChanged):

2007-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher and John Sullivan.

        - fix <rdar://problem/4915303> CrashTracer: 36 crashes in Safari at
          com.apple.AppKit: -[NSView getRectsBeingDrawn:count:] + 502

        * page/mac/FrameMac.mm: (WebCore::Frame::imageFromRect):
        This was calling drawRect: directly, but NSView's getRectsBeingDrawn:count:
        method was never really safe to call unless it was AppKit that called your
        drawRect: method. Changed it to call drawSingleRect: instead. A little ugly,
        but seems to work and will almost certainly fix the bug.

2007-03-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

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

        Call forgetGenericContext in JSSVGPathSeg destructor, otherwhise
        we'll hit an ASSERT in a debug build, when running svg/custom/js-update-path-changes.svg
        a few dozen times in a single WebKit instance. The ASSERT is good and just warns that
        there was already a generic context pointer registered, and the new "to be registered"
        object already exists, but pointing to a different object. That's because garbage collection
        calls the JSSVGPathSeg destructor, but that didn't cleanup the generic context map.

        Only JSSVGPathSeg is hit by this problem, as it's the only non SVGAnimated* type
        using the generic context system while using a custom JSSVGPathSegList implementation.

        Also cleanup JSSVGPathSegListCustom code to call the static forgetGenericContext
        method instead of doing the same using custom code.

        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::removeFromPathSegContextMap):
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::removeItem):
        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12595
          <rdar://problem/4722863> REGRESSION: Can't add item to cart at lnt.com
          (JS type error) (12595)

        Test: fast/forms/old-names.html

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::canGetItemsForName): If the form collection has
        nothing for a given name, try the form's oldNamedElement function.
        (WebCore::JSHTMLFormElement::nameGetter): Ditto.

        * bindings/js/kjs_dom.h: Removed the DOMNamedNodesCollection. Instead we will use
        a class derived from NodeList.
        * bindings/js/kjs_dom.cpp: Ditto.

        * bindings/js/kjs_html.cpp:
        (KJS::VectorNodeList::VectorNodeList): Added. Constructor for a new class derived
        from NodeList to be used for the named items result from a collection -- uses a
        vector of node pointers.
        (KJS::VectorNodeList::length): Added.
        (KJS::VectorNodeList::item): Added.
        (KJS::JSHTMLCollection::getNamedItems): Use VectorNodeList and the existing wrapper
        for NodeList rather than a custom JavaScript class, DOMNamedNodesCollection.

        * dom/ChildNodeList.h:
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList): Updated to derive from TreeNodeList,
        since NodeList is now a simpler class.
        (WebCore::ChildNodeList::elementMatches): Updated for name and parameter change.

        * dom/NameNodeList.h:
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList): Updated to derive from TreeNodeList,
        since NodeList is now a simpler class.
        (WebCore::NameNodeList::rootNodeAttributeChanged): Updated for name and
        parameter change.

        * dom/Node.h: Change register/unregister functions to take TreeNodeList.
        * dom/Node.cpp:
        (WebCore::TagNodeList::TagNodeList): Updated to derive from TreeNodeList,
        since NodeList is now a simpler abstract class.
        (WebCore::TagNodeList::elementMatches): Updated for name and parameter change.
        (WebCore::Node::registerNodeList): Changed type from NodeList to TreeNodeList.
        (WebCore::Node::unregisterNodeList): Ditto.

        * dom/NodeList.h: Broke NodeList into a simpler base class and a derived class
        with the machinery for iterating a tree, called TreeNodeList.
        * dom/NodeList.cpp:
        (WebCore::NodeList::~NodeList): Added.
        (WebCore::NodeList::itemWithName): Factored out of the old itemWithName.
        (WebCore::TreeNodeList::TreeNodeList): Renamed from NodeList.
        (WebCore::TreeNodeList::~TreeNodeList): Ditto.
        (WebCore::TreeNodeList::recursiveLength): Ditto.
        (WebCore::TreeNodeList::itemForwardsFromCurrent): Ditto.
        (WebCore::TreeNodeList::itemBackwardsFromCurrent): Ditto.
        (WebCore::TreeNodeList::recursiveItem): Ditto.
        (WebCore::TreeNodeList::itemWithName): Factored half of this into this function,
        the other half in NodeList::itemWithName.
        (WebCore::TreeNodeList::rootNodeAttributeChanged): Added. No longer inline.
        (WebCore::TreeNodeList::rootNodeChildrenChanged): Renamed from NodeList.

        * html/HTMLFormElement.h: Added formElementNameChanged and oldNamedElement
        fucntions, and a map called m_oldNames. Also removed m_boundary, which I
        thought I had already done.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Initialize m_oldNames to 0.
        Switched the rest of the members to initialization syntax.
        (WebCore::HTMLFormElement::~HTMLFormElement): Delete m_oldNames.
        (WebCore::HTMLFormElement::formElementNameChanged): Added. Stores a reference
        to one element under each of its old names.
        (WebCore::HTMLFormElement::oldNamedElement): Added. Returns the old element
        that once had a given name.

        * html/HTMLGenericFormElement.h:
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::parseMappedAttribute): When the name
        attribute changes, tell the form about the old name.
        (WebCore::HTMLGenericFormElement::insertedIntoTree): When telling a form
        about an element, also store away the old name so that we can use it
        when the name changes later.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Added a call to the
        base class in the nameAttr case, so the code in HTMLGenericFormElement
        above will get called in the input element case.

2007-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.

        Alexey spotted a DOS by using string of 64k unbreakable character in
        fix for http://bugs.webkit.org/show_bug.cgi?id=12833

        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):

2007-03-13  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCore.pro:

2007-03-13  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12576
        WebKit does not support xlink:show attributes

        Make an exception for non-empty targets, these should be opened
        in a new window, unless the value is _self.

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2007-03-13  David Hyatt  <hyatt@apple.com>

        - fix cache issues seen in http://bugs.webkit.org/show_bug.cgi?id=13050
          6 objects and ~200MB leaked after opening then closing tab
          <rdar://problem/5058714>

        Double the encoded size of images for now.  We do this to account for a bug in ImageIO where they hold
        a separate copy of image data.  See <rdar://problem/5050645>.

        Reviewed by aroben.

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

2007-03-12  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (SearchPopupMenu::enabled): add missing stub.

2007-03-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13045
          REGRESSION: Blackboard CourseWare Error with Nightlies after Mar 8

        * html/HTMLFormElement.cpp:
        (WebCore::getUniqueBoundaryString): Speculative fix: remove dashes from
        the boundary prefix that appear after non-dash characters.

2007-03-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13015
          REGRESSION (r17233-r17241): Repro crash when leaving a page whose unload handler submits a form

        Test: fast/loader/onunload-form-submit-crash-2.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading): Added null check.

2007-03-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4900071>
        http://bugs.webkit.org/show_bug.cgi?id=6454
        ASSERTION: Navigating 'back' in frameset: !_private->previousItem (6454)

        Change back the behavior of checkLoadComplete to traverse the entire frame tree instead of
        just the parent frames of the current frame. This is needed in order to reset the previous history item
        for all frames when doing a frame navigation. (This was changed in revision 11819)
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::recursiveCheckLoadComplete):
        (WebCore::FrameLoader::checkLoadComplete):
        * loader/FrameLoader.h:

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

        Reviewed by darin
        
        <rdar://problem/5056619> 
        REGRESSION: Gmail Editor: Dragging text into Reply (textarea) field results in a crash at WebCore::InsertNodeBeforeCommand::doApply()
        
        * editing/SelectionController.cpp:
        (WebCore::removingNodeRemovesPosition): Added.
        (WebCore::SelectionController::nodeWillBeRemoved): Clear the
        selection if it's inside a shadow tree.
        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret): Return false to signal to
        clients that a drop shouldn't be performed if the second attempt
        to set a selection ends up in non-editable content.

2007-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fixed JavaScript wrapper classes to be correct for a variety of cases
          that a new test uncovered: was broken for at least 5 classes

        - fixed Objective-C wrapper classes to be correct for a variety of cases
          that a test case uncovered: was broken for ast least 50 classes

        - added missing DOM API for creating OverflowEvent and WheelEvent instances

        Test: fast/dom/wrapper-classes.html

        * DerivedSources.make: Added missing bindings: HTMLCanvasElement for ObjC,
        CDATASection, Comment, and EntityReference for JavaScript.
        * WebCore.xcodeproj/project.pbxproj: Added those new generated files.

        * bindings/js/JSHTMLElementWrapperFactory.cpp:
        (WebCore::createJSHTMLWrapper): Corrected the wrapper classes for <keygen>,
        which needs an HTMLSelectElement wrapper, and <xmp>, which needs an
        HTMLPreElement wrapper.

        * bindings/objc/DOMInternal.h: Updated for new naming scheme.
        Also moved createDOMWrapper from the KJS namespace to the WebCore namespace.
        * bindings/objc/DOMUtility.mm:
        (KJS::createDOMWrapper): Broke the core function into a separate one, and
        left it in the KJS namespace because Objective-C++ rules make it impossible
        for it to work in the WebCore namespace. Used a macro-based implementation
        to cut down on repeated code, and added missing cases for Counter,
        HTMLOptionsCollection, Range, XPathExpression, XPathResult, Event, RGBColor,
        Rect, Window, DOMImplementation, NodeIterator, TreeWalker, and HTMLCollection.
        (WebCore::createDOMWrapper): The other half of the function.

        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Corrected the wrapper classes for
        <canvas>, which needs a DOMHTMLCanvasElement wrapper, <del>, which needs
        a DOMHTMLModElement wrapper, <embed>, which needs a DOMHTMLEmbedElement
        wrapper, <ins>, which needs a DOMHTMLModElement wrapper, <th>, which needs
        a DOMHTMLTableCellElement wrapper, and <xmp>, which needs an
        DOMHTMLPreElement wrapper.
        (+[DOMNode _wrapNode:]): Updated for new naming scheme.
        (+[DOMNode _wrapEventTarget:]): Ditto.
        (+[DOMNodeFilter _wrapNodeFilter:]): Ditto.
        (ObjCNodeFilterCondition::acceptNode): Ditto.
        (-[DOMDocument createNodeIterator:whatToShow:filter:expandEntityReferences:]): Ditto.
        (-[DOMDocument createTreeWalker:whatToShow:filter:expandEntityReferences:]): Ditto.
        (WebCore::ObjCEventListener::handleEvent): Ditto.

        * dom/Document.cpp: (WebCore::Document::createEvent):
        Added cases for OverflowEvent and WheelEvent.

        * dom/OverflowEvent.h: Added empty constructor and initOverflowEvent.
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::OverflowEvent): Added.
        (WebCore::OverflowEvent::initOverflowEvent): Added.
        * dom/OverflowEvent.idl: Added initOverflowEvent.

        * bindings/objc/PublicDOMInterfaces.h: Added initOverflowEvent.

        * bindings/objc/DOMCSS.mm:
        (+[DOMStyleSheet _wrapStyleSheet:]): Updated for new naming scheme.
        (+[DOMCSSRule _wrapCSSRule:]): Corrected wrapper for CSSUnknownRule.
        (+[DOMCSSValue _wrapCSSValue:]): Updated for new naming scheme.

        * bindings/js/kjs_css.h:
        (KJS::DOMRGBColor::impl): Added. Used when making an ObjC wrapper.
        (KJS::DOMRect::impl): Ditto.

        * bindings/js/kjs_dom.cpp: (KJS::toJS): Corrected the wrapper classes for
        CDATASection, Comment, and EntityReference.

        * bindings/js/kjs_html.cpp: Corrected the class name for HTMLElement
        (was "DOMHTMLElement") and HTMLCollection (was "Collection").

        * bindings/objc/DOMImplementationFront.h:
        * bindings/objc/DOMImplementationFront.cpp:
        (WebCore::implementationFront): Added new overload that returns a front given
        a JavaScript wrapper. Needed by the code that makes the Objective-C wrapper.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        Updated since createDOMWrapper is now in the WebCore namespace.

        * bindings/scripts/CodeGeneratorObjC.pm: Update the naming scheme for the
        wrapper creation functions to use _wrapElement: rather then _elementWith:
        style. Removed now-unneeded special cases for things that needed to stay
        upper-case, since we don't have to do the whole lcfirst thing.

        * html/HTMLCanvasElement.idl: Added #if so we can successfully generate the
        Objective-C wrapper for this class, even though we can't yet handle the
        DOMObject return type.

        * html/HTMLOptionsCollection.idl: Added GenerateNativeConverter so we get
        an appropriate toJS function.

        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _wrapEvent:]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument createDocumentFragmentWithMarkupString:baseURL:]):
        (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        * bindings/objc/DOMObject.mm:
        (-[DOMObject sheet]):
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        (+[DOMRGBColor _wrapRGBColor:]):
        * bindings/objc/DOMSVGPathSegInternal.mm:
        (+[DOMSVGPathSeg _wrapSVGPathSeg:]):
        * bindings/objc/DOMXPath.mm:
        (+[DOMNativeXPathNSResolver _wrapXPathNSResolver:]):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge nodesFromList:]):
        (-[WebCoreFrameBridge elementWithName:inForm:]):
        (-[WebCoreFrameBridge formForElement:]):
        (-[WebCoreFrameBridge currentForm]):
        (-[WebCoreFrameBridge controlsInForm:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        (-[WebCoreFrameBridge convertNSRangeToDOMRange:]):
        (-[WebCoreFrameBridge markDOMRange]):
        (-[WebCoreFrameBridge markedTextDOMRange]):
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]):
        (-[WebCoreFrameBridge documentFragmentWithMarkupString:baseURLString:]):
        (-[WebCoreFrameBridge documentFragmentWithText:inContext:]):
        (-[WebCoreFrameBridge documentFragmentWithNodesAsParagraphs:]):
        (-[WebCoreFrameBridge replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge replaceSelectionWithText:selectReplacement:smartReplace:]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge increaseSelectionListLevelOrdered]):
        (-[WebCoreFrameBridge increaseSelectionListLevelUnordered]):
        (-[WebCoreFrameBridge dragCaretDOMRange]):
        (-[WebCoreFrameBridge editableDOMRangeForPoint:]):
        (-[WebCoreFrameBridge characterRangeAtPoint:]):
        (-[WebCoreFrameBridge typingStyle]):
        (-[WebCoreFrameBridge rangeOfCharactersAroundCaret]):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::declareAndWriteDragImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        Updated for new naming scheme.

2007-03-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4990691> REGRESSION: Selecting text in Adium's Messages field causes horizontal shift

        Corrected the recursive point conversion and scrolling done in scrollPointRecursively to use the
        document view of each NSClipView.

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::scrollPointRecursively): Call convertPoint:fromView: on the document views,
        not the clip views as we encounter them. Then call constrainScrollPoint: on the converted point to
        constrain to the document view bounds. And finally call scrollPoint: on the document view, not the clip view.

2007-03-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12833
        REGRESSION: Selecting text in 6.6MB txt file is sluggish as of the Feb 19th nightly
        <rdar://problem/5028159>
        
        Divide large text blocks (>64kB) over multiple text nodes. This limits linebox searches to
        a manageable subset.
        
        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):

2007-03-12  David Hyatt  <hyatt@apple.com>

        Fix a regression in printing.  Printer fonts need to be part of the
        font cache key, since printer fonts have different glyph widths.
        (Integer antialiasing is used for screen fonts but not for printer fonts.)

        Reviewed by aroben

        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):

2007-03-12  Lars Knoll <lars@trolltech.com>

        add missing symbol to fix the Qt build again.

        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenu::enabled):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Adding the ability to enable or disable a SearchPopupMenu.

        * platform/SearchPopupMenu.h:
        * platform/mac/SearchPopupMenuMac.mm: (WebCore::SearchPopupMenu::enabled):
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::showPopup):

2007-03-12  Rob Buis  <buis@kde.org>

        Reviewed by Nikolas Zimmermann.

        http://bugs.webkit.org/show_bug.cgi?id=12500
        SVG fails to correctly handle all link style selectors
        http://bugs.webkit.org/show_bug.cgi?id=12567
        <text> elements ignore <a> children

        Allow <a> inside svg text and handle xlink:show.

        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer):
        (WebCore::SVGAElement::defaultEventHandler):
        (WebCore::SVGAElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::isTextContent):
        * ksvg2/svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::isTextContent):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):
        (WebCore::placeBoxesVerticallyWithAbsBaseline):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Add a missing parameter to the constructor.

        * platform/PlatformKeyboardEvent.h:
        * platform/win/KeyEventWin.cpp: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2007-03-12  Lars Knoll <lars@trolltech.com>

        Fix the Qt build. I still get crashes though :/

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::clearFrame):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        (WebCore::ImageSource::clear):
        (WebCore::ImageSource::destroyFrameAtIndex):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        * platform/qt/ClipboardQt.h:
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::createClipboard):

2007-03-11  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::respondToChangedSelection): add stub
        * platform/gdk/EditorClientGdk.h:
        * platform/gdk/FrameGdk.cpp:
        * platform/gdk/TemporaryLinkStubs.cpp:
        (Editor::markMisspellings): add stub

2007-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=12560
        W3C XPath test Text_Nodes.svg fails

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Revert the fix, as the behavior doesn't appear 
        all that desirable as it did at first glance.

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by hyatt.

        Fix for <rdar://problem/5055690> ASSERTION failure on drop into 
        editable element with content changed on drop 

        After setting the selection for a drop into an editable region 
        we make sure the we succeeded.  If we didn't we assume a focus handler
        or similar altered the element contents and try again, if the second
        attempt fails we bail out.

        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeDrag):

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Moving Frame{Mac}::respondToChangedSelection to Frame.cpp
        Added new EditorClient method to handle old bridge function
        
        * bridge/EditorClient.h:
           Added respondToChangedSelection to replace old bridge function
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
           Add client call to replace old bridge call from Frame::respondToChangedSelection
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
           No longer directly call Editor as Frame::respondToChangedSelection
           makes the call
        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection):
           Moved from FrameMac, replaced bridge call with call to Editor
        * page/mac/FrameMac.mm:
           Moved respondToChangedSelection to Frame.cpp
        * page/mac/WebCoreFrameBridge.h:
           Removed respondToChangedSelection from bridge
        * page/qt/FrameQt.cpp:
           Remove stub method for respondToChangedSelection

2007-03-11  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Brady Eidson.

        Linux/gdk fix.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::shouldGoToHistoryItem): return true so
        that FrameLoader:goBackOrForwards() works.

2007-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
        JSCore causes a hang @ www.panoramas.dk
        
        See JavaScriptCore ChangeLog for details.
        
        * bindings/objc/WebScriptObject.mm:
        (_didExecute): Added helpful ASSERT.
        (+[WebScriptObject throwException:]): Added missing JSLock.

2007-03-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        Optimize linebox memory consumption:
        - move all bitfields to baseclass compacting them
        - make InlineTextBox::m_truncation unsigned short and make it relative to m_start
        - remove extremely rarely used EllipsisBox pointer from RootInlineBox and instead
          use a global hashmap to store it if needed
        - use minimum required number of bits to store BidiStatus enum variables in RootInlineBox
        - move overflow variables in RootInlineBox to a separate struct that is instantiated
          only if any of the variables is set to a value that can't trivially be derived from 
          box x, y, width and height
          
        As a result line box objects shrink:
            InlineBox: 44 -> 44 bytes
            InlineTextBox: 68 -> 60 bytes
            InlineFlowBox: 68 -> 64 bytes
            RootInlineBox: 128 -> 88 bytes
            
        The optimizations possiblity was noticed when debugging http://bugs.webkit.org/show_bug.cgi?id=12833
        Bug 12833: REGRESSION: Selecting text in 6.6MB txt file is sluggish as of the Feb 19th nightly
        <rdar://problem/5028159>
        
        On that page the patch saves 11.5MB or some 21% of linebox memory consumption. It also
        actually improves selection performance somewhat by improving memory locality.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::throw):
        (WebCore::RootInlineBox::Overflow::operator delete):
        (WebCore::RootInlineBox::Overflow::destroy):
        (WebCore::RootInlineBox::destroy):
        (WebCore::RootInlineBox::detachEllipsisBox):
        (WebCore::RootInlineBox::clearTruncation):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::adjustPosition):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::setLineBreakInfo):
        (WebCore::RootInlineBox::ellipsisBox):
        (WebCore::RootInlineBox::setVerticalOverflowPositions):
        (WebCore::RootInlineBox::setHorizontalOverflowPositions):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::topOverflow):
        (WebCore::RootInlineBox::bottomOverflow):
        (WebCore::RootInlineBox::leftOverflow):
        (WebCore::RootInlineBox::rightOverflow):
        (WebCore::RootInlineBox::lineBreakBidiStatus):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::Overflow::Overflow):

2007-03-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        A partial fix for http://bugs.webkit.org/show_bug.cgi?id=13021
        XPath can be very slow

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate): Cache evaluationContext in a local variable.

        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::evaluationContext):
        * xml/XPathExpressionNode.h:
        (WebCore::XPath::Expression::addSubExpression):
        (WebCore::XPath::Expression::subExprCount):
        (WebCore::XPath::Expression::subExpr):
        * xml/XPathFunctions.cpp:
        * xml/XPathFunctions.h:
        (WebCore::XPath::Function::setName):
        (WebCore::XPath::Function::arg):
        (WebCore::XPath::Function::argCount):
        (WebCore::XPath::Function::name):
        Made one-liners critical for performance inline.

        * xml/XPathGrammar.y: Fully parse NodeTests, so that strings are no longer passed for what is
        essentially an enum. Use LocationPath accessors to add steps, instead of directly manipulating
        internal data members.

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::parseStatement):
        (WebCore::XPath::Parser::registerNodeTest):
        (WebCore::XPath::Parser::deleteNodeTest):
        * xml/XPathParser.h:
        Added support methods for changes in XPathGrammar.y.

        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate): Cache evaluationContext in a local variable. Use swap() to avoid
        performing vector assignments.
        (WebCore::XPath::LocationPath::evaluate): Use swap() to avoid performing vector assignments.
        (WebCore::XPath::LocationPath::optimizeStepPair): This new method is called during LocationPath construction, 
        to simplify the path as it's being built. Currently, the only optimized case is "//*" - it is a basis for
        important operations that cannot be efficiently written in XPath 1.0, but can be optimized with a little bit
        of XPath 2.0.
        (WebCore::XPath::LocationPath::appendStep): A new accessor that modifies m_steps and calls optimizeStepPair().
        (WebCore::XPath::LocationPath::insertFirstStep): Ditto.
        * xml/XPathPath.h:
        (WebCore::XPath::LocationPath::setAbsolute): A new accessor.

        * xml/XPathStep.h:
        (WebCore::XPath::Step::NodeTest::):
        (WebCore::XPath::Step::NodeTest::NodeTest):
        (WebCore::XPath::Step::NodeTest::kind):
        (WebCore::XPath::Step::NodeTest::data):
        Step::NodeTest is a new sub-class that represents a fully parsed NodeTest.
        (WebCore::XPath::Step::axis):
        (WebCore::XPath::Step::nodeTest):
        (WebCore::XPath::Step::nodeTestData):
        (WebCore::XPath::Step::namespaceURI):
        (WebCore::XPath::Step::predicates):
        (WebCore::XPath::Step::setAxis):
        (WebCore::XPath::Step::setNodeTest):
        (WebCore::XPath::Step::setNodeTestData):
        (WebCore::XPath::Step::setNamespaceURI):
        (WebCore::XPath::Step::setPredicates):
        New accessors that let optimizeStepPair() manipulate Step data.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::Step): Use the new NodeTest class.
        (WebCore::XPath::Step::evaluate): Cache evaluationContext in a local variable. Use swap() to avoid
        performing unneeded vector assignments.
        (WebCore::XPath::Step::nodesInAxis): Cosmetic changes.
        (WebCore::XPath::Step::nodeTestMatches): Use NodeTest instead of parsing the test from string each time.
        Added a partial implementation of XPath 2.0 element() node test.

2007-03-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12249
        FCKeditor: <hr>, <ul> and <ol> have id="undefined"

        This fixes the attached reduction, but not the original issue.

        Test: editing/execCommand/default-parameters.html

        * dom/Document.h:
        * dom/Document.idl:
        Make second and third execCommand() parameters optional.

2007-03-10  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=13028
        REGRESSION: textField:doCommandBySelector:inFrame: not being called properly

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler):
          Before calling the base class defaultEventHandler, which will call handleKeypress, call doTextFieldCommandFromEvent.        

2007-03-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13013
          REGRESSION: Selection box does not scroll to where the focus jumps when pressing an alphanumeric key

        Test: fast/forms/listbox-typeahead-scroll.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Reordered to set the active selection's
        anchor and end before selecting the option, since the active selection is used to
        decide where to scroll when the selection is made.
        (WebCore::HTMLSelectElement::defaultEventHandler): Removed redundant check.

2007-03-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12973
          REGRESSION: Reproducible assert while loading this test file if css is already in the cache

        Test: fast/dom/css-cached-import-rule.html

        Replaced some direct calls to document->stylesheetLoaded() with calls to
        the sheet's checkLoaded(). The latter calls back to the element's sheetLoaded() --
        which notifies the document of the load -- and then updates the sheet's
        loadCompleted() flag, ensuring that it stays in sync with whether the stylesheet
        is still considered pending by the document.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::childrenChanged):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::sheetLoaded):
        * ksvg2/svg/SVGStyleElement.h:

2007-03-10  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9609
          REGRESSION: Missing image icon needs to be moved back to WebKit

        * WebCore.exp: Export WebCore::Image::loadPlatformResource(const char*) for use in
        [WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:].

2007-03-09  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8928
          <rdar://problem/5045708> REPRODUCIBLE ASSERT: Cannot paste HTML into a
          contenteditable region in an XHTML document (8928)

        Test: editing/pasteboard/paste-xml.xhtml

        * editing/markup.cpp: (WebCore::createFragmentFromMarkup): Added a check for 0
        here, since createContextualFragment can return 0 for XML documents that fail
        to parse. In my testing, callers all seem equipped to handle 0.

2007-03-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9929
          REGRESSION: crash on logging in on mijnpostbank.nl

        Test: http/tests/misc/onload-remove-iframe-crash-2.html

        The resulted from an iframe's load event handler removing the iframe
        from the document.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Bail out early if an event handler
        removed the frame.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::checkCompleted): Protect the frame from deletion
        by event handlers.
        (WebCore::FrameLoader::checkCompletedTimerFired):
        (WebCore::FrameLoader::scheduleCheckCompleted):
        (WebCore::FrameLoader::detachFromParent): Schedule a completion check
        on the parent (in case the child is what has been keeping it from completing).
        * loader/FrameLoader.h:

2007-03-08  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13019
          REGRESSION (r20074): Forms don't submit on a variety of websites

        No tests added since LayoutTests/fast/forms/document-write.html was timing out
        and causing a layout test failure.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Removed stray code.

2007-03-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - gdk build fix.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex): add empty stub

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4903193> 
        On particular page, Copy is so slow it seems like a hang
        
        ~2x speedup copying:
        http://shakespeare.mit.edu/henryviii/full.html 
        Also produces less bloated markup.

        * editing/markup.cpp:
        (WebCore::startMarkup): Don't wrap text nodes in style spans.
        For Elements, don't inline styles inherited from ancestors.
        (WebCore::createMarkup): No longer necessary to find 
        the root's default style and pass it to startMarkup.
        Add a wrapper span around the markup with the styles
        that all nodes in the markup inherit (the inheritable 
        styles from the common ancestor container's computed style).
        Added a FIXME about unecessary markup for inline ancestors 
        up to the commonAncestorBlock.

2007-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - <rdar://problem/4470381> multipart/form-data boundary security vulnerability

        By making the form data boundary a string with some random data in it, we reduce
        the possibility that anyone could take advantage of it by creating a file that
        intentionally has the boundary string in it.

        * html/HTMLFormElement.h: Removed boundary(), setBoundary(), and m_boundary.
        Marked a lot more stuff private.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Removed code to initialize
        m_boundary.
        (WebCore::randomNumber): Added. Function that returns a random number, including
        seeding the random number generator the first time it's called. For now, usees the more
        random function random() on Mac OS X and the more-standard rand() on other platforms.
        (WebCore::HTMLFormElement::formData): Take a parameter with the form boundary string,
        and use that instead of m_boundary.
        (WebCore::getUniqueBoundaryString): Added. Makes a boundary string using random numbers
        and base 64 encoding.
        (WebCore::HTMLFormElement::submit): Call getUniqueBoundaryString and pass the boundary
        string into formData for multipart form posts.

2007-03-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        <rdar://problem/4646563> REGRESSION: Unable to send text message from Verizon text message website: vtext.com (12588)
        http://bugs.webkit.org/show_bug.cgi?id=12588

        Carefully revised which focus operations restore previous selection, which clear it, and which
        select the whole control contents.
        
        Tests:
        fast/forms/focus-selection-input.html
        fast/forms/focus-selection-textarea.html
        
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Element.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus):
        (WebCore::HTMLInputElement::accessKeyAction):
        * html/HTMLInputElement.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::focus):
        (WebCore::HTMLLabelElement::accessKeyAction):
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::focus):
        * html/HTMLLegendElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus):
        * html/HTMLTextAreaElement.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <http://bugs.webkit.org/show_bug.cgi?id=12244>
        FCKeditor: Find dialog doesn't work

        * bindings/js/kjs_window.cpp:
        (KJS::Window::find): Added.  This function doesn't yet 
        support whole word searches, searching in subframes, or
        opening the find dialog.
        (KJS::WindowFunc::callAsFunction):
        * bindings/js/kjs_window.h:
        (KJS::Window::):

2007-03-08  David Hyatt  <hyatt@apple.com>

        Fix regression from throwing away frames of large animated images.  Alter
        animated images so that they refuse to advance the animation until the
        current displayed frame has been fully decoded.

        Reviewed by ggaren

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2007-03-08  David Hyatt  <hyatt@apple.com>

        Fix 2% performance regression on the PLT.  Increase the large animated
        image cutoff from 1MB to 5MB.

        In addition when pruning we will aggressively discard image sources.

        Reviewed by ggaren

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2007-03-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        <rdar://problem/4664697> highlighter SPI needs a node parameter to give more context

        Pass the RenderObject's node to customHighlightLineRect and paintCustomHighlight.

        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::customHighlightLineRect):
        (WebCore::Frame::paintCustomHighlight):
        * page/mac/WebCoreFrameBridge.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paintCustomHighlight):

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=13000>
        Range.createContextualFragment is not supported

        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment): The
        "startContainer" may not be a container, if the
        range starts inside text.  In that case, look
        to the parent of the start node for an HTMLElement.

2007-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/5049671>
        Gmail Editor: With linked text, Remove Formatting doesn't always remove underline

        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Clear removed
        anchors after the deletion.

2007-03-08  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (build fix).

        Added missing file for r20059:
        <rdar://problem/4708689> -- REGRESSION: Some symbols with 2-byte display as garbage in Hotmail.

        File was taken from this svn repository which contained versions of ucnv.h and ucnv_err.h
        that were identical to ours:
        http://source.icu-project.org/repos/icu/icu/tags/release-3-2/source/common/unicode/ucnv_cb.h

        * icu/unicode/ucnv_cb.h: Added.

2007-03-08  Shrikant Gangoda  <shrikant.gangoda@celunite.com>

        Gdk build fix.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):

2007-03-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        To match old TEC behaviour when using ICU we need to use 
        a few manual fallback encodings for the GBK/EUC-CN charsets

        <rdar://problem/4708689> -- REGRESSION: Some symbols with 2-byte display as garbage in Hotmail.

        * platform/TextCodecICU.cpp:
        (WebCore::TextCodecICU::TextCodecICU):
        (WebCore::TextCodecICU::createICUConverter):
        (WebCore::gbkEscapes):
        (WebCore::gbkCallbackEscape):
        (WebCore::gbkCallbackSubstitute):
        (WebCore::TextCodecICU::encode):
        * platform/TextCodecICU.h:
        (WebCore::TextCodecICU::needsGBKFallbacks):
        (WebCore::TextCodecICU::setNeedsGBKFallbacks):

2007-03-08  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::stringValue):

2007-03-08  David Hyatt  <hyatt@apple.com>

        This patch dramatically reduces the memory consumed by animated images.  For large animated GIFs (defined for
        now as >1mb in terms of decoded frame buffer size), we will now aggressively flush previous frames of the
        animated GIF and just re-decode them on the fly if the animation loops.

        Whenever a large animated GIF has its animation reset, we will also just throw out everything and start
        the animation over (in order to get rid of any cached detritus held in the ImageSource).

        With this patch and the sample GIF used to test, WebKit's memory consumption went from 160MB down to 16MB.

        Reviewed by mjs

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::resetAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::clear):

2007-03-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13006
        XPath string-value is broken for some node types

        Test: fast/xpath/string-value.html

        * xml/XPathUtil.cpp:
        (WebCore::XPath::stringValue): Fix it :-)

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4981000> 
        http://bugs.webkit.org/show_bug.cgi?id=12634
        REGRESSION: crash loading web archive (12634)
        
        The reason this bug wasn't always reproducible is that it involved sending an event to a plugin while 
        the page was loading. Before we send the event to the plugin we defer loads. The problem was that
        MainResourceLoader::setDefersLoad would not work with data loads.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        Only set m_committed to false if we also have a valid unreachable URL.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::setDefersLoading):
        Make sure to stop and start data loads.

2007-03-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed.

        Gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::handleKeypress): renamed
        (WebCore::EditorClientGdk::handleInputMethodKeypress): add a stub
        * platform/gdk/EditorClientGdk.h:
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::destroyFrameAtIndex): add a stub

2007-03-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13004
        Repeatedly calling XPathExpression.evaluate() causes crashes or memory leaks

        Removed XPath::Expression::optimize() and related methods, since they were buggy and almost useless.
        Merged doEvaluate() into evaluate(), since this was all evaluate() was doing after the above changes.

        Test: fast/xpath/evaluate-twice.html

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::Expression):
        (WebCore::XPath::Expression::~Expression):
        * xml/XPathExpressionNode.h:
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLast::evaluate):
        (WebCore::XPath::FunPosition::evaluate):
        (WebCore::XPath::FunId::evaluate):
        (WebCore::XPath::FunLocalName::evaluate):
        (WebCore::XPath::FunNamespaceURI::evaluate):
        (WebCore::XPath::FunName::evaluate):
        (WebCore::XPath::FunCount::evaluate):
        (WebCore::XPath::FunString::evaluate):
        (WebCore::XPath::FunConcat::evaluate):
        (WebCore::XPath::FunStartsWith::evaluate):
        (WebCore::XPath::FunContains::evaluate):
        (WebCore::XPath::FunSubstringBefore::evaluate):
        (WebCore::XPath::FunSubstringAfter::evaluate):
        (WebCore::XPath::FunSubstring::evaluate):
        (WebCore::XPath::FunStringLength::evaluate):
        (WebCore::XPath::FunNormalizeSpace::evaluate):
        (WebCore::XPath::FunTranslate::evaluate):
        (WebCore::XPath::FunBoolean::evaluate):
        (WebCore::XPath::FunNot::evaluate):
        (WebCore::XPath::FunTrue::evaluate):
        (WebCore::XPath::FunLang::evaluate):
        (WebCore::XPath::FunFalse::evaluate):
        (WebCore::XPath::FunNumber::evaluate):
        (WebCore::XPath::FunSum::evaluate):
        (WebCore::XPath::FunFloor::evaluate):
        (WebCore::XPath::FunCeiling::evaluate):
        (WebCore::XPath::FunRound::evaluate):
        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate):
        (WebCore::XPath::LocationPath::evaluate):
        (WebCore::XPath::Path::evaluate):
        * xml/XPathPath.h:
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Number::evaluate):
        (WebCore::XPath::StringExpression::evaluate):
        (WebCore::XPath::Negative::evaluate):
        (WebCore::XPath::NumericOp::evaluate):
        (WebCore::XPath::EqTestOp::evaluate):
        (WebCore::XPath::LogicalOp::evaluate):
        (WebCore::XPath::Union::evaluate):
        * xml/XPathPredicate.h:
        * xml/XPathStep.cpp:
        * xml/XPathStep.h:
        * xml/XPathVariableReference.cpp:
        (WebCore::XPath::VariableReference::evaluate):
        * xml/XPathVariableReference.h:

2007-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Remove unused #import from Objective-C bindings and cleanup the order of #imports.

        * bindings/scripts/CodeGeneratorObjC.pm:

2007-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Make sure the baseURI attribute generates for private Objective-C bindings.

        * dom/Node.idl:

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4874059>
        REGRESSION: Painter IX:register - Crash in WebCore:: ResourceLoader::willSendRequest()

        If a load is done from inside of an error delegate method that is called because we cancel another load, 
        the first load should be ignored since this is what shipping WebKit does. 
        
        (Actually, it does load the page in the data source but doesn't do anything with it since the data source
        won't have a web frame).
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Just bail out if m_isStoppingLoad is true.

2007-03-07  David Hyatt  <hyatt@apple.com>

        Use CGImageRelease instead of CFRelease.

        Reviewed by aroben

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::FrameData::clear):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::destroyFrameAtIndex):

2007-03-07  David Hyatt  <hyatt@apple.com>

        Fix a regression where the cache size overflows because of a double
        subtraction per resource when they got removed from the cache.  Add an
        assert to adjustSize to detect this case in the future.

        Fix ImageSourceCG so that when we flush decoded data from our cache that
        we also flush it from the ImageSource.

        Reviewed by mjs

        * loader/Cache.cpp:
        (WebCore::Cache::adjustSize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        * platform/graphics/Image.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::destroyFrameAtIndex):

2007-03-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13002
          Incomplete repaint of inset outlines

        Test: fast/repaint/outline-inset.html

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

2007-03-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti.

        Reset mouse down/drag state variables on mouse button release
        
        Fixes <rdar://problem/5044654>: Drag out of some QuickTime plug-ins converting into image drag

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

2007-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=10871
        http://bugs.webkit.org/show_bug.cgi?id=12677
        <rdar://problem/4823129> REGRESSION: IME key events different in nightly
        <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm a clause in kotoeri

        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler): Call handleInputMethodKeypress before actually dispatching the keypress event
          so that input methods have a chance to handle the event.  
          If the input method handles the event (by marking or unmarking text), then we don't need to send the keypress event.
          If an input method doesn't handle the event, then we'll save the data we need to perform the correct action (like what text to insert or what selector to use) 
          when we dispatch the keypress event.

        * dom/KeyboardEvent.h: Added Mac-specific KeypressCommand struct, so we can store command info during handleInputMethodKeypress, and use it during handleKeypress.
        (WebCore::KeyboardEvent::keypressCommand):
        (WebCore::KeyboardEvent::setKeypressCommand):

        * bridge/EditorClient.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebCore::Editor::handleInputMethodKeypress): Added.
        * editing/Editor.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebCore::SVGEmptyEditorClient::handleInputMethodKeypress): Added.

2007-03-07  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12579
        WebKit fails SVG xml:base test

        Implement DOM3 properties baseURI and documentURI to fix
        the testcase in bug 12579.

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty):
        * bindings/js/kjs_domnode.h:
        (KJS::DOMNode::):
        * dom/Document.cpp:
        (WebCore::Document::documentURI):
        (WebCore::Document::setDocumentURI):
        (WebCore::Document::baseURI):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::baseURI):
        * dom/DocumentType.h:
        * dom/Element.cpp:
        (WebCore::Element::baseURI):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::baseURI):
        * dom/Node.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        (WebCore::SVGImageElement::attach):

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Remove some methods in FrameLoader that just calls down to the active document loader. Since each
        resource loader now has a pointer to its document loader, we can just call directly to the
        document loader.

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4576242> | http://bugs.webkit.org/show_bug.cgi?id=12586
        PAC file: malloc deadlock sometimes causes a hang @ www.apple.com/pro/profiles/ (12586)
        
        No test because this is very difficult to repro, and the new ASSERTs in 
        JavaScriptCore catch the underlying cause while running normal layout tests.
        
        This is a modified version of r14752 on the branch.
        
        The fix is to use a bit inside each node, instead of a hash table, to track 
        which node subtrees are in the process of being marked. This avoids a call 
        to malloc inside mark().
        
        * bindings/js/kjs_binding.cpp:
        (KJS::domObjects):
        (KJS::domNodesPerDocument):
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::mark):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:

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

        This patch reworks the WebCore memory cache to significantly reduce the amount of memory consumed by
        images in the cache and to enhance the accuracy of the cache size as an absolute bound for the objects
        contained within it.  WebCore's memory use over time should significantly improve as a result of these
        changes.

        Cached resources now have both an encoded size (the original data stream) and a decoded size (an estimate of
        the amount of memory consumed by an expanded version of that resource, e.g., the decoded frames of an image).
        Both sizes now count towards the total size of the object and towards the allowed memory cache total.

        By including both totals the reported size of resources will now be larger, and the cache will therefore become
        much more aggressive about flushing.

        Objects are stored in size-adjusted and popularity-aware LRU lists as before, but encoded size is now always
        used when determining the correct LRU list.

        The flush algorithm for the memory cache has been rewritten to first destroy decoded data before evicting
        resources.  By being able to compact its resources without evicting them, the memory cache can now hold many more
        unique resources (encoded) in the same amount of space.  Depending on how much of a hit we want to take from
        re-decoding images, the memory cache could in theory have its size significantly reduced now while still holding
        more resources than it did at the larger size!

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::prune):
        (WebCore::Cache::remove):
        (WebCore::Cache::lruListFor):
        (WebCore::Cache::adjustSize):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::allReferencesRemoved):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::destroyDecodedData):
        (WebCore::CachedImage::decodedSize):
        (WebCore::CachedImage::decodedSizeChanged):
        (WebCore::CachedImage::shouldPauseAnimation):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::deref):
        (WebCore::CachedResource::setEncodedSize):
        * loader/CachedResource.h:
        (WebCore::CachedResource::allReferencesRemoved):
        (WebCore::CachedResource::size):
        (WebCore::CachedResource::encodedSize):
        (WebCore::CachedResource::decodedSize):
        (WebCore::CachedResource::destroyDecodedData):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::~BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::pruneDecodedDataIfNeeded):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::setNativeData):
        (WebCore::BitmapImage::shouldAnimate):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::decodedSize):
        * platform/graphics/Image.cpp:
        (WebCore::Image::Image):
        * platform/graphics/Image.h:
        (WebCore::Image::destroyDecodedData):
        (WebCore::Image::decodedSize):
        (WebCore::Image::imageObserver):
        * platform/graphics/ImageAnimationObserver.h: Removed.
        * platform/graphics/ImageObserver.h: Added.
        (WebCore::ImageObserver::~ImageObserver):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage):
        * platform/graphics/svg/SVGImage.h:

2007-03-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        http://bugs.webkit.org/show_bug.cgi?id=12987
        Fix and import 4XPath test_numeric_expr.html

        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Negative::doEvaluate): Convert the argument to number.
        (WebCore::XPath::NumericOp::doEvaluate): Convert the arguments to numbers. Use a correct operation for mod.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Do not append parent node if there is none.
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toNumber): Do not convert to DeprecatedString just to trim whitespace and to convert to double.
        * platform/DeprecatedString.cpp:
        (WebCore::DeprecatedStringData::makeAscii): Added a FIXME about unreliable makeAscii() behavior.

2007-03-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        <rdar://problem/4619663> REGRESSION (NativePopup): Popup menu doesn't draw at the correct vertical position (9816)
        
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show): Make a temporary dummy view with the
        passed in rect, since AppKit will use the view bounds to determine
        what area to exclude when popping up a menu moved to the top of
        the screen.

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed all known crashers exposed by run-webkit-tests --threaded [*]. See 
        JavaScriptCore ChangeLog for more details.

        * bindings/js/kjs_binding.cpp:
        (KJS::domNodesPerDocument): Added thread safety ASSERT.
        (KJS::ScriptInterpreter::mark): Removed obsolete logic for marking unsafe
        objects when collecting on a secondary thread. The Collector takes care
        of this now.

        * bindings/js/kjs_binding.h:
        (KJS::DOMObject::DOMObject): Used new API for specifying that WebCore
        objects should be garbage collected on the main thread only.

        * bindings/js/kjs_window.cpp:
        (KJS::ScheduledAction::execute): Moved JSLock to cover implementedsCall() call,
        which, for some subclasses, ends up allocating garbage collected objects.
        (This fix was speculative. I didn't actually see a crash from this.)
        (KJS::Window::timerFired): Added JSLock around ScheduleAction destruction,
        since it destroys a KJS::List.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setException:]): Added JSLock. (This fix was speculative. 
        I didn't actually see a crash from this.)

        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame evaluateWebScript:]): Added JSLock. (This fix 
        was speculative. I didn't actually see a crash from this.)

        * dom/Document.cpp:
        (WebCore::Document::~Document): Added JSLock around modification to 
        domNodesPerDocument(), which can be accessed concurrently during garbage 
        collection.
        * dom/Node.cpp:
        (WebCore::Node::setDocument): ditto.
        
        [*] fast/js/toString-stack-overflow.html is an exception. --threaded mode
        crashes this test because it causes the garbage collector to run frequently,
        and this test crashes if you happen to garbage collect while it's running.
        This is a known issue with stack overflow during the mark phase. It's
        not related to threading.

2007-03-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12942
        Bug 12942: ASSERTION FAILURE: qantas.com.au changing selected item in <select> via JS

        Test: fast/dom/select-selectedIndex-bug-12942.html.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems): Reset m_lastOnChangeIndex when recalculating list items.
        * html/HTMLSelectElement.h:

2007-03-06  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Kevin Decker

        20,000!

        * ChangeLog: Point out revision 20,000

2007-03-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed.

        Gdk build fix.

        * loader/gdk/FrameLoaderClientGdk.cpp: update userAgent() signature.
        (WebCore::FrameLoaderClientGdk::userAgent):
        * loader/gdk/FrameLoaderClientGdk.h: ditto.

2007-03-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12986
          REGRESSION(NativeListBox): Listboxes not updated when resized dynamically

        Test: fast/forms/select-change-listbox-size.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute): Reattach on list box size change.

2007-03-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12885
          REGRESSION (r19696): Incomplete background repaint

        Tests: fast/repaint/content-into-overflow.html
               fast/repaint/overflow-into-content.html

        Changed repaintAfterLayoutIfNeeded() to take, in addition to the clipped overflow
        rect, the unclipped border box plus outline, and to repaint any areas that
        were added or removed from that box, in addition to any areas added or removed
        from the clipped overflow rect.

        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteClippedOverflowRect): Renamed getAbsoluteRepaintRect() to
        this.
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::checkForRepaintOnResize):
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::absoluteClippedOverflowRect):
        (WebCore::RenderObject::absoluteOutlineBox):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::absoluteClippedOverflowRect):
        (WebCore::RenderPath::absoluteRects):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
        (WebCore::RenderSVGContainer::absoluteRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteClippedOverflowRect):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        (WebCore::RenderSVGImage::absoluteClippedOverflowRect):
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/RenderSVGText.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absoluteClippedOverflowRect):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::absoluteClippedOverflowRect):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::absoluteClippedOverflowRect):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteClippedOverflowRect):
        * rendering/RenderText.h:

2007-03-06  Feng Qian  <feng@chromium.org>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=12720
        Bug 12720: Re-defining window.location.toString function keeps re-loading forever

        * bindings/js/kjs_window.cpp:
        Disallow replacing functions in LocationTable, and return early without updating URL.

2007-03-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        <http://bugs.webkit.org/show_bug.cgi?id=12686>
        REGRESSION: Bloglines.com Feeds tab cannot expand folders in TOT
        - Now all class constructors implement implementsHasInstance.

        * bindings/scripts/CodeGeneratorJS.pm:

2007-03-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Rob & Oliver.

        Preparations for the new SVG text engine.

        Handle baseline-shift / kerning css values correctly.
        Recognize missing svg presentation attribute "font-size-adjust".
        Add all missing svg<->css property mappings in mapToEntry().

        Doesn't affect any layout test (as these properties are not used w/o my text patch).
        While I'm at it, unify the macro names (RS_ -> SVG_RS_) & cleanup style a bit.

        * ksvg2/css/CSSPropertyNames.in:
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator==):
        (WebCore::SVGRenderStyle::inheritedNotEqual):
        (WebCore::SVGRenderStyle::inheritFrom):
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleTextData::StyleTextData):
        (StyleTextData::operator==):
        (StyleMiscData::StyleMiscData):
        (StyleMiscData::operator==):
        * ksvg2/css/SVGRenderStyleDefs.h:
        (WebCore::):
        (WebCore::StyleTextData::operator!=):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):

2007-03-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin
        
        <http://bugs.webkit.org/show_bug.cgi?id=12245>
        FCKeditor: Remove Format sometimes doesn't work
        <rdar://problem/4786404>
        Underline style is not removed from selection after performing Remove Format

        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Re-wrote this.

2007-03-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

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

        Guard against registering pending resources with empty id.
        Be careful with calling recalcStyle() in SVGUseElement, when change is "Detach" we
        have to use special code, as calling attach() on the shadow tree root element will crash,
        because it has no (direct) parent node, only a shadow parent node element.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):

2007-03-06  Kevin Decker  <kdecker@apple.com>

        Reviewed by Adele.

        Fixed: <rdar://problem/5041660> REGRESSION: <keygen> element broken, prevents users from signing up for Thawte email certs
        
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Added <keygen> to the DOM bindings so it can be accessed from Objective-C.
        * css/html4.css: Apply the look of the <select> element to <keygen>.
        * html/HTMLElementFactory.cpp:
        (WebCore::keygenConstructor): Added. 
        (WebCore::createFunctionMap): Added keygen.
        * html/HTMLSelectElement.cpp: Made const typeAheadTimeout variable static const. 
        (WebCore::HTMLSelectElement::HTMLSelectElement):  Fix both HTMLSelectElement constructors to initialize the
         same number of member variables. The fact that some fields were not initialized could (and would) crash the
         keygen element when selecting different items. Also removed m_typedString(String()) from the constructor
         initialization because this is not needed.

2007-03-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Rename a function to clarify its purpose.

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::registerURLSchemeAsLocal):
        * loader/FrameLoader.h:

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

        Build fix.

        * WebCore.exp: Updated symbols.

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

        Reviewed by Anders.

        Added a parameter to all StringTruncator methods to specify whether
        rounding hacks should be on or off.

        No layout test possible.

        * platform/StringTruncator.cpp:
        (WebCore::stringWidth): Added disableRoundingHacks parameter.
        (WebCore::truncateString): Ditto.
        (WebCore::StringTruncator::centerTruncate): Ditto.
        (WebCore::StringTruncator::rightTruncate): Ditto.
        (WebCore::StringTruncator::width): Ditto.
        * platform/StringTruncator.h: Ditto.
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::basenameForWidth): Pass in false to
        centerTruncate so that the truncation matches the way the text will be
        rendered.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5035045>
        REGRESSION: WebKit browser doesn't display image at http://www.metoffice.gov.uk/weather/satellite/index.html
        
        It turns out WinIE does allow you to access images by their id as special document properties. However, this is only
        allowed when the element also has a name attribute. The value of the name attribute is ignored and can even be empty!
        
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocument::namedItemGetter):
        Return jsUndefined() if the collection is empty.
        
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::insertedIntoDocument):
        (WebCore::HTMLImageElement::removedFromDocument):
        * html/HTMLImageElement.h:
        Add the id attribute value to the extra named item map.
        
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::traverseNextItem):
        Check for images with name attributes that match, as well as elements with id attributes that match where
        the element also has a name attribute.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        WebCore part of patch to make it possible to have different user agents for different URLs.

        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setLoading):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::applyUserAgent):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::userAgent):

2007-03-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Mark and Dave H.

        - rdar://problem/5038491
        An oversight of the security fix that prevented remote from loading local is that it
        prevents user style sheets when the site is remote.  This fixes that.

        * loader/Cache.cpp: Propogate and check user style sheet flag.
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        * loader/Cache.h: Propogate user style sheet flag.
        * loader/CachedCSSStyleSheet.cpp: Propogate user style sheet flag.
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/CachedCSSStyleSheet.h: Propogate user style sheet flag.
        * loader/DocLoader.cpp: Propogate user style sheet flag.
        (WebCore::DocLoader::requestResource):
        * loader/SubresourceLoader.cpp: Propogate and check user style sheet flag.
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h: Add check for user style sheet flag.
        * loader/loader.cpp: Propogate user style sheet flag.
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        * loader/loader.h: Propogate user style sheet flag.

2007-03-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12936 (Master bug used to track all current use problems.)

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12926 (transform attribute not respected in nested <use> elements)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12267 (getElementById broken for <use>)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12916 (use instance in symbol definition does not work)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12917 (mouseout event does not occur after scaling use instance)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12838 (SVG <use> DOM broken for script)

        Added test: svg/custom/use-nested-transform.svg
        Added test: svg/custom/struct-use-09-b.svg (not yet official W3C-SVG-1.1 testcase)
        Fixes test: svg/custom/use-elementInstance-event-target.svg (rectangle now turns green on first click)

        Fix all (except one) known <use> bug. The remaining bug (12630) is not crucical at all.
        Enable <use> again as default SVG feature, as discussed on webkit-dev.

        dom/Element.cpp needed following tweak: set hasParentStyle to true, if there is no parentNode
        available - which happens for <use> nodes, as it's a shadow node. This fixes recalcStyle behaviour.
        Override recalcStyle() in SVGUseElement, and properly forward the call to the shadow tree root element.
        The shadow tree now receives proper style updates (without having to recreate the whole tree!).

        Override attributeChanged() in SVGUseElement and only call notifyAttributeChange if one of x/y/width/height/xlink:href
        attribute changed - otherwhise we'll end up recreating the tree for every transform/style/(non-existing-attribute) change.

        Do not override transform in nested use situations, but correctly append (right-sided) the translation of the <use> element.
        Some cosmetic fixes: don't add transform="translate(0 0)" attributes if both x/y values are null in the shadow tree.

        Factor out logic for replacing symbol/svg tags in the shadow tree, and also invoke it during expandUseElementsInShadowTree -
        otherwhise <symbol><use xlink:href="#someOtherSymbol"></symbol> the <use> gets expanded to a <symbol>. Though no one expands
        the <symbol> element - and we're end up in hitting an assertion. Avoid that.

        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::shadowTreeParentElementForShadowTreeElement):
        (WebCore::SVGElement::dispatchEvent):
        * ksvg2/svg/SVGElementInstance.cpp:
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstance.idl:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGElementInstanceList.idl:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::updateElementInstance):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::attributeChanged):
        (WebCore::SVGUseElement::notifyAttributeChange):
        (WebCore::SVGUseElement::recalcStyle):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowTreeForSymbolTag):
        (WebCore::SVGUseElement::alterShadowTreeForSVGTag):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::attachShadowTree):
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGUseElement.idl:
        * ksvg2/svg/svgtags.in:

2007-03-05  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        Fixes <rdar://problem/4974258>
        Adds some key null checking

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::implementsCall): Null check doc/frame
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]): Null check doc/frame

2007-03-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Path::normalAngleAtLength() / Path::pointAtLength() don't work correctly.
        pointAtLength() was not implemented, basically and normalAngleAtLength()
        had a bug in the tangent slope calculation.

        The normalAngleAtLength() stuff can only be tested with my local textPath support.
        New LayoutTest: svg/custom/path-textPath-simulation.svg

        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo):
        * platform/graphics/PathTraversalState.h:
        (WebCore::PathTraversalState::):

2007-03-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12970
        Fix and import 4XPath test_core_functions.html test

        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate): Fully initialize the evaluation context.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstring::doEvaluate): Fixed handling of edge cases.
        (WebCore::XPath::FunRound::round): Reimplemented to match the spec; exposed FunRound::round() to be used in
        other functions.

2007-03-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12954
        XPath relative operations are implemented incorrectly

        * xml/XPathPredicate.cpp:
        (WebCore::XPath::NumericOp::doEvaluate):
        (WebCore::XPath::EqTestOp::compare):
        (WebCore::XPath::EqTestOp::doEvaluate):
        Reimplemented relative equality operations to match the spec.

        * xml/XPathPredicate.h:
        (WebCore::XPath::NumericOp::):
        (WebCore::XPath::EqTestOp::):
        Moved relative operations to EqTestOp.

        * xml/XPathGrammar.y:
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::nextTokenInternal):
        (WebCore::XPath::Parser::lex):
        Adapted for the above changes.

2007-03-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Lars.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12947
        Bug 12947: REGRESSION: ASSERTION FAILED: maxWidth >= 0 in StringTruncator.cpp:109 in WebCore::truncateString()

        Handle nil window correctly in toUserSpace and toDeviceSpace.  On Intel Macs a message to nil that returns a
        float will return 0.0.  We use this as the divisor in calculating a scale factor, which results in NaN being
        introduced into our rect.

        * platform/mac/ScreenMac.mm:
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2007-03-05  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12868
        parts of the CSS classes in this simple SVG example are not applied

        Make sure the xml stylesheets are parsed in strict mode.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::parseStyleSheet):

2007-03-04  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Change to dispatch the keypress event during the defaultEventHandler for keydown events.  This matches IE behavior.
        This is preparation for fixing event dispatch with input methods (http://bugs.webkit.org/show_bug.cgi?id=10871)

        Test: fast/events/keydown-keypress-preventDefault.html

        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler): Call the defaultKeyboardEventHandler for keydown events.
        * page/EventHandler.cpp:
        (WebCore::eventTargetNodeForDocument): Return 0 instead of false since the return type in EventTargetNode.
        (WebCore::EventHandler::keyEvent): Removed dispatch of keypress event, since this is now done in the default event handler.
        (WebCore::EventHandler::defaultKeyboardEventHandler): For keydown events, create and dispatch a keypress event.

2007-03-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Nikolas Zimmermann (yay!).

        http://bugs.webkit.org/show_bug.cgi?id=12962
        4XPath tests crash on lang() function

        Covered by 4XPath tests, to be landed later.

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::reverseFind): Do not crash with empty strings.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunLang::doEvaluate): Do not crash when an element has no
        attributes. Use a proper namespace for xml:lang (not sure where "xms" came from).
        Rewrote the algorithm for suffix removing to match the spec.

2007-03-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/5028165> 
        http://bugs.webkit.org/show_bug.cgi?id=12915
        REGRESSION: XMLHttpRequest.abort() does not stop loading (12915)
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        Save the value of m_loading since calling FrameLoader::stopLoading could set it to false.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didCancel):
        * loader/SubresourceLoader.h:
        Get rid of didCancel now, it's not needed anymore.
        
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::abort):
        Call cancel() instead of stopLoading(). Also, set m_aborted to true so the XMLHttpRequest object
        won't be dereferenced in didFail when aborting.

2007-03-04  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Move ScrollView stubs to ScrollViewGdk.cpp

        * platform/gdk/FrameGdk.h: remove comment that no longer makes sense
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::scrollPointRecursively):
        (WebCore::ScrollView::inWindow):
        (WebCore::ScrollView::wheelEvent):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::scrollbarUnderMouse):
        * platform/gdk/TemporaryLinkStubs.cpp:

2007-03-02  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        - rdar://problem/4922454
        - This fixes a security issue by making remote referrers not able to access local
        resources, unless they register their schemes to be treated as local. The result is
        that those schemes can access local resources and cannot be accessed by remote
        referrers.
        Because this behavior is new a link-on-or-after check is made to determine if the
        app should use the older, less safe, behavior.

        * WebCore.exp: added exported functions
        * bindings/objc/DOM.mm: consolodated function to base class
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * dom/Document.cpp: Cache the document's ability to load local resources.
        (WebCore::Document::Document):
        (WebCore::Document::setURL):
        (WebCore::Document::shouldBeAllowedToLoadLocalResources):
        (WebCore::Document::stylesheetLoaded):
        * dom/Document.h: Cache the docuent's ability to load local resources.
        (WebCore::Document::getPendingSheet):
        (WebCore::Document::isAllowedToLoadLocalResources):
        * html/HTMLImageLoader.cpp: Moved functionality into base class.
        (WebCore::HTMLImageLoader::updateFromElement):
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLLinkElement.cpp: Handles null returns correctly now.
        * html/HTMLTokenizer.cpp: Moved functionality into base class.
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/misc/SVGImageLoader.cpp: Moved functionality into base class.
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * loader/Cache.cpp: Checks if the cached resource can be loaded.
        (WebCore::Cache::requestResource):
        * loader/CachedCSSStyleSheet.cpp: Moved functionality into base class.
        (WebCore::CachedCSSStyleSheet::ref):
        (WebCore::CachedCSSStyleSheet::error):
        * loader/CachedImage.cpp: Moved functionality into base class.
        (WebCore::CachedImage::CachedImage):
        * loader/CachedImage.h: Moved functionality into base class.
        (WebCore::CachedImage::canRender):
        * loader/CachedResource.cpp: Cache if the CachedResource should be treated as local
        (WebCore::CachedResource::CachedResource):
        * loader/CachedResource.h: Moved functionality into base class.
        (WebCore::CachedResource::errorOccurred):
        (WebCore::CachedResource::shouldTreatAsLocal):
        * loader/CachedScript.cpp: Moved functionality into base class.
        (WebCore::CachedScript::CachedScript):
        * loader/CachedScript.h: Moved functionality into base class.
        (WebCore::CachedScript::schedule):
        * loader/CachedXBLDocument.cpp: Moved functionality into base class.
        (WebCore::CachedXBLDocument::error):
        * loader/CachedXSLStyleSheet.cpp: Moved functionality into base class.
        (WebCore::CachedXSLStyleSheet::error):
        * loader/FrameLoader.cpp: See comments for each function below.
        (WebCore::FrameLoader::loadSubframe): Use new canLoad.
        (WebCore::FrameLoader::restrictAccessToLocal): return value of linked-on-or-after check.
        (WebCore::FrameLoader::setRestrictAccessToLocal): set value for linked-on-or-after check.
        (WebCore::localSchemes): Return set of schemes that are to be treated as local.
        (WebCore::FrameLoader::loadPlugin): Use new canLoad.
        (WebCore::FrameLoader::canLoad): Now multiple functions that each do the same work but some can take advantage of the cached values, if they were computed previously.
        (WebCore::FrameLoader::shouldHideReferrer): Extracted out the logic to determine if the referrer should be hidden so it is only calculated when needed.
        (WebCore::FrameLoader::loadResourceSynchronously): No longer calls canLoad to get hideReferrer info.
        (WebCore::FrameLoader::registerSchemeAsLocal): Functionality to register a scheme to be treated as local.
        (WebCore::FrameLoader::treatURLAsLocal): Given a URL this function determines if it should be treated as local.
        * loader/FrameLoader.h: Declared functions for this security fix.  See above.
        * loader/MainResourceLoader.cpp: Optized order of bools to regain performance.
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/SubresourceLoader.cpp: Now restricts remote from loading local resources.
        (WebCore::SubresourceLoader::create):
        * page/EventHandler.cpp: Moved functionality into base class.
        (WebCore::selectCursor):
        * platform/KURL.cpp: KURLs need to check all the registered schemes now.
        (WebCore::KURL::isLocalFile):
        * rendering/HitTestResult.cpp: Moved functionality into base class.
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.cpp: Moved functionality into base class.
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h: Moved functionality into base class.
        (WebCore::RenderImage::errorOccurred):
        * rendering/RenderListItem.cpp: Moved functionality into base class.
        (WebCore::RenderListItem::setStyle):
        * rendering/RenderListMarker.cpp: Moved functionality into base class.
        (WebCore::RenderListMarker::isImage):
        * xml/xmlhttprequest.cpp: Check doc's cached value instead of determining independently.
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):

2007-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin
        
        <rdar://problem/5028447>
        REGRESSION: Gmail Editor: Copied message text pastes at the wrong font size

        * editing/markup.cpp:
        (WebCore::createMarkup): The style of the div that holds
        a fully selected body's styles didn't include styles inherited
        from the body's ancestors.
        
2007-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4545040>
        innerHTML does not HTML-escape text nodes inside PRE elements
        <rdar://problem/5027857>
        Pasting into Mail from Safari's view-source window renders the HTML

        * editing/HTMLInterchange.cpp:
        (WebCore::convertHTMLTextToInterchangeFormat): Send this function
        the node that the text comes from as a parameter.  It shouldn't convert
        '\n's to spaces/nbsps if the text is coming from text where newlines are
        preserved.
        * editing/HTMLInterchange.h:
        * editing/markup.cpp:
        (WebCore::startMarkup): Escape text inside the children of PREs.

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

        Reviewed by Anders.

        Try to fix the Qt build.

        * platform/qt/TemporaryLinkStubs.cpp: Add stubs.
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):

2007-03-02  David Harrison  <harrison@apple.com>

        Suggested by Darin.

        A more efficient solution to rdar://4961431.

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsIgnored]):

2007-03-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/5032095>
        Gmail Editor: Copied text pastes on a new line instead of current line
        
        Start merge failed to occur because positionAtStartOfInsertedContent
        had a bug.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtStartOfInsertedContent):
        Was failing when inserting <span><div>foo/div></span>. Return the 
        inserted content's first VisiblePosition.

2007-03-02  Dave Hyatt  <hyatt@apple.com>

        Fix crasher in glyph map code (buffer overrun).

        Reviewed by darin

        * platform/win/GlyphPageTreeNodeWin.cpp:
        (WebCore::GlyphPage::fill):

2007-03-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12895
        REGRESSION: imagemap: pointer cursor is shown everywhere
        <rdar://problem/5028163>
 
        Image with imagemap should never itself be URLElement in hit test results. 
               
        No layout test, cursor state can't be captured.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2007-03-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Fix http://bugs.webkit.org/show_bug.cgi?id=12690
        REGRESSION: can not log in to bank of america with TOT webkit
        <rdar://problem/4990044>
        
        and http://bugs.webkit.org/show_bug.cgi?id=12604
        REGRESSION: After closing the "Would you like to save password" sheet, the form fails 
        to submit automatically at http://www.mac.com/WebObjects/HomePage.woa
        <rdar://problem/4871752>
        
        and http://bugs.webkit.org/show_bug.cgi?id=12020
        REGRESSION: Flickr uploading broken
        <rdar://problem/4928662>
        
        Turn protection against multiple forms submission back on. This approach is buggy 
        but it is way better than not having it at all. Not protecting against this
        breaks number of major sites.
        
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityPerformAction:]):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::resetMultipleFormSubmissionProtection):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::receivedMainResourceError):
        * loader/FrameLoader.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDown):

2007-03-01  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Added the test case: external-script-URL-location.html
        - Fix an issue where the url of a document is null after an open if the document
        has no parent.

        * dom/Document.cpp:
        (WebCore::Document::open):

2007-03-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4960250> 
        http://bugs.webkit.org/show_bug.cgi?id=11627
        REGRESSION: Reproducible crash at IMDb in WebCore::FrameLoader::stopLoadingSubframes
        
        In rare cases, we could end up calling checkLoadComplete twice for the same frame. This would cause the 
        didFailProvisionalLoad delegate method to be called twice for the same frame, and also cause the provisional document loader
        to be reset to null when other code wasn't expecting it.
        
        This regressed in revision 10904 with the fix for <rdar://problem/4184719>. The fix is to only call stopLoading on the frame
        if either the document loader is loading, or the document is still being parsed. I've verified that the bug is still fixed and
        that no leaks occur.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):

2007-03-01  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Darin.

        Fix ARM crash due to accessing non-4-byte-aligned memory
        as 32-bit values.

        * platform/AtomicString.cpp:
        (WebCore::UCharBufferTranslator::equal):

2007-03-01  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/5033905> Have the DOM secondary thread check raise an exception by default

        * platform/mac/ThreadCheck.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        Initialize threadViolationIsException to true.

2007-03-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5030628> - Crash opening a new window with the
        "New windows open to the same page" pref set

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Set the m_subItems vector capacity correctly

2007-03-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12801
        Assertion failure in createMarkup() (root) when doing Select All, Copy in an SVG document

        Test: editing/pasteboard/createMarkup-assert.xml

        * editing/markup.cpp:
        (WebCore::createMarkup): Removed the assertion, because it's wrong in a non-HTML world.

2007-02-28  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver and Hyatt.

        Fix <rdar://problem/5024233> Crash while using Find on empty document

        No layout test possible, as this involves a null document.

        * dom/Range.cpp:
        (WebCore::rangeOfContents): Added an ASSERT.
        * page/Frame.cpp:
        (WebCore::Frame::findString): Added a null-check for document().
        (WebCore::Frame::markAllMatchesForText): Ditto.

2007-02-28  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Not reviewed - simple gdk build fix.

        Add stubs for newly introduced localized strings.

        * platform/gdk/TemporaryLinkStubs.cpp:
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):

2007-02-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Beth

        Move the Thread Safety Check functions into their own header for export to WebKit

        * WebCore.exp: Export the function
        * WebCore.xcodeproj/project.pbxproj: 
        * bindings/scripts/CodeGeneratorObjC.pm: Include the new header
        * platform/Logging.h: Move stuff to ThreadCheck.h
        * platform/ThreadCheck.h: Added.
        * platform/mac/LoggingMac.mm: Move stuff to ThreadCheck.mm
        * platform/mac/ThreadCheck.mm: Added.
        (WebCore::_WebCoreThreadViolationCheck):
        (WebCoreReportThreadViolation):

2007-02-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12923 REGRESSION: 
        Assertion failure copying standalone image

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): Use the CachedImage as the 
        resource. This makes more sense anyway. There is no need to null-
        check the renderer or the CachedImage since we return early if 
        there is no Image* and the HitTestResult::image() function checks 
        for these things.

2007-02-28  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for <rdar://problem/4887423> REGRESSION: search results popup menu strings are not localized
        and <rdar://problem/3517227> accessibility-related strings in WebCore are not localized

        Use localized strings from WebKit instead of hard coded strings.

        * bridge/mac/WebCoreAXObject.mm: (-[WebCoreAXObject roleDescription]):
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::itemText):

2007-02-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12911
        GoogleDocs: Ordered lists don't update immediately when start attribute changed
        
        Update list marker value when start attribute changes.

        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute):

2007-02-28  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Corrected the use of the new ENABLE() macros in some ksvg2/svg files.
        Add new build-webkit flags "--(no-)xpath" / "--(no-)xslt", to be able
        to switch off build features easily. Also add "--(no-)svg-experimental-features"
        flag, to be able to test filters/animations/use/foreignObject easily.

        * DerivedSources.make:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGUseElement.cpp:

2007-02-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12609
        Any SVG element will create renderers even when children of HTML elements

        Allow creation of svg renderers only when parent is SVG, except for
        the <svg> element.

        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::rendererIsNeeded):
        * ksvg2/svg/SVGDefsElement.cpp:
        * ksvg2/svg/SVGDefsElement.h:
        * ksvg2/svg/SVGDescElement.h:
        (WebCore::SVGDescElement::rendererIsNeeded):
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::rendererIsNeeded):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * ksvg2/svg/SVGForeignObjectElement.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::rendererIsNeeded):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGSwitchElement.h:
        * ksvg2/svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::rendererIsNeeded):
        * ksvg2/svg/SVGTRefElement.h:
        * ksvg2/svg/SVGTSpanElement.h:
        * ksvg2/svg/SVGTextElement.h:
        * ksvg2/svg/SVGTitleElement.h:
        (WebCore::SVGTitleElement::rendererIsNeeded):
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:
        (WebCore::SVGViewElement::rendererIsNeeded):

2007-02-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12913
        Markers do not render in webkit when it misses markerWidth or markerHeight attribute

        Set defaults for markerWidth/markerHeight so markers that do not specify them render.

        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):

2007-02-27  Anders Carlsson  <acarlsson@apple.com>

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        Remove comment.

2007-02-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver

        <rdar://problem/5027300>
        REGRESSION: Images inserted with align left/right are lost

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMerge):
        Don't attempt to merge to or from a position before 
        or after a block because it will be a no-op and
        lead to infinite recursion.
        In this case it instead resulted in content loss because 
        of bugs in start/endOfParagraph (5027702).
        * editing/visible_units.cpp: Added two FIXMEs for
        the problems with start/endOfParagraph.

2007-02-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Make resource load delegate methods pass the right document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        Use the resource loader's document loader instead of the active one.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        Make it so we send the frame load delegate method before the resource load delegate method.
        This was a regression from 2.0 and was caused by the fix to rdar://problem/4609195. Because the way the loader
        now works, both delegate methods will be called.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::documentLoader):
        Add document loader pointer to ResourceLoader.

2007-02-27  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12910
          REGRESSION (r18756-r18765): list-bullet doesn't redraw properly when changing the list's content using JavaScript

        Test: fast/repaint/list-marker.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker): Add the marker to the visual
        overflow of all its ancestor blocks up to the list item. This needs to be
        done here since the marker is positioned only after those blocks have been
        laid out.

2007-02-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=12918
        REGRESSION: Google Finance dropdown Flickers
        <rdar://4988039>
        
        If a node dies while mouse is over it, it is still supposed to receive
        mouseout event (wasn't case in Tiger webkit). However this event should 
        not propagate to any other nodes. This patch matches Firefox behavior in
        this respect.

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

2007-02-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
        JS objects not collected after closing window @ ebay.com/maps.google.com

        Garbage collect in the KJSProxy destructor, after clearing our reference
        to the interpreter, because that's when the interpreter has torn down fully.

        (Technically speaking, we can't *prove* that we have the only reference to 
        our interpreter, but that's how it works in practice, and manual garbage 
        collection is just an opportunistic optimization, so it's OK for it to 
        work in practice even if it can't be proven in theory.)
        
        Layout tests pass. No leaks reported.

        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::~KJSProxy):
        * bindings/js/kjs_proxy.h:
        * page/Page.cpp:
        (WebCore::Page::~Page): Merged pageDestroyed() calls. Moved debug-only
        code to the bottom.
        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Don't call getObject() because globalObject()
        returns a JSObject* already, and the call can leave a pointer to the Window
        object on the stack. Don't check for NULL because it is an invariant of
        JavaScriptCore that no JSObject* can be NULL. Do use a volatile pointer
        for w because the 'w = 0' assignment just screams to the compiler, "Don't
        generate any code for me!"

2007-02-27  Rob Buis  <buis@kde.org>

        Reviewed by David Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=4128
        !important is ignored in inline styling.

        Handle properties with !important flag better in inline
        style declarations.

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

2007-02-27  David Hyatt  <hyatt@apple.com>

        Bug 11435.  Make sure RenderViews always paintBoxDecorations.  They used to before I removed RenderView's
        paint method.  This fix restores the original behavior.

        Reviewed by mitz

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

2007-02-27  David Hyatt  <hyatt@apple.com>

        Fix for bug 12094, make sure setMinMaxKnown starts off false for the weird/rare case of empty
        plaintext documents (which really are buggy and should be fixed to generate root elements).

        Reviewed by mitz

        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):

2007-02-27  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin.

        Fixed the case where a BackForwardList of capacity==1 would grow without bound.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem):

2007-02-22  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12848
        Help cursor should have a white outline

        * Resources/helpCursor.png:

2007-02-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12594
        REGRESSION: Strange highlight in active input area

        No automated test possible.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Restore a check lost in r12792.

2007-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12908
          crash in http/tests/incremental/frame-focus-before-load.html

        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::focusDocumentView):
        Add null checks.

2007-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12909
          should use ICU, not TEC, for MacRoman decoding

        * platform/TextCodecICU.cpp: (WebCore::TextCodecICU::registerEncodingNames):
        Add "macroman" as an alias for "macintosh". We have seen that in use in mail,
        although I'm not sure it's used on the web.

        * platform/mac/mac-encodings.txt: Remove MacRoman line, which was added back
        as part of the patch for bug 4971226. But by adding it to this file rather
        than the ICU codec, we get it only on Mac OS X. And long term we are trying to
        get rid of the use of TEC entirely, so we want this file to be as empty as
        possible.

2007-02-27  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12905
        Not all svg shapes should support markers

        Restrict marker usage to svg shapes polyline, polygon, line and path.

        * ksvg2/svg/SVGLineElement.h:
        (WebCore::SVGLineElement::supportsMarkers):
        * ksvg2/svg/SVGPathElement.h:
        (WebCore::SVGPathElement::supportsMarkers):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::supportsMarkers):
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::supportsMarkers):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2007-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Lars.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12902
        <rdar://problem/5012679> REGRESSION: Pressing return key doesn't 
        move caret to next line after applying a font color in GMail

        Test: fast/frames/iframe-window-focus-2.html

        * page/EventHandler.h: Make focusDocumentView public.
        * page/Frame.cpp: (WebCore::Frame::focusWindow): Instead of just setting the focused frame,
          we should set also focus the document view.  The bug here was that since the subframe view
          wasn't the first responder, the key down event was going to the wrong frame.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - fixed <rdar://problem/4946881> Recursive loop with <marker> not caught, crashes in WebCore::SVGPaintServer::draw (11244)
        http://bugs.webkit.org/show_bug.cgi?id=11244

        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw): Use a HashSet to guard against
        reference cycles.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin McCullough.

        - fix Qt build for earlier SVG changes.

        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:

2007-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4827378>: Canvas with large height 
        uses lots of memory, computer almost stops responding
         
        Put cap on maximum area of canvas, size is similar too the 
        maximum size allowed by firefox (firefox seems to to cut off 
        at area == 32767 * 9358). 

        Also protect renderer against the possibility of a null context
        (this was triggering a CG warning)

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createDrawingContext):
           Apply maximum canvas area
        (WebCore::HTMLCanvasElement::createPlatformImage):
           Protect against null CG Context

2007-02-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Antti Koivisto.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12899
          Ordered lists not updating dynamically with new styles

        Test: fast/lists/list-style-type-dynamic-change.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::setStyle): Made changing the marker type trigger
        updating of the marker.

2007-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5012761> REGRESSION: form submit invokes wrong event handler

        Test: fast/events/submit-reset-nested-bubble.html

        * dom/EventTargetNode.h: Made handleLocalEvents virtual.
        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::handleLocalEvents): If we're
          not in the capture phase, and the target is a different form, and we're handling
          the submitEvent or the resetEvent, then stop propagation of the event.  This matches
          Firefox behavior.  You can only get in this situation if misnested tags cause
          forms to be nested.
        * html/HTMLFormElement.h: Added handleLocalEvents.

2007-02-26  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - <rdar://problem/5021555> TextCodecICU does not use fallback mappings; it should

        * platform/TextCodecICU.cpp: (WebCore::TextCodecICU::createICUConverter):
        Added a call to ucnv_setFallback(TRUE).

2007-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for rdar://problem/5021127 

        Need to add null check to node -- original Obj-C didn't need 
        the null check due to the Obj-C null messaging semantics

        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertFragment):

2007-02-26  David Hyatt  <hyatt@apple.com>

        Make text files render using white-space: pre-wrap instead of white-space: pre.
        
        Reviewed by aroben

        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):

2007-02-26  David Hyatt  <hyatt@apple.com>

        Back out the change to add fullyClippedContentRect.  The layout test
        was actually showing more correct results.

        * page/Frame.cpp:
        (WebCore::Frame::visibleSelectionRect):
        (WebCore::Frame::setIsActive):
        (WebCore::Frame::markAllMatchesForText):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2007-02-26  David Hyatt  <hyatt@apple.com>

        Add support for a new property called -webkit-border-fit.  This property
        has two values: border and lines.  The "border" value means the border and
        background paint normally at the border box level.  The "lines" value indicates
        that the border and background should shrink dynamically to snugly hug the
        line boxes of normal flow descendants.

        Reviewed by darin

        fast/borders/border-fit.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::borderFitAdjust):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderFitAdjust):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::):
        (WebCore::RenderStyle::borderFit):
        (WebCore::RenderStyle::setBorderFit):
        (WebCore::RenderStyle::initialBorderFit):

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fix.

        * rendering/RenderTreeAsText.cpp: Can't use #ifndef with ENABLE() macro.

2007-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4990700> Safari always crashes when attempting to edit/view 
        Yahoo pipes in WebCore::HTMLSelectElement::optionToListIndex

        Test: fast/forms/select-out-of-bounds-index.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): If we're about to deselect all options, then set m_lastOnChangeIndex to -1.
        (WebCore::HTMLSelectElement::optionToListIndex): Moved listSize to a local variable.  Rewrote using a simpler for-loop to prevent out-of-bounds errors.

2007-02-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4816376>
        REGRESSION: NetNewsWire 3.0 - Crashes in WebDocumentLoaderMac::attachToFrame() (12674)
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        Remove call to setPolicyDocumentLoader here, it's set by the ::load function that we end up calling.

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Lars.

        - fixed <rdar://problem/5021698> Disable experimental SVG features (12883)
        
        I added an ENABLE_SVG_EXPERIMENTAL_FEATURES define to guard all use of the experimental
        features, and used it to guard relevant tag names, elements, JS bindings and renderers.
        
        I also converted all the existing optional feature defines to
        ENABLE_FOO instead of FOO_SUPPORT since that is the more standard
        way to do it in open source projects and works with the handy new
        ENABLE() macro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Projects/gdk/webcore-gdk.bkl:
        * WebCore.pro:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSSVGElementWrapperFactory.cpp:
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSSVGMatrixCustom.cpp:
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSSVGPathSegListCustom.cpp:
        * bindings/js/JSSVGPointListCustom.cpp:
        * bindings/js/JSXSLTProcessor.cpp:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_binding.cpp:
        (KJS::setDOMException):
        * bindings/js/kjs_css.cpp:
        (KJS::toJS):
        * 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/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        (+[DOMNode _nodeWith:]):
        * bindings/objc/DOMCSS.mm:
        (+[DOMCSSValue _CSSValueWith:]):
        * bindings/objc/DOMCustomXPathNSResolver.h:
        * bindings/objc/DOMCustomXPathNSResolver.mm:
        * bindings/objc/DOMEvents.mm:
        (+[DOMEvent _eventWith:]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVGPathSegInternal.mm:
        * bindings/objc/DOMXPath.mm:
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * config.h:
        * css/CSSGrammar.y:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        * css/StyleBase.h:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::checkPseudoState):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/cssstyleselector.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::createElement):
        (WebCore::Document::implicitClose):
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::createEvent):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/MappedAttributeEntry.h:
        (WebCore::):
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::shadowAncestorNode):
        * dom/Node.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:
        * dom/Text.cpp:
        (WebCore::Text::createRenderer):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::XMLTokenizer::processingInstruction):
        (WebCore::XMLTokenizer::end):
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * dom/XMLTokenizer.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.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/events/JSSVGLazyEventListener.cpp:
        * ksvg2/events/JSSVGLazyEventListener.h:
        * ksvg2/events/SVGZoomEvent.cpp:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/PointerEventsHitRules.cpp:
        * ksvg2/misc/PointerEventsHitRules.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/misc/SVGTimer.cpp:
        * ksvg2/misc/SVGTimer.h:
        * ksvg2/misc/TimeScheduler.cpp:
        * ksvg2/misc/TimeScheduler.h:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/ColorDistance.cpp:
        * ksvg2/svg/ColorDistance.h:
        * ksvg2/svg/GradientAttributes.h:
        * ksvg2/svg/LinearGradientAttributes.h:
        * ksvg2/svg/PatternAttributes.h:
        * ksvg2/svg/RadialGradientAttributes.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/SVGAnimateElement.idl:
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.idl:
        * ksvg2/svg/SVGAnimatedPathData.cpp:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.cpp:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedTemplate.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/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:
        (WebCore::SVGElement::dispatchEvent):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstance.cpp:
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstance.idl:
        * ksvg2/svg/SVGElementInstanceList.cpp:
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGElementInstanceList.idl:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGException.h:
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEBlendElement.h:
        * ksvg2/svg/SVGFEBlendElement.idl:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        * ksvg2/svg/SVGFEColorMatrixElement.idl:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        * ksvg2/svg/SVGFEComponentTransferElement.idl:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.h:
        * ksvg2/svg/SVGFECompositeElement.idl:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        * ksvg2/svg/SVGFEDiffuseLightingElement.idl:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEDisplacementMapElement.idl:
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        * ksvg2/svg/SVGFEDistantLightElement.h:
        * ksvg2/svg/SVGFEDistantLightElement.idl:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.h:
        * ksvg2/svg/SVGFEFloodElement.idl:
        * ksvg2/svg/SVGFEFuncAElement.cpp:
        * ksvg2/svg/SVGFEFuncAElement.h:
        * ksvg2/svg/SVGFEFuncAElement.idl:
        * ksvg2/svg/SVGFEFuncBElement.cpp:
        * ksvg2/svg/SVGFEFuncBElement.h:
        * ksvg2/svg/SVGFEFuncBElement.idl:
        * ksvg2/svg/SVGFEFuncGElement.cpp:
        * ksvg2/svg/SVGFEFuncGElement.h:
        * ksvg2/svg/SVGFEFuncGElement.idl:
        * ksvg2/svg/SVGFEFuncRElement.cpp:
        * ksvg2/svg/SVGFEFuncRElement.h:
        * ksvg2/svg/SVGFEFuncRElement.idl:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        * ksvg2/svg/SVGFEGaussianBlurElement.idl:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFEImageElement.idl:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.h:
        * ksvg2/svg/SVGFEMergeElement.idl:
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        * ksvg2/svg/SVGFEMergeNodeElement.idl:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.h:
        * ksvg2/svg/SVGFEOffsetElement.idl:
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        * ksvg2/svg/SVGFEPointLightElement.h:
        * ksvg2/svg/SVGFEPointLightElement.idl:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        * ksvg2/svg/SVGFESpecularLightingElement.idl:
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        * ksvg2/svg/SVGFESpotLightElement.h:
        * ksvg2/svg/SVGFESpotLightElement.idl:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETileElement.h:
        * ksvg2/svg/SVGFETileElement.idl:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.h:
        * ksvg2/svg/SVGFETurbulenceElement.idl:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGFilterElement.h:
        * ksvg2/svg/SVGFilterElement.idl:
        * 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/SVGForeignObjectElement.idl:
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.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/SVGListTraits.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMPathElement.cpp:
        * ksvg2/svg/SVGMPathElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMetadataElement.cpp:
        * ksvg2/svg/SVGMetadataElement.h:
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.cpp:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGParserUtilities.cpp:
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPathElement.h:
        * 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/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/SVGRectElement.cpp:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGRenderingIntent.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:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        * 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/SVGTransformDistance.cpp:
        * ksvg2/svg/SVGTransformDistance.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/SVGUnitTypes.h:
        * ksvg2/svg/SVGUseElement.cpp:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGUseElement.idl:
        * ksvg2/svg/SVGViewElement.cpp:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.cpp:
        * ksvg2/svg/SVGZoomAndPan.h:
        * ksvg2/svg/svgtags.in:
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * 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:
        * page/DOMWindow.idl:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::selectCursor):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/PageState.cpp:
        (WebCore::PageState::PageState):
        (WebCore::PageState::restore):
        * platform/MimeTypeRegistry.cpp:
        (WebCore::initialiseSupportedNonImageMimeTypes):
        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * platform/graphics/svg/SVGImage.cpp:
        * platform/graphics/svg/SVGImage.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        * platform/graphics/svg/SVGPaintServer.cpp:
        * platform/graphics/svg/SVGPaintServer.h:
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.cpp:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/SVGPaintServerSolid.cpp:
        * platform/graphics/svg/SVGPaintServerSolid.h:
        * platform/graphics/svg/SVGResource.cpp:
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceClipper.cpp:
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/SVGResourceFilter.cpp:
        * platform/graphics/svg/SVGResourceFilter.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/CgSupport.cpp:
        * platform/graphics/svg/cg/CgSupport.h:
        * platform/graphics/svg/cg/RenderPathCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        * platform/graphics/svg/cg/SVGPaintServerSolidCg.cpp:
        * platform/graphics/svg/cg/SVGResourceClipperCg.cpp:
        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        * platform/graphics/svg/filters/SVGDistantLightSource.h:
        * platform/graphics/svg/filters/SVGFEBlend.cpp:
        * platform/graphics/svg/filters/SVGFEBlend.h:
        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp:
        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        * platform/graphics/svg/filters/SVGFEComposite.cpp:
        * platform/graphics/svg/filters/SVGFEComposite.h:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
        * platform/graphics/svg/filters/SVGFEFlood.cpp:
        * platform/graphics/svg/filters/SVGFEFlood.h:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
        * platform/graphics/svg/filters/SVGFEImage.cpp:
        * platform/graphics/svg/filters/SVGFEImage.h:
        * platform/graphics/svg/filters/SVGFEMerge.cpp:
        * platform/graphics/svg/filters/SVGFEMerge.h:
        * platform/graphics/svg/filters/SVGFEMorphology.cpp:
        * platform/graphics/svg/filters/SVGFEMorphology.h:
        * platform/graphics/svg/filters/SVGFEOffset.cpp:
        * platform/graphics/svg/filters/SVGFEOffset.h:
        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp:
        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
        * platform/graphics/svg/filters/SVGFETile.h:
        * platform/graphics/svg/filters/SVGFETurbulence.cpp:
        * platform/graphics/svg/filters/SVGFETurbulence.h:
        * platform/graphics/svg/filters/SVGFilterEffect.cpp:
        * platform/graphics/svg/filters/SVGFilterEffect.h:
        * platform/graphics/svg/filters/SVGLightSource.cpp:
        * platform/graphics/svg/filters/SVGLightSource.h:
        * platform/graphics/svg/filters/SVGPointLightSource.h:
        * platform/graphics/svg/filters/SVGSpotLightSource.h:
        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm:
        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm:
        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm:
        * platform/graphics/svg/filters/cg/SVGFETileCg.mm:
        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm:
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        * platform/graphics/svg/qt/SVGPaintServerSolidQt.cpp:
        * platform/graphics/svg/qt/SVGResourceClipperQt.cpp:
        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:
        * platform/graphics/svg/qt/SVGResourceMaskerQt.cpp:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        * rendering/RenderPath.h:
        * rendering/RenderSVGBlock.cpp:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGGradientStop.cpp:
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGInlineText.cpp:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.cpp:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.cpp:
        * rendering/RenderSVGText.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::inheritFrom):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::setTextInternal):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::externalRepresentation):
        * rendering/SVGInlineFlowBox.cpp:
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGRootInlineBox.cpp:
        * rendering/SVGRootInlineBox.h:
        * rendering/bidi.cpp:
        (WebCore::shouldPreserveNewline):
        (WebCore::RenderBlock::findNextLineBreak):
        * webcore-base.bkl:
        * xml/NativeXPathNSResolver.cpp:
        * xml/NativeXPathNSResolver.h:
        * xml/XPathEvaluator.cpp:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.cpp:
        * xml/XPathExpression.h:
        * xml/XPathExpressionNode.cpp:
        * xml/XPathExpressionNode.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathFunctions.h:
        * xml/XPathGrammar.y:
        * xml/XPathNSResolver.cpp:
        * xml/XPathNSResolver.h:
        * xml/XPathNamespace.cpp:
        * xml/XPathNamespace.h:
        * xml/XPathParser.cpp:
        * xml/XPathParser.h:
        * xml/XPathPath.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.cpp:
        * xml/XPathPredicate.h:
        * xml/XPathResult.cpp:
        * xml/XPathResult.h:
        * xml/XPathStep.cpp:
        * xml/XPathStep.h:
        * xml/XPathUtil.cpp:
        * xml/XPathUtil.h:
        * xml/XPathValue.cpp:
        * xml/XPathValue.h:
        * xml/XPathVariableReference.cpp:
        * xml/XPathVariableReference.h:
        * xml/XSLImportRule.cpp:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessor.h:

2007-02-25  Mitz Pettel  <mitz@webkit.org>

        Reviewed by David Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12886
          Crash with Scriptalicious javascript library

        Test: fast/dynamic/float-withdrawal.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Detect when a child block had
        intruding floats in a previous layout, and in that case force it to relayout.

2007-02-25  David Hyatt  <hyatt@apple.com>

        Revert my change to the default fill color.  Just set the color to transparent explicitly when
        drawing textarea resizer frames.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):

2007-02-25  Sam Weinig  <sam@webkit.org>

        Update forgotten files.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):

2007-02-25  David Hyatt  <hyatt@apple.com>

        Fix for regression caused by changing the containing block of positioned elements with no positioned ancestor
        to be the initial containing block (represented in our tree by the RenderView).  Rework RenderView's layout
        to have very few special cases.   Now it will just relayout its children when the width/height of the
        view actually changes.  Positioned elements no longer get a special additional layout, since width/height
        adjustments are caught by the base class already anyway.

        Reviewed by mjs, darin

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:

2007-02-25  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        - fix build breakage

        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::fullyClippedContentRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::fullyClippedContentRect):

2007-02-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - fixed layout test failure in fast/overflow/scrollRevealButton
        
        I added a new ScrollView method, fullyClippedContentRect, that vies the content rect
        as clipped by all ancestor scroll views, not just this one. Currently it only works
        correctly on mac however. visibleContentRect, only accounting for the clipping from
        this particular scroll view, is sufficient for most purposes.

        * page/Frame.cpp:
        (WebCore::Frame::visibleSelectionRect):
        (WebCore::Frame::setIsActive):
        (WebCore::Frame::markAllMatchesForText):
        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrolView::fullyClippedContentRect):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::fullyClippedContentRect):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrolView::fullyClippedContentRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2007-02-24  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        "Look Up in Dictionary" context menu item should be Mac-only for now,
        since it's only implemented on that platform (<rdar://problem/5021468>)

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Wrap all instances of the dictionary
        menu item in #if PLATFORM(MAC).

2007-02-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed <rdar://problem/4987649> leaks in BidiRun::operator new seen while 
        running WebKit unit tests
        
        In bidi.cpp, some functions allocate BidiRuns and put them in a global data
        structure, while others uses the BidiRuns in the global data structure. 
        The caller is responsible for knowing which functions may allocate runs
        and which may use them, and calling deleteBidiRuns() at the appropriate time.

        The fix is to add some calls to deleteBidiRuns() where they were missing.
        
        I also added a BidiRun counter because these two leaks were introduced by
        our two bidi.cpp experts, so the odds that leaks will creep in again
        in the future seem pretty high.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderCharacters): Added  missing call to
        deleteBidiRuns().
        (WebCore::BidiRunCounter::~BidiRunCounter):
        (WebCore::BidiRun::operator delete):
        (WebCore::RenderBlock::layoutInlineChildren): Added missing call to
        deleteBidiRuns(). Moved call to deleteBidiRuns() to same scope as call to
        bidiReorderLine(), to emphasize that they go together like new/delete.
        In theory, the old code was just as good, but I didn't want to rely on
        theory.

2007-02-24  David Harrison  <harrison@apple.com>

        Reviewed by Kevin.

        <rdar://problem/4961431> Image with empty string alt tag should be ignored

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityIsIgnored]):
        Ignore img element that has an alt attribute, but that string is empty.

2007-02-24  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Gdk improvements.

        * platform/gdk/FrameGdk.cpp: only scroll on keydown, not both keydown and keyup.
        (WebCore::FrameGdk::keyPress):
        (WebCore::FrameGdk::handleGdkEvent):
        (WebCore::Frame::print):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::dragImageForSelection):
        * platform/network/gdk/ResourceHandleManager.cpp: don't free memory that
        doesn't belong to us.
        (WebCore::ResourceHandleManager::downloadTimerCallback):

2007-02-23  Kevin Decker <kdecker@apple.com>

        Reviewed by Anders.

        Fixed: <rdar://problem/4971226> REGRESSION: Replying to closed HTML mail message does not quote original body (12503)
        
        There were two problems here:
        
        * page/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge stringWithData:textEncodingName:]): The old code said  "if there is no text encoding name than
         assume WindowsLatin1 (iso-8859-1) and try to decode that". That's not sufficient because it doesn't handle the fallback
         case for unknown encodings. This method will now attempt to decode using WindowsLatin1 for unknown encoding types.
        * platform/mac/mac-encodings.txt: Added the missing "macroman" encoding type. 

2007-02-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12856
          REGRESSION (r13685): Canceling the suggestion popup does not revert the change

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): If the fragment to be inserted
        is empty, first delete the selection, and only then bail out. 

2007-02-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5001923> 
        REGRESSION: Crash when navigating forward from an error page in WebFrameLoaderClient::dispatchDidReceiveContentLength

        Fix an error that was introduced in revision r18541. We should check if the provisional document loader 
        has an unreachable URL, not the actual document loader.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForCommit):

2007-02-23  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12823
          REGRESSION(r16968-16977): unable to prevent selection by cancelling "selectstart" event

        Test: fast/events/selectstart-during-autoscroll.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Invoke the renderer's shouldSelect() --
        which dispatches the selection DOM event and gives it a chance to cancel
        the selection -- before updating the selection during autoscroll.

2007-02-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12870

        It turns out short circuiting DragData::containsURL() was bad
 
        * manual-tests/directory-drop-on-view.html: Added.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsURL):

2007-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - 12.5% speedup on BenchJS test 6
        Partial fix for http://bugs.webkit.org/show_bug.cgi?id=12866
        
        It turns out that calling documentVisibleRect on an NSScrollView is pretty expensive,
        and calling visibleRect even more so. Take measures to call them less often.

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleContentRect): Use documentVisibleRect when possible.
        (WebCore::ScrollView::updateContents): Use visibleContentRect to be able to use
        documentVisibleRect when possible.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle): Don't get or intersect with viewRect
        if we don't have a parent frame, since the ScrollView will do that anyway. Also,
        don't get contentX and contentY separately since they are in the viewRect already.
        (WebCore::RenderView::viewRect): Use visibleContentRect instead of getting each
        coordinate individually, to avoid calling documentVisibleRect repeatedly.

2007-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - 2% speedup on BenchJS test 6
        Partial fix for http://bugs.webkit.org/show_bug.cgi?id=12866

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText): Use format() instead of
        number() followed by append of a constant string.

2007-02-22  George Staikos  <staikos@kde.org>

        Fix the Qt build.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):

2007-02-22  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben, who never sleeps.

        To avoid code duplication, move notImplementedGdk() macro to a separate
        header file. Remove existing notImplementedGdk() macros and replace
        remaining notImplemented() to notImplementedGdk() in gdk code.

        * loader/gdk/DocumentLoaderGdk.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        * page/gdk/ContextMenuClientGdk.cpp:
        (WebCore::ContextMenuClientGdk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGdk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGdk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGdk::downloadURL):
        (WebCore::ContextMenuClientGdk::copyImageToClipboard):
        (WebCore::ContextMenuClientGdk::searchWithGoogle):
        (WebCore::ContextMenuClientGdk::lookUpInDictionary):
        (WebCore::ContextMenuClientGdk::speak):
        (WebCore::ContextMenuClientGdk::stopSpeaking):
        * page/gdk/EventHandlerGdk.cpp:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::Cursor::Cursor):
        * platform/gdk/EditorClientGdk.cpp:
        * platform/gdk/NotImplementedGdk.h: Added.
        * platform/gdk/PopupMenuGdk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        * platform/gdk/RenderThemeGdk.cpp:
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::Image::drawPattern):
        * platform/network/gdk/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/gdk/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setupPUT):
        (WebCore::ResourceHandleManager::setupPOST):

2007-02-22  Feng Qian  <feng@chromium.org>

        Reviewed by Maciej.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=12850
          Leaks >10k objects

        and

        - http://bugs.webkit.org/show_bug.cgi?id=12853
          add a EventListener leak counter

        Problem: RemoveEventListener leaks memory if the listener is not
        registered.
        Fix: Added Window::findJSEventListener function w/o creating a 
        JSEventListener; Renamed getJSEventListener to findOrCreateJSEventListener;

        As an enhancement, added a leak counter for EventListeners.

        Added a test case, LayoutTests/fast/events/remove-event-listener.html.

        * WebCore/bindings/js/kjs_dom.cpp:
        * WebCore/bindings/js/kjs_window.h:
        * WebCore/bindings/js/kjs_window.cpp:
        * WebCore/bindings/js/kjs_event.cpp: Add a leak counter.
        * WebCore/bindings/js/JSXMLHttpRequest.cpp:
        * LayoutTests/fast/events/remove-event-listener.html:

2007-02-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4998203> 
        REGRESSION: Back-forward list gets messed up when navigating to error pages with back-forward cache turned off
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Remove call to setPolicyDocumentLoader(), the policy document loader is set immediately after, and setting it before 
        calling shouldReloadToHandleUnreachableURL causes us to get the wrong URL.
        
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        Check if the unreachable URL is equal to the document loader's request.
        
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        Check the provisional document loader's unreachable URL.

2007-02-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/5007143>
        REGRESSION: WebKit doesn't remember horizontal position of caret when moving forward by line

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController): Initialize 
        m_xPosForVerticalArrowNavigation.
        (WebCore::SelectionController::setSelection): Call the new setter.
        (WebCore::SelectionController::modifyMovingRightForward): For line
        and paragraph granularities, use the saved xPosForVerticalArrowNavigation 
        even if the old selection was a range. Use the x position of the 
        *start*, not the end of the selection if there is no saved 
        xPosForVerticalArrowNavigation.  This matches TextEdit's behavior.
        (WebCore::SelectionController::modifyMovingLeftBackward): For line
        and paragraph granularities, use the saved xPosForVerticalArrowNavigation 
        even if the old selection was a range.
        (WebCore::SelectionController::modify): Preserve the xPosForVerticalArrowNavigation
        for line and paragraph granularities.
        (WebCore::SelectionController::xPosForVerticalArrowNavigation): Removed
        the recalc bool because it is now always false.
        (WebCore::SelectionController::setXPosForVerticalArrowNavigation): Added.
        * editing/SelectionController.h: Moved m_xPosForVerticalArrowNavigation
        from Frame.
        * page/Frame.cpp: Moved m_xPosForVerticalArrowNavigation to SelectionController.
        * page/Frame.h: Ditto.
        * page/FramePrivate.h: Ditto.

2007-02-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam. Manual test added.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12399 REGRESSION: 
        Unable to prevent default context menu from appearing. <rdar://
        problem/5017416>

        This problem appeared because of two facets of the current context 
        menu design. First, all context menu events are now considered to 
        be "swallowed" since we take care of building up the regular 
        context menu through the defaultEventHandler(). Second, the context 
        menu controller holds onto it's context menu until a new one is 
        created. There would be logistical problems changing this since 
        AppKit relies on the menu being around for as long as it is
        visible on the screen and we don't get any notification once the 
        menu is popped-down.

        This patch fixes the problem by giving WebKit a way to clear the 
        controller's context menu. WebKit now clears the menu before it 
        propagates a new context menu event through the DOM.

        * WebCore.exp:
        * manual-tests/DOMContextMenuEvent.html: Added.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::clearContextMenu):
        * page/ContextMenuController.h:

2007-02-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin and Adele
        
        - fixed <rdar://problem/4129417> Need final art for textarea's resize corner
        
        This probably broke some layout pixel tests since the image changed. I'm going to
        track those down in a moment (non-trivial since there are a bunch failing for other
        reasons).

        * Resources/textAreaResizeCorner.tiff:
        new art

        * Resources/deleteButton.tiff:
        * Resources/deleteButtonPressed.tiff:
        these got smaller when I ran compress-tiffs on this directory
        
2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada, Lou and Steve.

        Moving basic components of ClipboardMac to Clipboard, 
        last of the basic common code merge will come later (namely setting the 
        drag element/image).
        
        Tidying up in DragController including a few bad PassRefPtr uses and
        removing unnecessary accessors.  Also initialise fields properly to
        fix <rdar:/problems/5014889>

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
          New constructor
          
        * dom/Clipboard.h:
        (WebCore::Clipboard::isForDragging):
        (WebCore::Clipboard::dragLocation):
        (WebCore::Clipboard::dragImage):
        (WebCore::Clipboard::dragImageElement):
          Exposing common data
          
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
          Initialise m_isHandlingDrag (oops)
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::tryDocumentDrag):
          Fixing PassRefPtr misuse
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doSystemDrag):
          Make sure we're using the correct coordinate space
          
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
          Reset drag source correctly
          
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
          update constructor to use new Clipboard constructor

2007-02-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5014970> 9A374: Tabs don't work in the message body

        Test: fast/events/keypress-insert-tab.html

        * page/EventHandler.cpp: (WebCore::EventHandler::defaultTextInputEventHandler):
          If the defaultTabEventHandler doesn't handle the event, then go on to the insertText case.

2007-02-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4948887> REGRESSION: Correct differences in public DOM API that inadvertently changed in Leopard

        * bindings/objc/PublicDOMInterfaces.h: Changes return types for two size properties, adds deprecated DOMEventTarget methods.
        * bindings/scripts/CodeGeneratorObjC.pm: Fixed public API checking for protocols, adds support for ConvertToString.
        * dom/EventTarget.idl: Marks addEventListener and removeEventListener with the OldStyleObjC attribute.
        * html/HTMLBaseFontElement.idl: Changes the size property to a DOMString for ObjC only.
        * html/HTMLInputElement.idl: Changes the size property to a DOMString for ObjC only.
        * html/HTMLOptionsCollection.idl: Changes the length property to be unsigned.

2007-02-22  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        Fix <rdar://problem/5016969> REGRESSION: "Check Spelling As You Type" context menu item is never checked

        * platform/ContextMenu.cpp: (WebCore::ContextMenu::checkOrEnableIfNeeded): Set shouldCheck for ContextMenuItemTagCheckSpellingWhileTyping.

2007-02-22  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11447
        REGRESSION(NativeListBox): List not scrolled to preselected option
        <rdar://problem/4957463>
        
        Initiate scroll when selected <option> is added to <select>.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::insertedIntoDocument):
        * html/HTMLOptionElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::notifyOptionSelected):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::scrollToSelection):
        * html/HTMLSelectElement.h:

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix sites with fixed positioned backgrounds.

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

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Properly implement canvas/scrollview's. Get
        rid of ScrollViewCanvas and replace it with
        a tailor abstractscrollview (now in qwebframe).
        Scrolling of pages is finally completely smooth.

        * WebCore.pro:
        * platform/ScrollView.h:
        * platform/qt/ScrollViewCanvasQt.cpp: Removed.
        * platform/qt/ScrollViewCanvasQt.h: Removed.
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::contentsToWindow):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::addChild):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::canvas):
        (WebCore::WidgetPrivate::parentScroll):
        (WebCore::WidgetPrivate::setGeometry):
        (WebCore::WidgetPrivate::geometry):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::setFrameGeometry):

2007-02-21  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Improve notImplemented() macro for gdk. Rename to notImplementedGdk() to
        give it a unique name (so that it doesn't clash with notImplemented()
        for other platforms).
        Make it print a given warning only once, so that frequently called
        functions don't clutter the output.
        Don't print the warning if DISABLE_NI_WARNING env variable is set.

        * loader/gdk/FrameLoaderClientGdk.cpp:
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGdk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGdk::createPlugin):
        (WebCore::FrameLoaderClientGdk::createFrame):
        (WebCore::FrameLoaderClientGdk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGdk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::overrideMediaType):
        (WebCore::FrameLoaderClientGdk::windowObjectCleared):
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        (WebCore::FrameLoaderClientGdk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGdk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGdk::restoreViewState):
        (WebCore::FrameLoaderClientGdk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGdk::makeDocumentView):
        (WebCore::FrameLoaderClientGdk::makeRepresentation):
        (WebCore::FrameLoaderClientGdk::forceLayout):
        (WebCore::FrameLoaderClientGdk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGdk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGdk::detachedFromParent1):
        (WebCore::FrameLoaderClientGdk::detachedFromParent2):
        (WebCore::FrameLoaderClientGdk::detachedFromParent3):
        (WebCore::FrameLoaderClientGdk::detachedFromParent4):
        (WebCore::FrameLoaderClientGdk::loadedFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGdk::dispatchWillClose):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGdk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGdk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGdk::dispatchShow):
        (WebCore::FrameLoaderClientGdk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGdk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGdk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGdk::willChangeTitle):
        (WebCore::FrameLoaderClientGdk::finishedLoading):
        (WebCore::FrameLoaderClientGdk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGdk::setDefersLoading):
        (WebCore::FrameLoaderClientGdk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGdk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGdk::clearArchivedResources):
        (WebCore::FrameLoaderClientGdk::canHandleRequest):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):
        (WebCore::FrameLoaderClientGdk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGdk::didFinishLoad):
        (WebCore::FrameLoaderClientGdk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGdk::setTitle):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGdk::download):
        (WebCore::FrameLoaderClientGdk::cancelledError):
        (WebCore::FrameLoaderClientGdk::cannotShowURLError):
        (WebCore::FrameLoaderClientGdk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGdk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGdk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGdk::shouldFallBack):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToPageCache):
        (WebCore::FrameLoaderClientGdk::canCachePage):
        (WebCore::FrameLoaderClientGdk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGdk::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientGdk::setMainDocumentError):
        (WebCore::FrameLoaderClientGdk::startDownload):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientGdk::shouldGoToHistoryItem):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::shouldDeleteRange):
        (WebCore::EditorClientGdk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGdk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGdk::spellCheckerDocumentTag):
        (WebCore::EditorClientGdk::shouldBeginEditing):
        (WebCore::EditorClientGdk::shouldEndEditing):
        (WebCore::EditorClientGdk::shouldInsertText):
        (WebCore::EditorClientGdk::shouldChangeSelectedRange):
        (WebCore::EditorClientGdk::shouldApplyStyle):
        (WebCore::EditorClientGdk::didBeginEditing):
        (WebCore::EditorClientGdk::respondToChangedContents):
        (WebCore::EditorClientGdk::didEndEditing):
        (WebCore::EditorClientGdk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGdk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGdk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::registerCommandForUndo):
        (WebCore::EditorClientGdk::registerCommandForRedo):
        (WebCore::EditorClientGdk::clearUndoRedoOperations):
        (WebCore::EditorClientGdk::canUndo):
        (WebCore::EditorClientGdk::canRedo):
        (WebCore::EditorClientGdk::undo):
        (WebCore::EditorClientGdk::redo):
        (WebCore::EditorClientGdk::shouldInsertNode):
        (WebCore::EditorClientGdk::pageDestroyed):
        (WebCore::EditorClientGdk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGdk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGdk::textFieldDidBeginEditing):
        (WebCore::EditorClientGdk::textFieldDidEndEditing):
        (WebCore::EditorClientGdk::textDidChangeInTextField):
        (WebCore::EditorClientGdk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGdk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGdk::textDidChangeInTextArea):
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::adjustTextFieldStyle):
        * platform/gdk/TemporaryLinkStubs.cpp:
        (FrameView::updateBorder):
        (Widget::setEnabled):
        (Widget::isEnabled):
        (Widget::focusPolicy):
        (Widget::enableFlushDrawing):
        (Widget::disableFlushDrawing):
        (Widget::lockDrawingFocus):
        (Widget::unlockDrawingFocus):
        (Widget::removeFromParent):
        (Widget::paint):
        (Widget::setIsSelected):
        (Widget::invalidate):
        (Widget::invalidateRect):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (ChromeClientGdk::chromeDestroyed):
        (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):
        (ChromeClientGdk::closeWindowSoon):
        (ChromeClientGdk::canTakeFocus):
        (ChromeClientGdk::takeFocus):
        (ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (ChromeClientGdk::addMessageToConsole):
        (ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (ChromeClientGdk::runJavaScriptAlert):
        (ChromeClientGdk::runJavaScriptConfirm):
        (ChromeClientGdk::runJavaScriptPrompt):
        (ChromeClientGdk::setStatusbarText):
        (ChromeClientGdk::shouldInterruptJavaScript):
        (ChromeClientGdk::tabsToLinks):
        (ChromeClientGdk::windowResizerRect):
        (ChromeClientGdk::addToDirtyRegion):
        (ChromeClientGdk::scrollBackingStore):
        (ChromeClientGdk::updateBackingStore):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (SearchPopupMenu::saveRecentSearches):
        (SearchPopupMenu::loadRecentSearches):
        (SearchPopupMenu::SearchPopupMenu):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        (FileChooser::FileChooser):
        (FileChooser::~FileChooser):
        (FileChooser::openFileChooser):
        (FileChooser::basenameForWidth):
        (ResourceHandle::willLoadFromCache):
        (ResourceHandle::loadsBlocked):
        (ResourceHandle::loadResourceSynchronously):
        (Icon::Icon):
        (Icon::~Icon):
        (Icon::newIconForFile):
        (Icon::paint):
        (Font::drawComplexText):
        (Font::floatWidthForComplexText):
        (Font::offsetForPositionForComplexText):
        (PageCache::close):
        (Editor::ignoreSpelling):
        (Editor::learnSpelling):
        (Editor::isSelectionUngrammatical):
        (Editor::isSelectionMisspelled):
        (Editor::guessesForMisspelledSelection):
        (Editor::guessesForUngrammaticalSelection):
        (Editor::markMisspellingsAfterTypingToPosition):
        (Editor::newGeneralClipboard):
        (Pasteboard::generalPasteboard):
        (Pasteboard::writeSelection):
        (Pasteboard::writeURL):
        (Pasteboard::writeImage):
        (Pasteboard::clear):
        (Pasteboard::canSmartReplace):
        (Pasteboard::documentFragment):
        (Pasteboard::plainText):
        (Pasteboard::Pasteboard):
        (Pasteboard::~Pasteboard):
        (ContextMenu::ContextMenu):
        (ContextMenu::~ContextMenu):
        (ContextMenu::appendItem):
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (WebCore::supportedKeySizes):
        (WebCore::systemBeep):
        (WebCore::userIdleTime):

2007-02-21  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12820
        REGRESSION (r19706): Caret not painted after popup, failing editing/pasteboard/4641033

        Yet another attempt to figure out exactly who should paint the caret.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::isInsideNode):
        * editing/SelectionController.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

2007-02-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12818
          REGRESSION (r19148): shacknews.com does not render completely

        Test: fast/dynamic/staticY-marking-parents-regression.html

        Changed calls to setChildNeedsLayout(true) during layout to
        setChildNeedsLayout(true, false). Prior to r19148, the default behavior
        of marking containers did not matter because the caller was the container
        and was already marked, but r19148 added marking of the parent of
        objects with static Y, which can be different from the caller and not
        necessarily marked already.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStaticY):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2007-02-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Dave Harrison

        <rdar://problem/5014313> - Crash in FrameLoader::restoreScrollPositionAndViewState() 
        after regaining network connection

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::restoreScrollPositionAndViewState):  Leave an assertion for debug
        build exploration, but gracefully handle the release build case

2007-02-21  Timothy Hatcher  <timothy@apple.com>

        Rubber-stamped by Darin.

        * bindings/objc/PublicDOMInterfaces.h: Add missing classes that are really public.
        Also adds the deprecated selector for getComputedStyle: on DOMDocument.

2007-02-21  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/5012665>
        Removing indent from list moves the caret to the line below

        Selection preservation during indent, outdent and list 
        operations uses rangeFromLocationAndLength.  Ranges returned 
        by rangeFromLocationAndLength were incorrect for locations 
        just before the line breaks that are emitted after blocks.  
        This is because TextIterator emitted bad ranges for these line 
        breaks (ranges that started and ended *after* the block).  
        The fix corrects the start but not the end.  This is acceptible 
        because there is code in rangeFromLocationAndLength that corrects 
        the ends of runs using the start of the run and VisiblePosition 
        creation.
        
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::exitNode): Emit a position *inside* 
        the block, after its contents.

2007-02-21  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4999030> Indexing into select element to get to items in the options collection is broken

        Test: fast/forms/select-index-setter.html

        Added indexSetter for HTMLSelectElement.

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

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: (WebCore::JSHTMLOptionsCollection::indexSetter):
          Moved code to selectIndexSetter so it can be shared between these classes.
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectIndexSetter): Added.  Moved from JSHTMLOptionsCollection::indexSetter.
        (WebCore::JSHTMLSelectElement::indexSetter): Calls selectIndexSetter.
        * bindings/js/JSHTMLSelectElementCustom.h: Added.
        * html/HTMLSelectElement.idl: Added HasCustomIndexSetter keyword.

        * bindings/scripts/CodeGeneratorJS.pm: When generating "put" methods, if the propertyName is a number, call the indexSetter first,
          and then call the version of lookupPut that will also try to use the parent's lookup table.  This matches the order of our
          old code, before we autogenerated the JSHTMLSelectElement class.

2007-02-21  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Add files to the build.

        * WebCore.pro:

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Implementing popups for the Qt platform.

        * WebCore.pro:
        * platform/PopupMenu.h:
        * platform/Widget.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        * platform/qt/QWebPopup.cpp: Added.
        (WebCore::QWebPopup::QWebPopup):
        (WebCore::QWebPopup::exec):
        (WebCore::QWebPopup::hideEvent):
        (WebCore::QWebPopup::activeChanged):
        * platform/qt/QWebPopup.h: Added.
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::canvas):

2007-02-21  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Remove unneeded hack now.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setCheckboxSize):

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix rendering of lineedits and remove the spurious
        padding on push-buttons.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::sizeForFont):
        (WebCore::RenderThemeQt::setButtonPadding):

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Fix compilation.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):

2007-02-20  Adam Roben  <aroben@apple.com>

        Preemptive build fix.

        * platform/mac/FontCacheMac.mm: Remove unused (and non-existent) header.

2007-02-20  Adam Roben  <aroben@apple.com>

        Fix the build the right way.

        * platform/StringTruncator.cpp:
        (WebCore::truncateString): Keep all widths as floats.

2007-02-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Implement writeImage() on Pasteboard so that the context menus can 
        call into the editor for the "Copy image" command instead of 
        calling across the clients.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::copyImage): Call into the Pasteboard.
        * editing/Editor.h:
        * loader/mac/LoaderNSURLExtras.h: A new NSURL extra needed inside 
        WebCore.
        * loader/mac/LoaderNSURLExtras.m: Made this file Objective-C++ 
        (from Objective-C) since the call into the MIMETypeRegistry will 
        return a Vector.
        (urlByRemovingComponent): Cast to build as Obj-C++
        (urlWithDataRelativeToURL): Same.
        (vectorContainsString): Helper.
        (suggestedFilenameWithMIMEType): New function.
        * page/ContextMenuClient.h: Remove copyImageToClipboard()
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Call 
        into the editor instead of the client.
        * page/mac/WebCoreViewFactory.h: New localized String.
        * platform/LocalizedStrings.h: Same.
        * platform/MimeTypeRegistry.h: Expose two additional functions for 
        MIMEType information from WebCore System Interface.
        * platform/Pasteboard.h:
        * platform/SharedBuffer.h: Make platformData() and platformDataSize
        () public since they are needed to write the image to the 
        pasteboard.
        * platform/mac/LocalizedStringsMac.mm: New localized string.
        (WebCore::copyImageUnknownFileLabel):
        * platform/mac/MimeTypeRegistryMac.mm:
        (WebCore::MimeTypeRegistry::getExtensionsForMIMEType):
        (WebCore::MimeTypeRegistry::getPreferredExtensionForMIMEType):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::writeURL): Write the correct types if the url 
        is for an image.
        (WebCore::fileWrapperForImage):
        (WebCore::Pasteboard::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::writeImage):
        * platform/mac/WebCoreNSStringExtras.h: Added. Some the the 
        NSStringExtras that were in WebKit are now needed by WebCore. To 
        avoid having two copies of these functions, I just moved the 
        implementations to WebCore. The WebKit functions just call into 
        WebCore.
        * platform/mac/WebCoreNSStringExtras.mm: Added.
        (hasCaseInsensitiveSuffix):
        (hasCaseInsensitiveSubstring):
        (filenameByFixingIllegalCharacters):
        * platform/mac/WebCoreSystemInterface.h: 
        wkGetPreferredExtensionForMIMEType and wkGetExtensionsForMIMEType 
        are now needed in WebCore as well as WebKit.
        * platform/mac/WebCoreSystemInterface.mm:

2007-02-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * platform/StringTruncator.cpp:
        (WebCore::truncateString): Added explicit casts.

2007-02-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin and Anders.

        Fix <rdar://problem/4736215> Make WebCoreStringTruncator use WebCore types

        * WebCore.exp: Updated symbols.
        * WebCore.xcodeproj/project.pbxproj: Updated file names.
        * bridge/mac/WebCoreStringTruncator.h: Removed.
        * bridge/mac/WebCoreStringTruncator.mm: Removed.
        * platform/StringTruncator.cpp: Added. Moved from bridge/mac/WebCoreStringTruncator.mm.
        (WebCore::textBreakAtOrPreceding): Added.
        (WebCore::boundedTextBreakFollowing): Added.
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::stringWidth): Now takes a const Font& instead of a Font*.
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::width):
        * platform/StringTruncator.h: Added.
        * platform/TextBreakIterator.h: Added isTextBreak declaration.
        * platform/TextBreakIteratorICU.cpp:
        (WebCore::isTextBreak): Implemented.
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::basenameForWidth): Updated for changes to WebCoreStringTruncator.
        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::isTextBreak): Stubbed out.

2007-02-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/5006779>
        REGRESSION: Paste and Match Style of quoted text onto empty line yields quoted text
        
        We decided to change the copy/paste behavior in both
        the Paste and the Paste and Match Style cases.

        * editing/markup.cpp:
        (WebCore::createMarkup): Don't add mail blockquote wrappers
        unless the user selected one or more paragraphs.

2007-02-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/4912899> WebCore project ObjC @property cleanup

        * bindings/objc/DOMObject.h: Add the new style @property
        * bindings/objc/PublicDOMInterfaces.h: Update to the new style @property
        * bindings/scripts/CodeGeneratorObjC.pm: Export both new and old style @properties

2007-02-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5007248> need to export symbols for DOM exception constants

        * WebCore.exp: Adds DOMEventException, DOMException, DOMRangeException, DOMXPathException

2007-02-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4900579> WebKit -finalize methods are not thread-safe; design change needed

        Call WebCoreObjCFinalizeOnMainThread from the initialize method of all the classes
        that have a finalizer that needs called on the main thread.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]):
        * bridge/mac/WebCoreScriptDebugger.mm:
        (+[WebCoreScriptDebugger initialize]):
        * platform/mac/SharedBufferMac.mm:
        (+[SharedBufferData initialize]):
        * platform/mac/WebCoreObjCExtras.c: Added.
        (WebCoreObjCFinalizeOnMainThread):
        * platform/mac/WebCoreObjCExtras.h: Added.

2007-02-20  Geoffrey Garen  <ggaren@apple.com>

        Not not reviewed by Mitz Pettel.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=12827 | <rdar://problem/5006671> 
        REGRESSION: -[DOMCSSStyleDeclaration setValue:forKey:] doesn't have an 
        immediate effect
        
        Let's just pretend this never happened.
        
        I attempted a layout test but I couldn't get the old code to fail because 
        there's no obvious way to isolate the ObjC bindings in a test that's 
        controlled by JS.
        
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):

2007-02-20  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej S.

        Gdk build fixes for recent refactorings.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * page/gdk/DragControllerGdk.cpp:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        * page/gdk/EventHandlerGdk.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/DragImage.h:
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        * platform/gdk/EditorClientGdk.cpp:
        (WebCore::EditorClientGdk::shouldChangeSelectedRange):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::textFieldDidBeginEditing):
        (WebCore::EditorClientGdk::textFieldDidEndEditing):
        (WebCore::EditorClientGdk::textDidChangeInTextField):
        (WebCore::EditorClientGdk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGdk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGdk::textDidChangeInTextArea):
        * platform/gdk/EditorClientGdk.h:
        * platform/gdk/FrameGdk.cpp:
        (WebCore::Frame::print):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        (WebCore::Frame::dragImageForSelection):
        * platform/gdk/FrameGdk.h:
        * platform/gdk/MimeTypeRegistryGdk.cpp: Added.
        * platform/gdk/TemporaryLinkStubs.cpp:
        (ChromeClientGdk::tabsToLinks):
        (ChromeClientGdk::windowResizerRect):
        (ChromeClientGdk::addToDirtyRegion):
        (ChromeClientGdk::scrollBackingStore):
        (ChromeClientGdk::updateBackingStore):
        * webcore-base.bkl:

2007-02-20  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Darin.

        Allow over-writting Product, ProductSub, Vendor and VendorSub
        js properties via #define WEBCORE_NAVIGATOR_*

        * bindings/js/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):

2007-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - prepare to fix some "stop loading" bugs by moving state from the
          FrameLoader class to the DocumentLoader class

        * WebCore.exp: Update since cancelMainResourceLoad is now on the document loader.

        * html/HTMLDocument.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): Removed unused bodyElement and htmlElement
        data members.
        (WebCore::HTMLDocument::lastModified): Call getResponseModifiedHeader directly on
        the document loader.

        * loader/DocumentLoader.h: Moved m_mainResourceLoader, m_subresourceLoaders, and
        m_plugInStreamLoaders here.
        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll): Moved here from FrameLoader.
        (WebCore::setAllDefersLoading): Ditto.
        (WebCore::DocumentLoader::mainResourceData): Moved the body of FrameLoader's
        mainResourceData function here.
        (WebCore::DocumentLoader::stopLoading): Replaced calls to hasMainResourceLoader
        and cancelMainResourceLoad with code that works directly on m_mainResourceLoader.
        Call the stop functions moved from FrameLoader here on ourselves.
        (WebCore::DocumentLoader::setupForReplaceByMIMEType): Ditto.
        (WebCore::DocumentLoader::setPrimaryLoadComplete): Moved the code to store the
        main resource data here; it doesn't require separate functions.
        (WebCore::DocumentLoader::isLoadingInAPISense): Removed call to isLoadingSubresources
        and instead just check if the m_subresourceLoaders set is empty.
        (WebCore::DocumentLoader::setDefersLoading): Moved code here from FrameLoader.
        (WebCore::DocumentLoader::stopLoadingPlugIns): Ditto.
        (WebCore::DocumentLoader::stopLoadingSubresources): Ditto.
        (WebCore::DocumentLoader::addSubresourceLoader): Ditto.
        (WebCore::DocumentLoader::removeSubresourceLoader): Ditto.
        (WebCore::DocumentLoader::addPlugInStreamLoader): Ditto.
        (WebCore::DocumentLoader::removePlugInStreamLoader): Ditto.
        (WebCore::DocumentLoader::isLoadingSubresources): Ditto.
        (WebCore::DocumentLoader::isLoadingPlugIns): Ditto.
        (WebCore::DocumentLoader::startLoadingMainResource): Ditto.
        (WebCore::DocumentLoader::cancelMainResourceLoad): Ditto.

        * loader/FrameLoader.h: Removed stopLoadingPlugIns, stopLoadingSubresources,
        cancelMainResourceLoad, hasMainResourceLoader, isLoadingSubresources,
        mainResourceData, releaseMainResourceLoader, lastModified, startLoadingMainResource,
        isLoadingPlugIns, m_mainResourceLoader, m_subresourceLoaders, m_plugInStreamLoaders,
        m_responseRefreshHeader, and m_responseModifiedHeader.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setDefersLoading): Call setDefersLoading on all the document
        loaders.
        (WebCore::FrameLoader::stopLoading): Get rid of code to set m_responseRefreshHeader
        and m_responseModifiedHeader.
        (WebCore::FrameLoader::receivedFirstData): Call httpHeaderField on the response
        here to get the Refresh, instead of storing it in a data member.
        (WebCore::FrameLoader::addPlugInStreamLoader): Change to just call this on the
        document loader.
        (WebCore::FrameLoader::removePlugInStreamLoader): Ditto.
        (WebCore::FrameLoader::isLoading): Change to call isLoadingSubresources and
        isLoadingPlugIns on the document loader.
        (WebCore::FrameLoader::addSubresourceLoader): Change to just call this on the
        document loader.
        (WebCore::FrameLoader::removeSubresourceLoader): Ditto.
        (WebCore::FrameLoader::commitProvisionalLoad): Call stopLoadingSubresources and
        stopLoadingPlugIns on the document loader. Removed code to set
        m_responseModifiedHeader.
        (WebCore::FrameLoader::startLoading): Call isLoadingMainResource and
        startLoadingMainResource on the document loader.

        * loader/ImageDocument.cpp: (WebCore::ImageTokenizer::finish): Call
        mainResourceData() on the document loader instead of the frame loader.

        - other changes

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkCacheObjectStatus): Fixed indentation.

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix focus handling and make the forms
        work as expected.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setScrollArea):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::canvas):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::clearFocus):
        (WebCore::Widget::setFont):
        (WebCore::Widget::setQWidget):
        (WebCore::Widget::focusPolicy):

2007-02-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and then Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10735
          Clicking in SVG results causes WebKit to consume 100% CPU for several minutes

        No test since there is no change in functionality.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj: Added PositionIterator.{cpp,h}.
        * WebCoreSources.bkl:
        * dom/Position.cpp:
        (WebCore::Position::Position): Added converting constructor from
        PositionIterator.
        (WebCore::Position::previous): Changed assert() to ASSERT().
        (WebCore::Position::next): Ditto.
        (WebCore::isStreamer): Changed the argument to a PositionIterator.
        (WebCore::Position::upstream): Changed to use PositionIterator.
        (WebCore::Position::downstream): Ditto.
        (WebCore::Position::inRenderedText): Made public.
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight): Changed
        into a static member function.
        (WebCore::Position::nodeIsUserSelectNone): Ditto.
        * dom/Position.h:
        * dom/PositionIterator.cpp: Added. A Position iterator with constant-time
        increment, decrement, and several predicates on the Position it is at.
        Conversion to/from Position is O(n) in the offset.
        (WebCore::PositionIterator::increment):
        (WebCore::PositionIterator::decrement):
        (WebCore::PositionIterator::atStart):
        (WebCore::PositionIterator::atEnd):
        (WebCore::PositionIterator::atStartOfNode):
        (WebCore::PositionIterator::atEndOfNode):
        (WebCore::PositionIterator::isCandidate):
        * dom/PositionIterator.h: Added.
        (WebCore::PositionIterator::PositionIterator):
        (WebCore::PositionIterator::node):
        (WebCore::PositionIterator::offsetInLeafNode):
        * editing/htmlediting.cpp:
        (WebCore::nextCandidate): Changed to use PositionIterator.
        (WebCore::previousCandidate): Changed to use PositionIterator.

2007-02-20  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12439
        SVG parser complains about points attribute in polygon and polyline element

        Return true when the parsed points specification is valid.

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber):
        (WebCore::SVGPolyParser::parsePoints):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseMappedAttribute):

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make editing of forms work plus make sure that non-void methods
        always return something.

        * WebCore.pro:
        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::setData):

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Refactor and fix the implementation of theming of
        form elements on the Qt platform.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::theme):
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::supportsHover):
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::RenderThemeQt::controlSupportsTints):
        (WebCore::RenderThemeQt::supportsControlTints):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::paintResizeControl):
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::systemFont):
        (WebCore::RenderThemeQt::minimumMenuListSize):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        (WebCore::RenderThemeQt::paintCheckbox):
        (WebCore::RenderThemeQt::paintRadio):
        (WebCore::RenderThemeQt::setRadioSize):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::setButtonSize):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::paintSliderTrack):
        (WebCore::RenderThemeQt::paintSliderThumb):
        (WebCore::RenderThemeQt::paintSearchField):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        (WebCore::RenderThemeQt::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQt::paintSearchFieldDecoration):
        (WebCore::RenderThemeQt::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQt::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::getStylePainterAndWidgetFromPaintInfo):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::RenderThemeQt::setSizeFromFont):
        (WebCore::RenderThemeQt::sizeForFont):
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::setPopupPadding):
        (WebCore::RenderThemeQt::setPrimitiveSize):
        * platform/qt/RenderThemeQt.h: Added.

2007-02-19  Lars Naesbye Christensen <lars@naesbye.dk>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12815
        Two image files not included in project file

        * WebCore.xcodeproj/project.pbxproj: Added crossHairCursor.png and
        notAllowedCursor.png.

2007-02-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed some leaks in RenderThemeMac.
        
        No test case because 'leaks' can't detect these leaks inside DRT, even if
        DRT forces the WebView to paint. ('leaks' can detect these leaks inside
        Safari. Weird.)
        
        * rendering/RenderThemeMac.h:
            - Renamed data members to m_*, to match our style guidelines.
            - Renamed *Is* to is**, to match our style guidelines.
            - Removed a few unnecessary data members.
            - Made cached values like m_checkbox mutable, since they can change
            inside functions that don't change the logical state of a RenderTheme
            object. (The alternative was to make some const functions non-const.)

        (WebCore::RenderThemeMac::paintMenuList): Took CFType pointers that just 
        used to leak and placed them in RetainPtrs.
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): ditto

        Factored inline implementations of lazy initialization into these accessor
        functions, for better encapsulation:
        
        (WebCore::RenderThemeMac::checkbox):
        (WebCore::RenderThemeMac::radio):
        (WebCore::RenderThemeMac::button):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::sliderThumbHorizontal): The inline version of
        this initialization used to confuse the retained data member with a local
        stack value, causing both a leak and a failure to initialize. Fixed now.
        (WebCore::RenderThemeMac::sliderThumbVertical): ditto
        (WebCore::RenderThemeMac::resizeCornerImage):

2007-02-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12817
          REGRESSION (r18634): Table border-collapse problems with right margin

        Test: fast/repaint/table-outer-border.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Reordered to initialize horizontal overflow
        after table sections have computed their outer horizontal borders.

2007-02-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/4613701> REGRESSION: A line break in the source HTML of a link becomes visible after drag & drop

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        Call simplifyWhiteSpace() on the proposed link title to match what's displayed on the web page, instead of using the
        raw source HTML text.

2007-02-19  David Hyatt  <hyatt@apple.com>

        Fix for Radar 4981605, regression where button grows randomly when a select is
        opened.  With the new form controls, the WinIE quirk for using line width
        ended up being used for them more.

        This patch removes the quirk after verifying that Firefox doesn't implement
        the quirk at all.  usesLineWidth is being renamed to shrinksToAvoidFloats to
        make it clear that the new method only applies to block objects that avoid floats
        and that have auto width.

        Also fixed a regression where whitespace after a floating <select> at the start
        of a block got incorrectly rendered.  Make sure skipWhitespace always skips
        through floating/positioned elements regardless of the whitespace setting (this
        way the white-space:pre value on floating <select>s doesn't cause trouble).

        Reviewed by darin

        fast/block/float/float-avoidance.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shrinkToAvoidFloats):
        * rendering/RenderObject.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::skipWhitespace):

2007-02-19  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Darin.

        Update stylesheet href, when document's baseUrl changes. It needs
        update when the stylesheet is constructed before the parser hits the base tag.
        http://bugs.webkit.org/show_bug.cgi?id=12214

        * css/StyleSheet.h:
        (WebCore::StyleSheet::setHref):
        * dom/Document.cpp:
        (WebCore::Document::setBaseURL):
        * dom/Document.h:

2007-02-19  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11518
          REGRESSION (r14376): View Source not available after Back navigation from a non-HTML page

        The FrameLoader's responseMIMEType was not being updated when a page was
        brought back from the page cache.
        
        Moved the line that updates the MIME type from commitProvisionalLoad() to
        transitionToCommitted().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):

2007-02-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Make DragController::maxDragImageSize a function to get rid of the global initializer.
        
        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * page/DragController.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::maxDragImageSize):
        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::maxDragImageSize):

2007-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/5006414> REGRESSION: Crash occurs at WebCore::Frame::loader()
          when loading AFL Ladder widget

        * html/HTMLFrameElementBase.cpp: (WebCore::HTMLFrameElementBase::openURL):
        Add missing null check so this fails without crashing when called on an element
        that's no longer in a frame.

2007-02-19  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=10990
          REGRESSION: Pressing a pop-up's access key doesn't focus it
          <rdar://problem/4823138>
          
        Focus the select element too in accessKeyAction.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction):

2007-02-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        - really fix http://bugs.webkit.org/show_bug.cgi?id=11974
        REGRESSION: Caret drawn over input when smaller than font size on initial focus
        <rdar://problem/4960258>
        
        Avoid double painting caret when it is on a block element.
        
        Layout test for this already went in previous try (it only fails in pixel mode) in r19626.

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

2007-02-19  Lars Knoll <lars@trolltech.com>

        Added a one line patch from Olliej to create the
        clipboard on demand (to stop things from crashing), 
        and added lots of notImplemented() warnings all 
        over the place.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::dragLocation):
        (WebCore::ClipboardQt::dragImage):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::dragImageElement):
        (WebCore::ClipboardQt::setDragImageElement):
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):

2007-02-19  Lars Knoll <lars@trolltech.com>

        Compile again.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::types):

2007-02-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej.
        
        Additional coding by Maciej, additional review by Oliver.

        Get rid of the FrameMac and FrameQt classes. Instead
        move all methods into Frame directly, and implement
        some platform specific methods in foo/FrameFoo.cpp.

        Some general cleanup in Frame:
        * Move some methods out of Frame, to the place where they 
        belong.
        * Unify the different ways of creating the JavaScript wrappers
        for <object>, <embed> and <applet>
        * Some cleanup of the WebCoreFrameBridge

        * ForwardingHeaders/bindings/NP_jsobject.h: Added.
        * ForwardingHeaders/bindings/npruntime_impl.h: Added.
        * ForwardingHeaders/bindings/runtime_root.h: Added.
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::shouldInterruptScript):
        * bindings/objc/DOM.mm:
        (-[DOMNode KJS::Bindings::]):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bridge/EditorClient.h:
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::updateBorder):
        (WebCore::FrameView::updateDashboardRegions):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject rendererForView:]):
        * dom/Position.cpp:
        (WebCore::Position::next):
        * editing/CommandByName.cpp:
        (WebCore::Frame::execCopy):
        (WebCore::Frame::execCut):
        (WebCore::Frame::execPaste):
        * editing/Editor.cpp:
        (WebCore::Editor::canEdit):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsPlainText):
        * editing/Editor.h:
        * editing/JSEditor.cpp:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::getInstance):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::getInstance):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::getInstance):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::detachFromParent):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/qt/DocumentLoaderQt.cpp:
        * page/Chrome.cpp:
        (WebCore::Chrome::shouldInterruptJavaScript):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::markedTextRange):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::shouldDeleteSelection):
        (WebCore::Frame::isContentEditable):
        (WebCore::Frame::setSecureKeyboardEntry):
        (WebCore::Frame::isSecureKeyboardEntry):
        (WebCore::Frame::bindingRootObject):
        (WebCore::Frame::createRootObject):
        (WebCore::Frame::windowScriptNPObject):
        (WebCore::Frame::cleanupScriptObjects):
        (WebCore::FramePrivate::FramePrivate):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::tabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        (WebCore::EventHandler::keyboardUIMode):
        * page/mac/FrameMac.h: Removed.
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setBridge):
        (WebCore::Frame::bridge):
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::matchLabelsAgainstElement):
        (WebCore::Frame::focusWindow):
        (WebCore::Frame::unfocusWindow):
        (WebCore::Frame::imageFromRect):
        (WebCore::Frame::selectionImage):
        (WebCore::Frame::snapshotDragImage):
        (WebCore::Frame::fontAttributesForSelectionStart):
        (WebCore::Frame::baseWritingDirectionForSelectionStart):
        (WebCore::Frame::print):
        (WebCore::Frame::issuePasteCommand):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::textFieldDidBeginEditing):
        (WebCore::Frame::textFieldDidEndEditing):
        (WebCore::Frame::textDidChangeInTextField):
        (WebCore::Frame::textDidChangeInTextArea):
        (WebCore::Frame::doTextFieldCommandFromEvent):
        (WebCore::Frame::textWillBeDeletedInTextField):
        (WebCore::Frame::setSecureKeyboardEntry):
        (WebCore::Frame::isSecureKeyboardEntry):
        (WebCore::Frame::setMarkedTextRange):
        (WebCore::Frame::dashboardRegionsDictionary):
        (WebCore::Frame::dashboardRegionsChanged):
        (WebCore::Frame::willPopupMenu):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        (WebCore::Frame::setNeedsReapplyStyles):
        (WebCore::Frame::customHighlightLineRect):
        (WebCore::Frame::paintCustomHighlight):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::windowScriptObject):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (createRootObject):
        (bridge):
        (-[WebCoreFrameBridge _frame]):
        * page/qt/EventHandlerQt.cpp:
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::unfocusWindow):
        (WebCore::Frame::focusWindow):
        (WebCore::Frame::issueTransposeCommand):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::print):
        (WebCore::Frame::createScriptInstanceForWidget):
        (WebCore::Frame::cleanupPlatformScriptObjects):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        * page/qt/FrameQt.h: Removed.
        * platform/MimeTypeRegistry.h:
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::shouldInterruptJavaScript):
        (WebCore::SVGEmptyEditorClient::shouldChangeSelectedRange):
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        * platform/mac/FileChooserMac.mm:
        (-[OpenPanelController beginSheetWithFrame:]):
        * platform/mac/MimeTypeRegistryMac.mm:
        (WebCore::MimeTypeRegistry::getMIMETypeForPath):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setIsSelected):
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        * platform/qt/MimeTypeRegistryQt.cpp:
        (WebCore::MimeTypeRegistry::getMIMETypeForPath):
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ScrollViewCanvasQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paintCustomHighlight):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Oops, missed a 'const'

        * platform/qt/ClipboardQt.h:

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Adding stubbed out implementation of Clipboard for Qt to stop
        it crashing whenever someone drags the mouse.

        * WebCore.pro:
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/qt/ClipboardQt.cpp: Added.
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::dragLocation):
        (WebCore::ClipboardQt::dragImage):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::dragImageElement):
        (WebCore::ClipboardQt::setDragImageElement):
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h: Added.
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::isForDragging):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Don't even attempt to do a document based drag if there isn't a document
        Fixes rdar://problem/4960109

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):  
           Null check m_document
        (WebCore::DragController::tryDHTMLDrag):
           ASSERT(m_document) -- tryDocumentDrag is the only 
           thing that will ever call us, but lets play it safe

2007-02-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        A little preparation for <rdar://problem/5006872>.

        * platform/PopupMenu.h:

2007-02-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=12807
        XPath incorrectly converts NaN to boolean

        Test: fast/xpath/nan-to-boolean.html

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toBoolean): Convert NaN to false.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstringAfter::doEvaluate): Fix substring-after to actually work.

2007-02-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12123
          REGRESSION: Incomplete repaint of floats' overflows

        Tests: fast/repaint/float-overflow.html
               fast/repaint/float-overflow-right.html
               fast/repaint/table-cell-vertical-overflow.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=10116
          REGRESSION: Menu item drawn 2 pixels short on WWDC 2006 Attendee Site

        Reflected in existing test results.

        Unified floats and overflow for the purposes of painting and hit-testing.
        Overhanging and overflowing floats are now factored into a block's overflow
        unless their painting has been propagated to an ancestor.

        Changed table cells to no longer expand to enclose overflow, thus making
        it purely "visual overflow", having no effect on layout in WebCore. It
        still determines scrolling dimensions.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Include inline blocks'
        horizontal overflow in the inline box's dimensions.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Removed the expand to enclose overflows
        behavior. Added code to add this block's floats (and their overflow) to its
        overflow rect if it is not in a block formatting context. Otherwise, the
        inclusion of floats in the overflow is deferred until this block's parent
        examines its floats and possibly adopts overhanging floats.
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint): 
        (WebCore::RenderBlock::floatRect): Made non-virtual and changed to return an empty
        rect if there are no floats or the floats are clipped, instead of returning the border
        box.
        (WebCore::RenderBlock::addOverhangingFloats): Any floats of the child that
        are not to be painted by the parent are added to the child's overflow rect.
        (WebCore::RenderBlock::addVisualOverflow): Added. Adjusts the overflow
        bounds to include the given rect.
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): 
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): After placing a normal
        child, add its floats to its overflow, since painting of floats does not
        propagate to flexible boxes. 
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverhangingFloats):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderTable.h: Removed the override of overflowHeight() since now tables can have
        vertical overflow.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint): Made sure that overflow is repainted.
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverhangingFloats): Removed.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows): Factor in vertical overflow from cells.
        (WebCore::RenderTableSection::paint):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::overflowHeight):
        (WebCore::RenderTableSection::overflowTop):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Build fix for the build fix -- can't call something that isn't a function

        * platform/qt/CursorQt.cpp:
        (WebCore::notAllowedCursor):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Adding platform/DragImage.cpp and platform/qt/DragImageQt.cpp to the Qt
        project files

        Stubbed method for WebCore::notAllowedCursor -- not sure what it should return, 
        have returned blank cursor, possibly needs to return something else

        * WebCore.pro:
        * platform/qt/CursorQt.cpp:
        (WebCore::notAllowedCursor):

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Sigh, obnoxious occasional auto conversion from float to int

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::createDragImage):

2007-02-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=12799
        REGRESSION: Webpage doesn't load correctly (www.cincinnati.com
        redirects to the wrong URL)

        Test: http/tests/misc/refresh-meta-with-newline.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::skipWhiteSpace):
        (WebCore::parseHTTPRefresh):
        * platform/network/HTTPParsers.h:
        In HTML, all characters with codes <= 0x20 are whitespace, while in
        HTTP, only space and tab are such.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        Pass parseHTTPRefresh() a flag telling about the source of data.

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Buld fix -- surprisingly RetainPtr doesn't exist on Qt

        * platform/DragImage.h:

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        More drag and drop migration, now the entirety of the
        drag initiation logic has been rendered platform independent
        This has required a number of new interfaces, and a reasonable
        amount of logic migration.

        As a side effect, this patch also fixes rdar://problem/4945341

        There are some basic Qt stubs that should stop the build from failing,
        however the absence of ClipboardQt means any attempt to initiate a drag 
        may cause a crash.

        * WebCore.exp:
           Exporting new symbols

        * WebCore.xcodeproj/project.pbxproj:
           New files

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::canSaveAsWebArchive):
          Migrated from WebKit

        * dom/Clipboard.h:
          Added more methods to allow Clipboard to be used as a 
          platform independent container for drag and drop

        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteDragImage):
          This is a mac only helper function, so i've made it have an empty implementation,
          that way we won't need a PLATFORM(MAC) block in SVGImageEmptyClients

        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::tryDocumentDrag): 
        (WebCore::DragController::tryDHTMLDrag):
          Using RefPtrs now
        (WebCore::getCachedImage):
        (WebCore::getImage):
          Helper functions                   
        (WebCore::dragLocForDHTMLDrag):
        (WebCore::dragLocForSelectionDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
          Logic that generates drag images and clipboard content, and
          initiates the actual system drag operation

        * page/DragController.h:
          Method and variable declarations

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
          handleDrag is now platform independent
        (WebCore::EventHandler::handleTextInputEvent):
           formatting

        * page/EventHandler.h:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
          Forgot to define this stub function 

        * page/Frame.h:
          Declaring dragImageForSelection to provide drag image for selected content

        * page/mac/DragControllerMac.mm:
          Defining drag images control vars

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard):
          Migrated old clipboard creation to here

        * page/mac/FrameMac.mm:
        (WebCore::Frame::dragImageForSelection):
          Wrap FrameMac::selectionImage

        * page/qt/DragControllerQt.cpp:
          Defining drag images control vars

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
          stub

        * page/qt/FrameQt.cpp:
        (WebCore::Frame::dragImageForSelection):
          stub

        * platform/DragImage.cpp: Added.
        (WebCore::fitDragImageToMaxSize):
        (WebCore::createDragImageForSelection):
           Platform independent processing for drag images

        * platform/DragImage.h: Added.
           Declaring typedefs and wrapper functions to abstract the handling
           of drag images 

        * platform/Pasteboard.h:
          Declaring extracted writeURL and writeSelection methods

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::willPerformDragSourceAction):
        (WebCore::SVGEmptyDragClient::startDrag):
        (WebCore::SVGEmptyDragClient::createDragImageForLink):
          Stubs FTW!

        * platform/mac/ClipboardMac.h:
        (WebCore::ClipboardMac::pasteboard):
          Provide accessor for underlying NSPasteboard

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::hasData):
        (WebCore::ClipboardMac::writeRange):
        (WebCore::ClipboardMac::writeURL):
        (WebCore::ClipboardMac::declareAndWriteDragImage):
        (WebCore::ClipboardMac::createDragImage):
           Implemented new Clipboarid functionality.
        (WebCore::ClipboardMac::dragNSImage):
           Made this a const method

        * platform/mac/DragImageMac.mm: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
           Implemented platform specific DragImage functions

        * platform/mac/PasteboardMac.mm:
        (WebCore::writeSelection):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::writeURL):
        (WebCore::Pasteboard::writeURL):
           Extracted member implementations of these functions, so that
           Clipboard could also make use of this functionality.
           Pasteboard methods now call the new non-member implementations.
           Also fixed implementations to respect the list of requested types.

        * platform/qt/DragImageQt.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):  
          Stubs

2007-02-17  David Hyatt  <hyatt@apple.com>

        Fix textarea resizers to not fill with black by making sure the fill color starts off as
        transparent instead of black.

        Reviewed by aroben

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):

2007-02-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Adam.

        fix http://bugs.webkit.org/show_bug.cgi?id=11476
        <rdar://problem/4960247> REGRESSION: Nesting the IMG tag inside of a
        MAP fails to render correctly in ToT

        Test: fast/images/image-in-map.html

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::checkDTD):

2007-02-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12733
        XPath namespace is attached to a wrong step

        * xml/XPathGrammar.y: NAMETEST is different from other NodeTests in that its
        resulting type is an expanded name, rather than a string. It is not really possible 
        to store the namespace inside Parser, because it gets used in wrong steps then.

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::expandQName):
        * xml/XPathParser.h:
        Moved code that expands a QName from XPathGrammar.y. Removed m_currentNamespaceURI.

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::Step):
        * xml/XPathStep.h:
        Added a constructor that takes a namespace.

2007-02-17  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12479
          ASSERTION FAILURE: resource->inCache() in WebCore::Cache::remove

        Test: fast/loader/simultaneous-reloads-assert.html

        * loader/Cache.cpp:
        (WebCore::Cache::remove): Replaced the assertion with a check whether the
        resource is in the cache. The resource could have been removed from the cache
        as a result of a reload occurring simultaneously in a different document.

2007-02-12  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12711
        Prettier and more distinct cursors

        * Resources/crossHairCursor.png: Added.
        * Resources/northEastSouthWestResizeCursor.png:
        * Resources/northWestSouthEastResizeCursor.png:
        * Resources/notAllowedCursor.png: Added.
        * page/EventHandler.cpp: (WebCore::selectCursor):
        * platform/Cursor.h:
        * platform/mac/CursorMac.mm:
        (WebCore::crossCursor):
        (WebCore::notAllowedCursor):

2007-02-16  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12780
          REGRESSION (r19341-r19385): Reproducible crash in "onselectstart" event

        Test: fast/events/shadow-boundary-crossing.html

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): Changed to use the new
        eventParentNode() function for constructing the chain of ancestors for
        capture and bubbling.
        * dom/Node.h:
        (WebCore::Node::eventParentNode): Added. Returns the node's parent for the
        purpose of of event capture and bubbling. The base class implementation is
        to return the parent node.
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::eventParentNode): Added. Since in SVG events bubble
        to and can be captured across the shadow DOM boundary, returns the shadow parent
        for shadow nodes.

2007-02-17  Dave Hyatt <hyatt@apple.com>

        Change how textarea resizers paint to more closely match the way the main window resizer paints.
        
        Reviewed by olliej

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Fix crashes on ARM due to different struct packing. Based on a patch
        from Mike Emmel.

        * platform/DeprecatedString.cpp: compile-time assert to make sure sizeof(DeprecatedChar) == 2
        * platform/DeprecatedString.h: pack DeprecatedChar struct to ensure that
        sizeof(DeprecatedChar) == 2. Move _internalBuffer in DeprecatedStringData
        to the end, to avoid crashes on ARM due to different struct packing.

2007-02-16  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11534
        <rdar://problem/4946947> REGRESSION: Readonly text fields don't scroll when selecting content

        Test: fast/forms/input-readonly-autoscroll.html

        Implemented autoscroll methods for RenderTextControl, so this works on non-editable text controls.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::autoscroll):
        * rendering/RenderTextControl.h: (WebCore::RenderTextControl::shouldAutoscroll):

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Curl networking improvements inspired by Mike Emmel's patches in
        http://bugs.webkit.org/show_bug.cgi?id=11332.
        Fix FrameLoaderClientGdk due to changed FrameLoaderClient API.

        * loader/gdk/FrameLoaderClientGdk.cpp: Massage for changed API.
        (WebCore::FrameLoaderClientGdk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGdk::restoreViewState):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        * loader/gdk/FrameLoaderClientGdk.h: Ditto.
        * platform/network/ResourceHandleInternal.h: Remember url and custom headers
        for the request lifetime and free them at the end.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleCurl.cpp: Ditto.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/gdk/ResourceHandleManager.cpp: url improvements:
        - remove m_useSimple code-path since it wasn't used anywhere
        - don't use hashmap for keeping track of outstanding jobs - curl does it anyway
        - set custom headers from request
        - enable gzip and deflate through Accept-Encoding
        - setup curl to share cookies and DNS cache between requests
        - enable persisting of cookies in a file (if client provides file name
          for cookies via ResourceHandleManager::setCookieJarFileName())
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::setCookieJarFileName):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::removeFromCurl):
        (WebCore::ResourceHandleManager::setupPUT):
        (WebCore::ResourceHandleManager::setupPOST):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/gdk/ResourceHandleManager.h:

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Gdk fixes.

        * page/gdk/EventHandlerGdk.cpp: Comment out chatty message.
        (WebCore::EventHandler::handleDrag):
        * platform/gdk/EditorClientGdk.cpp: Enable entering text into text field.
        (WebCore::EditorClientGdk::shouldInsertText):

2007-02-16  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Move Path implementation from TemporaryLinkStubs.cpp to
        its own file.
        Implement setLineCap, setLineJoin and setMiterLimit for
        cairo's GraphicsContext.

        * WebCoreSources.bkl:
        * platform/gdk/TemporaryLinkStubs.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        * platform/graphics/cairo/PathCairo.cpp: Added.
        (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::Path::apply):

2007-02-16  Ada Chan  <adachan@apple.com>

        Reviewed by Adam and Maciej.

        Use a RefPtr to store the old hover node.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState):

2007-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/4990864> ASSERT in FormDelegate.m while dragging text between frames

        This symptom is specific to Safari, so no layout test.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply): Only call textWillBeDeletedInTextField if the
        text field is focused.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::aboutToUnload): Only call textFieldDidEndEditing if the text
        field is focused.
        (WebCore::HTMLInputElement::dispatchBlurEvent): Remove unneeded type cast.
        (WebCore::HTMLInputElement::defaultEventHandler): Only call doTextFieldCommandFromEvent if
        the text field is focused.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::subtreeHasChanged): Only call textDidChangeInTextArea,
        textFieldDidBeginEditing, and textDidChangeInTextField if the element is focused.

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4943985> 
        REGRESSION: Dragging standalone images to Finder fails to download the image file
        
        Set the data and response on the image resource. Also, since this is platform-independent we don't need to do it in 
        ImageDocumentMac.mm
        
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finish):
        * loader/mac/ImageDocumentMac.h:
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):

2007-02-16  David Harrison  <harrison@apple.com>

        Reviewed by Adam.

        <rdar://problem/5004746> Need mechanism to protect against WebKit calls from secondary threads (DOM APIs)

        * platform/mac/LoggingMac.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        Change the default to log the violations.

2007-02-16  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz.

        Fixed: http://bugs.webkit.org/show_bug.cgi?id=12768
        <rdar://problem/4995250> REGRESSION: Crash occurs at WebCore::RenderLayer::scrollToOffset() when leaving page that has focus in field

        No test case added.  This crash doesn't occur in DumpRenderTree because the B/F cache is turned off.

        * dom/Node.cpp: (WebCore::Node::willRemove): Check that the document is not in the page cache before 

        * dom/Element.cpp: (WebCore::Element::updateFocusAppearance): Added restorePreviousSelection argument, with appropriate default values.
        * dom/Element.h: ditto.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::updateFocusAppearance): ditto.
        * html/HTMLInputElement.h: ditto.
        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::updateFocusAppearance): ditto.
        * html/HTMLTextAreaElement.h: ditto.

        * page/PageState.cpp: (WebCore::PageState::restore): Call updateFocusAppearance on the focused node for this page.  Pass true for the
          restorePreviousSelection argument.

        * rendering/RenderLayer.cpp: Added ASSERTS and nil checks on the RenderView.  It shouldn't be null, but if it is, 
          we'll fail silently on release builds.
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::windowClipRect):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::absoluteBoundingBox):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4993055> auto_refcount_underflow_error: WebCore::FrameLoader::continueAfterNavigationPolicy () over-releases under GC

        Add ::adoptNS and ::adoptCF methods to RetainPtr to indicate what type of reference to adopt.
        
        * platform/cf/RetainPtr.h:
        (WebCore::):
        (WebCore::adoptNSReference):
        (WebCore::RetainPtr::RetainPtr):
        (WebCore::::adoptCF):
        (WebCore::::adoptNS):
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::FileChooser):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::operator NSError*):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):

2007-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Lost Objective-C Hippyness (or hippiness)

        Oh boy, did I ever botch this one up...

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem): Null check the FrameView

2007-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam's complaint

        Adam wanted me to do an early return, instead.

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

2007-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele

        Forgot to bring the null check with me when I backed this code out of 
        the FrameLoaderClient

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem): null check the HistoryItem

2007-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Save scroll state for back/forward navigation in FrameLoader, not the client

       * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem): Actually save the scroll position
         here instead of asking the FrameLoaderClient
        (WebCore::FrameLoader::restoreScrollPositionAndViewState): Ditto

        * loader/FrameLoaderClient.h: Renamed/repurposed 2 methods

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::restoreViewState): Ditto
        (WebCore::SVGEmptyFrameLoaderClient::saveViewStateToItem): Ditto

2007-02-15  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4989774>
        REGRESSION: Pasting a image into a plain text message can place image on a new line

        <span><img><span><img></span></span> will appear as two
        images on different lines because of a layout/rendering
        bug.  This patch avoids the bug by producing cleaner
        markup so that the paste code can safely remove the style 
        spans.

        * editing/markup.cpp:
        (WebCore::createMarkup): Get the default style from the
        editable root or body instead of the document element.
        This produces cleaner markup since we don't inline the 
        root's styles.

2007-02-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Add gdk version of ContextMenuClient based on qt version.

        * WebCoreSources.bkl:
        * page/gdk/ContextMenuClientGdk.cpp: Added.
        (WebCore::ContextMenuClientGdk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGdk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGdk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGdk::downloadURL):
        (WebCore::ContextMenuClientGdk::copyImageToClipboard):
        (WebCore::ContextMenuClientGdk::searchWithGoogle):
        (WebCore::ContextMenuClientGdk::lookUpInDictionary):
        (WebCore::ContextMenuClientGdk::speak):
        (WebCore::ContextMenuClientGdk::stopSpeaking):
        * page/gdk/ContextMenuClientGdk.h: Added.
        * webcore-base.bkl: curl is needed when building webcore_base files.

2007-02-15  Kevin Decker  <kdecker@apple.com>

       Reviewed by Darin.

       Fixed: <rdar://problem/4983883> Background of a .mov window should not be white

       * loader/PluginDocument.cpp: 
       (WebCore::PluginTokenizer::createDocumentStructure): Set a background color of gray
       for full frame plug-ins, which makes it easier on the eyes. It's also the same 
       gray that PDFKit uses, too.

2007-02-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12625
          REGRESSION: Crash when closing the web inspector with text selected

        The problem was that selectionRect() was being called on a render tree that
        had pending style changes. The changes were committed as a side effect in
        the middle of traversing the render tree, and the current object got
        deleted as a result. The solution is to update the render tree before
        starting to traverse it.

        The inspector was affected because it makes style changes in response to
        an AppKit notification that's sent right before the windowDidResignKey:
        notification, under which WebKit calls selectionRect(). I couldn't recreate
        the same conditions (having uncommitted style changes in the tree when the
        window becomes inactive) using HTML/JS in Safari, hence the lack of
        a regression test to go with this patch.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionRect): Added call to updateRendering().

2007-02-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10127
          REGRESSION: Crash undoing delete in textarea

        Document::removeMarkers() was using a Vector iterator (which is just a
        pointer) and inserting into the Vector at the same time, which made the
        iterator invalid as the Vector's data buffer was relocated.
        
        Replaced all instances of Vector<DocumentMarker>::iterator with indices.

        * dom/Document.cpp:
        (WebCore::Document::addMarker):
        (WebCore::Document::copyMarkers):
        (WebCore::Document::removeMarkers):
        (WebCore::Document::repaintMarkers):
        (WebCore::Document::shiftMarkers):

2007-02-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=12777
          REGRESSION (r18574): User profile pages display incorrectly at ebay.ca

        Fixes existing layout tests: tables/mozilla/bugs/bug45486.html
                                     tables/mozilla_expected_failures/core/col_span2.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveWidth): Fixed a mismatch between which
        columns count as percentage columns when adding up the total percent and
        which columns count as percentage columns when converting non-percentage
        columns to effectively-percentage.

2007-02-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig!

        - fix http://bugs.webkit.org/show_bug.cgi?id=12773
          REGRESSION (r19490): Crash on ipx-server.de

        * manual-tests/background-image-change-in-page-cache.html: Added.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged): Bail out if the object is not in a view,
        which can happen if the document is in the page cache and the same cached
        image used for its background is also being used in another document that
        is currently in view.

2007-02-14  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12517
        <rdar://problem/4971227> REGRESSION: Tab order incorrect when input
        inside frame/iframe gets initial focus (12517)

        Test: fast/events/frame-programmatic-focus.html

        * dom/Element.cpp:
        (WebCore::Element::focus): Call FocusController::setFocusedNode to set
        the focus for the whole page.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus): Ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::focus): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent): Send the textInput
        event to the same target that was sent the keypress event before it.
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus): Added a FIXME.
        (WebCore::FocusController::setFocusedNode): Added. Sets the focused
        node for a whole page.
        * page/FocusController.h: Added declaration.
        * platform/cf/RetainPtr.h: Removed unused pointer_cast functions.

2007-02-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <rdar://problem/4976800>
        Outdent combines 2 separate strings on 2 different lines

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph): Add line breaks
        if removing the indented node causes content before or after it to
        collapse into the same paragraph as its content.

2007-02-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <rdar://problem/4960120>
        REGRESSION: First Enter key ignored on initial focus of textarea after page load (11967)
        
        We'd insert a newline, but into an empty div.  We need two newlines
        in that case.

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::lineBreakExistsAtPosition): Returns true if there is a
        br or a '\n' in text that preserves newlines at the incoming position.
        (WebCore::InsertLineBreakCommand::doApply): Fixed to handle the empty
        block case, the anonymous block case.

2007-02-14  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - test or http://bugs.webkit.org/show_bug.cgi?id=12417
          <rdar://problem/4990046> REGRESSION: pressing "Return" in a <select>
          box does not submit the form (12697)

        Test: fast/forms/select-enter-key.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Add code to submit when someone hits the Enter key.

2007-02-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4960112>
        http://bugs.webkit.org/show_bug.cgi?id=12417
        REGRESSION: "Are you sure you want to send a form again?" sheet is displayed twice (validator.w3.org)
        
        The problem was that doing a reload would cause the "Cache-Control" HTTP header to be set on the request _after_ the first
        navigation policy delegate callback was called. This would break the request equality check that's used to prevent multiple policy
        delegate callbacks from getting called for the same request. The solution is to set the header as early as possible.
        
        This patch also fixes some bugs in the ResourceRequest equality operator.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        Set the "Cache-Control" header field on the request here.
        
        * platform/network/FormData.h:
        (WebCore::operator==):
        Short-circuit if the pointers are the same.
        
        * platform/network/ResourceRequest.cpp:
        (WebCore::operator==):
        Check the equality of the objects, not the pointers.

2007-02-14  David Hyatt  <hyatt@apple.com>

        Move setPlatformData out of FontFallbackListMac.mm and delete the file.  The function was completely
        cross-platform already.

        Reviewed by Ada

        * WebCore.xcodeproj/project.pbxproj:
        * platform/FontFallbackList.cpp:
        (WebCore::FontFallbackList::setPlatformFont):

2007-02-14  David Hyatt  <hyatt@apple.com>

        Make the Font constructor that takes a FontPlatformData cross-platform, since the implementation was already
        completely cross-platform.

        Reviewed by Ada

        * platform/Font.cpp:
        (WebCore::Font::Font):
        * platform/Font.h:
        * platform/mac/FontMac.mm:

2007-02-14  Antti Koivisto  <antti@apple.com>

        Reverting http://bugs.webkit.org/show_bug.cgi?id=11974, it causes repainting problems in some cases.

        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::avoidsFloats):

2007-02-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=11974
        REGRESSION: Caret drawn over input when smaller than font size on initial focus
        <rdar://problem/4960258>
        
        Set controlClip for non-search text controls.

        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::hasControlClip):

2007-02-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12726
          REGRESSION (r12073): Text wraps in the middle of a word instead of wrapping at the space before the word

        Test: fast/text/break-word.html

        The wrapW variable used to keep track of the width of the characters scanned
        so far by adding up the widths of individual characters. Because of the
        rounding hack, the total ended up being bigger than the width of the same characters
        when measured together as a single run.

        The fix is to use wrapW only as an upper bound, and once it overflows the line's width,
        fall back on measuring everything from the beginning of the line as one run.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Implemented the above fix, including not measuring
        additional single characters once wrapW overflows the line. Also moved the assignment
        to breakNBSP out of the loop since it is constant for the entire text object, made breakWords and
        midWordBreak update only when they might change, and cleaned up a few things.

2007-02-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11923
        REGRESSION: Placeholder text in password field shows as bullets
        <rdar://problem/4960257> 
        
        Disable textSecurity when placeholder is visible.
        
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updatePlaceholder):

2007-02-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=12763
        REGRESSION: button title is displayed incorrectly at quotes.burntelectrons.org

        Test: fast/parser/entities-in-attributes.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::getEntityHandler): Set a correct type for the found entity (I'm not really
        sure if XML_INTERNAL_GENERAL_ENTITY is _the_ correct one, but it fixes the problem).

2007-02-13  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed some bogus names (Hyatt smacked me since this doesn't fix a P1)

        * dom/EventNames.h: Removed half-implemented khtmlDragdrop and khtmlMove
        (you could add listeners, but nobody ever sent the events). Renamed the
        other two khtml-prefixed internal event names to use the webkit prefix.

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMEventTargetNode::getValueProperty): Removed ondragdrop and onmove.
        (KJS::DOMEventTargetNode::putValueProperty): Ditto.
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty): Ditto.
        (KJS::Window::put): Ditto.
        * bindings/js/kjs_window.h:

        * dom/BeforeTextInsertedEvent.cpp:
        (WebCore::BeforeTextInsertedEvent::BeforeTextInsertedEvent): Renamed to webkit.
        * editing/Editor.cpp:
        (WebCore::dispatchEditableContentChangedEvents): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Ditto.
        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLTextFieldInnerTextElement::defaultEventHandler): Ditto.

2007-02-13  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        * dom/EventNames.h: Resort names. Removed unused names.

2007-02-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/4990049> 
        http://bugs.webkit.org/show_bug.cgi?id=12718
        REGRESSION: Segmentation fault when loading abc.go.com (12718)

        The problem is that redirecting to about:blank causes the delegate to be released even though the load wasn't finished.
        This is usally not a problem since NSURLConnection retains its delegate. However, the proxy delegate does not retain _it's_ 
        delegate. The solution is to make releaseDelegate clear out the proxy delegate's delegate.
        
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::releaseDelegate):
        If there's a proxy, nil out its delegate too.

2007-02-13  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=12750
          Vector operator== was not defined correctly. It returned void,
          did not accept const Vectors, and used an int instead of size_t. 

        * rendering/RenderStyle.h: Added a != operator for StyleDashboardRegion.
        The only reason this compiled before was that the comparing two vectors
        with a != was simply comparing the pointers.

2007-02-13  Darin Adler  <darin@apple.com>

        - roll out fix for <rdar://problem/4874059> REGRESSION: Painter IX:register -
          Crash in WebCore:: ResourceLoader::willSendRequest()

        This fix was causing a crash in at least one layout test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2007-02-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12746
        REGRESSION (r13853): List item's first line overflows containing div

        Test: fast/lists/item-not-in-list-line-wrapping.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Use the list marker's isInside()
        instead of looking at its style()->listStylePosition(), since if the
        list item is not in a list, the marker is inside regardless of the style.

2007-02-13  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12578
        WebKit incorrectly strokes zero-width/height rectangles

        Create an empty path when encountering zero-width/height rectangles, similar to circles with zero radius.

        * platform/graphics/Path.cpp:
        (WebCore::Path::createRectangle):

2007-02-13  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        Remove SVGDOMImplementation from the project.

        * CMakeLists.txt:
        * WebCore.pro:
        * ksvg2/svg/SVGDOMImplementation.cpp: Removed.
        * ksvg2/svg/SVGDOMImplementation.h: Removed.

2007-02-13  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej and Adam

        Fixes <rdar://problem/4985497> - Crash when opening a new window to "Same Page"

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Null check documentLoader() since if we're a brand new 
          WebView, cloning the history of another view, we have no documentLoader()

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        -fix REGRESSION: <select disabled size="5"> listbox cannot be scrolled
        http://bugs.webkit.org/show_bug.cgi?id=11852
        <rdar://problem/4960129>
        
        Pass mouse press events to scrollbars even if event is swallowed.
        
        No layout test, DumpRenderTree eventSender can't hit scrollbars.

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

2007-02-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 12149 (Radar Bug#4928692), external CSS causes incomplete
        text field focus.

        Make sure to clear out the focus node in willRemove() rather than in
        detach(), since detach/attach caused by style recalc should not affect
        the focused node.

        Reviewed by aroben

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemove):
        * dom/Document.cpp:
        (WebCore::Document::focusedNodeRemoved):
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * dom/Node.cpp:
        (WebCore::Node::willRemove):
        (WebCore::Node::detach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance):

2007-02-12  Kevin McCullough  <kmccullough@apple.com>

        - reverting fix for rdar://problem/4922454 because it caused regressions
          and performance problems

        * bindings/objc/DOM.mm:
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::remove):
        * loader/CachedImage.h:
        (WebCore::CachedImage::canRender):
        (WebCore::CachedImage::isErrorImage):
        * loader/CachedResource.h:
        * loader/CachedScript.h:
        (WebCore::CachedScript::errorOccurred):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setLoadInProgress):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canLoad):
        * page/EventHandler.cpp:
        (WebCore::selectCursor):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::isErrorImage):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::setStyle):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::isImage):

2007-02-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12123
          REGRESSION: Incomplete repaint of floats' overflows

        Tests: fast/repaint/float-overflow.html
               fast/repaint/float-overflow-right.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=10116
          REGRESSION: Menu item drawn 2 pixels short on WWDC 2006 Attendee Site

        Reflected in existing test results.

        Unified floats and overflow for the purposes of painting and hit-testing.
        Overhanging and overflowing floats are now factored into a block's overflow
        unless their painting has been propagated to an ancestor.

        Changed table cells to no longer expand to enclose overflow, thus making
        it purely "visual overflow", having no effect on layout in WebCore. It
        still determines scrolling dimensions.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Include inline blocks'
        horizontal overflow in the inline box's dimensions.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Removed the expand to enclose overflows
        behavior. Added code to add this block's floats (and their overflow) to its
        overflow rect if it is not in a block formatting context. Otherwise, the
        inclusion of floats in the overflow is deferred until this block's parent
        examines its floats and possibly adopts overhanging floats.
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint): 
        (WebCore::RenderBlock::floatRect): Changed to return an empty rect if there
        are no floats or the floats are clipped, instead of returning the border box.
        (WebCore::RenderBlock::addOverhangingFloats): Any floats of the child that
        are not to be painted by the parent are added to the child's overflow rect.
        (WebCore::RenderBlock::addVisualOverflow): Added. Adjusts the overflow
        bounds to include the given rect.
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): 
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): After placing a normal
        child, add its floats to its overflow, since painting of floats does not
        propagate to flexible boxes. 
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverhangingFloats):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverhangingFloats):

2007-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12668
          <rdar://problem/4893344> REGRESSION: underline not visible for the international
          input inline hole in most text fields (12668)

        - fix bug where overline and line-through were 1px lower than we intended

        * platform/graphics/GraphicsContext.h: Removed unneeded y offset parameter.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Removed bogus y offset and +1.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations): Added the "+1" that used to be
        inside drawLineForText to the underline-drawing code. Changed the other callers
        of drawLineForText to include the y offset in the y coordinate.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration): Ditto. Also renamed _tx and _ty to
        remove the gratuitious underscores.
        (WebCore::InlineTextBox::paintMarkedTextUnderline): Made the default thickness
        be 1px instead of 0 (which ends up being roughly 1px in the CG code path anyway).
        Fixed the code computing the position to put the underline at the bottom of the
        line (different from regular underlines which are put 1px under the baseline).
        The old code used to put the underline 1px further down in the thick case, and
        2px further down in the non-thick case. Both of those are bad, because they
        could be completely clipped out in many cases.

2007-02-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4846962>
        Aperture: Aperture 1.5 - DOM exception occurs when exporting a web gallery

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild):
        Call checkReplaceChild here.
        
        * dom/Document.cpp:
        (WebCore::Document::canReplaceChild):
        * dom/Document.h:
        Add implementation of canReplaceChild that makes sure that doing the replacement won't cause
        more than one element and document type node to end up in the document.
        
        * dom/Node.cpp:
        (WebCore::Node::canReplaceChild):
        Base implementation of canReplaceChild.
        
        (WebCore::Node::checkReplaceChild):
        New function that does what checAddChild does but calls canReplaceChild.
        
2007-02-12  Kevin Decker <kdecker@apple.com>

        Reviewed by Anders.

        Fixed: <rdar://problem/4874059> REGRESSION: Painter IX:register - Crash in WebCore:: ResourceLoader::willSendRequest()
        
        What happened here was that a WebDataSource was being dealloced *while* a load for that resource is still in progress. 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders): Calling stopAllLoaders cancels loads and informs the frame load delegate accordingly.
        The delegate however may decide to kick off a new provisional load as the result of the cancel. Therefore a local variable 
        for the provisional and main doucment loader is introduced, and we now only nil out the provisional loader if the local and
        member provisional variables represent the exact same load.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Added the same check here, too.

2007-02-12  Lars Knoll  <lars@trolltech.com>

        Reviewed by Mitz.

        Do not create child renderers for table column groups
        if the child has not a table column display type.

        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isChildAllowed):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::isChildAllowed):
        * rendering/RenderTableCol.h:

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Mitz

        Fix assertion failure in layout test.

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):

2007-02-12  Kevin McCulough  <kmccullough@apple.com>

        Reviewed by Brady.

        - Fixing a performance regression caused by r19500.  The heart of the matter
        is that we now call canLoad on every resource request even ones in the cache,
        to avoid a security issue. So I could not take out the canLoad call, but I
        but I could try to make it more efficient.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setLoadInProgress):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canLoad):

2007-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12677
          <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm
          a clause in kotoeri (12677)

        - fix http://bugs.webkit.org/show_bug.cgi?id=12596
          <rdar://problem/4794346> REGRESSION: Tab key shifts form field focus instead of
          navigating prediction window (12596)

        - fix http://bugs.webkit.org/show_bug.cgi?id=10010
          <rdar://problem/4822935> REGRESSION: Pressing Return with unconfirmed text in
          Hangul inserts carriage return (10010)

        - fix http://bugs.webkit.org/show_bug.cgi?id=12531
          <rdar://problem/4975126> REGRESSION: Inline text input types repeated keys in
          latest nightly (r19336) (12531)

        - fix http://bugs.webkit.org/show_bug.cgi?id=12539
          <rdar://problem/4975130> REGRESSION: Pressing Backspace while in inline input
          area moves to the previous page in history (12539)

        This area still needs work because keypress events are being sent for all the
        events before they go to the input methods, and it seems that this is not
        compatible with what other browsers do and with what sites assume. That's covered
        by this bug:

            http://bugs.webkit.org/show_bug.cgi?id=10871
            <rdar://problem/4823129> REGRESSION: IME key events different in nightly (10871)

        which is still open.

        * bindings/objc/ExceptionHandlers.h: Remove selectRange helper that doesn't really
        belong here, and also isn't needed since the callers don't want to raise ObjC
        exceptions.
        * bindings/objc/ExceptionHandlers.mm: Ditto. Also removed unneeded external globals
        that aren't exported anyway and unneeded includes.

        * bridge/EditorClient.h: Added Mac-specific function, markedTextAbandoned. Long term
        this might move into platform instead, but it's fine to have it on the client for now
        as long as it doesn't cause trouble for platforms other than Mac.

        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler): Since
        all the event handling code in this function is intended to run on the node itself,
        not parent nodes, check and do nothing if this event is bubbling up from another
        node. Added code to call a function on EventHandler for default handling of text
        input events.

        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.cpp: (WebCore::findKeyboardEvent): Added. Just like the
        findUIEventWithKeyState function, but specific to keyboard events.

        * dom/TextEvent.h: Added isLineBreak and isBackTab flags so that we can carry
        additional information about what a text input event is trying to do, but still
        go through the DOM event machinery.
        * dom/TextEvent.cpp: Ditto.

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyPress): Removed unneeded check of isCaretOrRange, since
        isContentEditable already checks that.
        (WebCore::Editor::canEdit): Ditto.
        (WebCore::Editor::canEditRichly): Ditto.
        (WebCore::Editor::canPaste): Changed to call canEdit for brevity.
        (WebCore::Editor::replaceSelectionWithText): Changed to take a const String&.
        (WebCore::Editor::shouldInsertText): Ditto.
        (WebCore::hasEditableSelection): Removed unneeded check of isCaretOrRange, since
        isContentEditable already checks that.
        (WebCore::Editor::Editor): Initialize the new m_ignoreMarkedTextSelectionChange
        flag. Moved here from WebHTMLView.
        (WebCore::Editor::insertText): Moved most of the code from -[WebHTMLView insertText:]
        here, since this needs to be done in response to a text input event and we don't want
        to go back over the WebKit side for that.
        (WebCore::Editor::insertLineBreak): Added. Moved here from -[WebHTMLView insertLineBreak:]
        for the same reason -- needs to be done in response to text input events.
        (WebCore::Editor::insertParagraphSeparator): Ditto.
        (WebCore::Editor::selectMarkedText): Added. Used by insertText.
        (WebCore::Editor::discardMarkedText): Added. Used by insertText.
        (WebCore::Editor::unmarkText): Added. Used by insertText.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::unmarkText): Added. Used by insertText.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::canHaveSelection): Changed to use isTextField to avoid repeating
        the switch statement.
        (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::createRenderer): Resorted cases alphaebtically.
        (WebCore::HTMLInputElement::defaultEventHandler): Added code to make hitting return cause the
        form to be submitted when it comes through as a text input event. This is now the normal case
        on Macintosh, because enter key presses normally turn into this. In addition, change the other
        event handling to run only after trying the base defaultEventHandler. That makes the key
        handling done in EventTargetNode take precedence over the event handling here for editable text
        fields, which is what we want. This gets rid of the need for the hack where we check
        inputManagerHasMarkedText and suppress the handling of the enter key.

        * page/EventHandler.h: Removed unneeded includes. Moved EventHandlerDragState down into the
        private part of the class. Changed sendContextMenuEvent to take a const&. Added new
        handleTextInputEvent and defaultTextInputEventHandler functions. Made eventLoopHandleMouseUp
        and eventLoopHandleMouseDragged private. Added private defaultTabEventHandler function.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Changed parameter to be a const&.
        (WebCore::EventHandler::defaultKeyboardEventHandler): Rearranged things so that the key bindings
        handling in handleKeyPress comes before special tab event handling. In cases where the tab turns
        into text to insert, we now handle it in the text input event handler.
        (WebCore::EventHandler::handleTextInputEvent): Added. Creates and dispatches a text input event.
        (WebCore::EventHandler::defaultTextInputEventHandler): Added. Inserts text, but has special cases
        for the tab and newline character cases.
        (WebCore::EventHandler::defaultTabEventHandler): Added. Shared by the tab-handling code in
        the keyboard event and text input event handlers.
        * page/mac/EventHandlerMac.mm: Tweak formatting, remove some unused functions.

        * page/FocusController.h: Removed unnneded includes and forwards, and added an overload of
        advanceFocus that takes a FocusDirection parameter.
        * page/FocusController.cpp: (WebCore::FocusController::advanceFocus): Changed to allow a 0 for
        the event pointer. Also added a version where the direction is passed explicitly, to be used
        for cases where we want to tab backward even if the event doesn't have a shift modifier key set.

        * platform/graphics/svg/SVGImageEmptyClients.h: Updated for change to EditorClient.
        This should really probably just use 0 for the EditorClient.

        * WebCore.exp: Update both for newly used and no-longer-used entry points.

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm: Removed two unused methods.

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.

        - fixed Imagemap not clickable in www.toptenbooks.net/
        http://bugs.webkit.org/show_bug.cgi?id=12738
        
        Make imagemap names case insensitive in HTML mode

        * dom/Document.cpp:
        (WebCore::Document::getImageMap):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):

2007-02-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti.

        - fixed <rdar://problem/4928675> REGRESSION: Crash in CGBlt_copyBytes under WebCore::Font::drawGlyphs (12083)
        http://bugs.webkit.org/show_bug.cgi?id=12083
        
        Test: fast/text/text-shadow-extreme-value.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setShadow): Clamp shadow value to 1000px, anything more seems to 
        make CG unhappy.

2007-02-11  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej.

        First in what will be a series of HistoryItem enhancements to help debugging

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::showTree):
        (WebCore::HistoryItem::showTreeWithIndent):
        (showTree): Outside of WebCore namespace, and extern "C" - to make even the 
          DWARF debugger able to find it...  *sigh* 
        * history/HistoryItem.h:

2007-02-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Anders.

        - fixed <rdar://problem/4975133> ASSERT failure and crash right-clicking on image in SVG use test
        http://bugs.webkit.org/show_bug.cgi?id=12580
        
        Test: svg/cust/use-events-crash.svg

        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::toNode):
        * ksvg2/svg/SVGElementInstance.h:

2007-02-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10144
          REGRESSION: Reproducible assertion failure in DeleteSelectionCommand::fixupWhitespace()

        Test: fast/text/delete-hard-break-character.html

        The bug was caused by not updating a line whose line break object and offset
        has been deleted. When deleting text, all lines containing the deleted text
        are marked dirty. However, if the first character being deleted is a newline
        which serves as a hard line break for the previous line, then that line will
        not be marked, and since it will be a clean line ending with a line break,
        relayout will begin at the next line. The fix is to check for this when
        determining where to relayout from. 

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition): Changed the condition for
        including the last clean line in relayout to include the case where the
        last clean line ends with a line break, but that line break is a newline that
        has been deleted.

2007-02-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        REGRESSION: Google Calendar cell highlight misplaced
        http://bugs.webkit.org/show_bug.cgi?id=12687
        
        Make offsetLeft/offsetTop/offsetParent behavior match Firefox.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetLeft):
        (WebCore::RenderObject::offsetTop):
        (WebCore::RenderObject::offsetParent):

2007-02-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.

        - fixed REGRESSION: No day/week scrollbar in Google Calendar
        http://bugs.webkit.org/show_bug.cgi?id=11985

        Make sure overflow:auto scrollbars are always enabled. If they were overflow:scroll
        and dynamically changed to auto they might still be disabled.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2007-02-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=12581
        XPath //title shouldn't match <title> in XHTML

        Test: fast/xpath/ensure-null-namespace.xhtml

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Only let a null namespace match any for HTML.

2007-02-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=12701
        REGRESSION: After javascript, onChange not triggered when selecting same option

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex): Remember m_lastOnChangeIndex value,
        as it can change from setSelected() now.
        (WebCore::HTMLSelectElement::notifyOptionSelected): Update m_lastOnChangeIndex.

        * manual-tests/select-onchange-after-js.html: Added. Also tests for bug 11402.

2007-02-10  David Carson  <dacarson@gmail.com>`

        Reviewed by Maciej.

        Manual tests for http://bugs.webkit.org/show_bug.cgi?id=12636
        Call different Java methods that take a variety of Array parameters
        from Javascript, passing a Javascript array.

        * manual-tests/liveconnect-applet-array-parameters.html: Added.
        * manual-tests/resources/ArrayParameterTestApplet.class: Added.
        * manual-tests/resources/ArrayParameterTestApplet.java: Added.

2007-02-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12724
        Crash when enumerating XPath namespace axis

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Namespace axis enumeration was broken in that it crashed, and also in that
        it returned attribute nodes instead of XPath namespace ones. Removed it altogether.

2007-02-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12565
          ASSERTION failure on some declarative animations <rdar://problem/4975132>

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::parseValues): Changed the string length math to avoid truncating
        the last character of each value.
        * manual-tests/svg-animation-parseValues.svg: Added.

2007-02-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11621
          REGRESSION (Native slider): slider thumb not updated when the mouse is dragged/released out of range

        No automated test case because dumping the render tree updates layer positions anyway.

        * manual-tests/slider-thumb-tracking.html: Added.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::setCurrentPosition): Added call to updateLayerPosition()
        for the thumb's layer.

2007-02-09  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        <rdar://problem/4965133> WebKit sends file:// url referrers

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): In SubresourceLoader::create(), we make a copy of the original request
        to use for the load.  We then call FrameLoader::canLoad() which tells us if we should hide the referer.  Before 
        this fix if it said to hide the referrer, we would simply not apply a new referrer to our copy of the request.
        But if the original request already had a referrer, so did our copy.  We simply have to clear the referrer from
        the copied request.

2007-02-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by me, patch from Feng Qian (cleaned up by me some).

        - fixed <rdar://problem/4988091> objects attached to Window not cleared (memory leak)
        
        Test case: fast/dom/Window/window-appendages-cleared.html

        * bindings/js/kjs_window.cpp:
        (KJS::Window::clearHelperObjectProperties):
        (KJS::Window::clear):
        * bindings/js/kjs_window.h:

2007-02-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        <rdar://problem/4985497> - Plugs a potential null DocumentLoader deref when 
        transitioning out of the Bookmarks View

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::recursiveGoToItem): add a null check

2007-02-09  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by John . . . and Adam.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Missing 
        break.

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin

        <rdar://problem/4975120>
        REGRESSION: double-cursor after switching window away/back (11770)
        <http://bugs.webkit.org/show_bug.cgi?id=11328>
        Gmail Editor: Caret can simultaneously appear in both the TO: and message body fields

        * page/mac/WebCoreFrameBridge.h: Removed two unused methods
        left over from the old form control implementation.

2007-02-09  John Sullivan  <sullivan@apple.com>

        * rendering/bidi.cpp:
        (WebCore::bidiNext):
        At Darin's suggestion, moved the "next = 0" line from my previous patch to the start of the loop body

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4960116>
        REGRESSION: Nightly Safari crashes in WebCore::SelectionController::xPosForVerticalArrowNavigation (12416)

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        Null check.  VisiblePosition creation can fail if a node that 
        contains the selection was made invisible after the selection 
        was made and before this function is called during a selection 
        modification operation.

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4983858>
        REGRESSION: In a new mail message, attempting to select a single word causes the selection to extend to the previous line

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::exitNode):
        We recently split shouldEmitNewlineForNode into
        shouldEmitNewline{Before, After}Node, so this function now
        needs an implementation that is different from
        SimplifiedBackwardsTextIterator::handleNonTextNode.  The
        difference is that we must call shouldEmit*BeforeNode
        instead of shouldEmit*AfterNode since we are a) exiting
        nodes and b) moving backward.

2007-02-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4916541>
        Some of the selection isn't preserved during an Indent opreration

        * editing/IndentOutdentCommand.cpp:
        (WebCore::indexForVisiblePosition): Added.
        (WebCore::IndentOutdentCommand::indentRegion): Use rangeLength
        and rangeFromLocationAndLength to restore the selection after
        the repeated moveParagraph calls necessary to perform indent are
        finished.

2007-02-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker
        
        - fixed <rdar://problem/4960095> REPRODUCIBLE HANG: WebKit freezes when printing as PDF
          a certain kind of code (12449)
 
        No test case because I don't know how to make the bug occur without printing.

        * rendering/bidi.cpp:
        (WebCore::bidiNext):
        reset loop's "next" variable after using it; we were setting "current" to the same value
        of "next" each subsequent time through the loop, which is not helpful.

2007-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - Add TextEvent to the DOM (based on the proposed DOM level 3)
          to be used to fix some international input bugs soon.
          At this point, we don't send any text events.

        - Remove some obsolete files.

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add new files, remove obsolete files.

        * DerivedSources.make: Add TextEvent to the Objective-C and JavaScript bindings lists.
        * WebCore.exp: Export DOMTextEvent Objective-C wrapper.

        * bindings/js/kjs_events.cpp: (KJS::toJS): Added TextEvent to the list of Event subclasses
        so we make the right kind of JS wrapper.
        * bindings/objc/DOMEvents.mm: (+[DOMEvent _eventWith:]): Same thing, for Objective-C.

        * bindings/objc/DOMInternal.h: Added DOMTextEventInternal.h.

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::hasFeature):
        Added "TextEvents", "3.0" to the list of things we'll answer true for
        (as specified in the DOM Level 3 documentation).
        This isn't so great until we actually send textInput events, but that's coming soon.

        * dom/Document.cpp: (WebCore::Document::createEvent): Add "TextEvent" as a way to make
        a TextEvent (as specified in the DOM Level 3 documentation).

        * dom/Event.h:
        * dom/Event.cpp: (WebCore::Event::isTextEvent): Added virtual function to be used
        for runtime type checking of Event objects (as for other event types).

        * dom/TextEvent.cpp: Added.
        * dom/TextEvent.h: Added.
        * dom/TextEvent.idl: Added.

        * platform/mac/WebCoreWidgetHolder.h: Removed.
        * rendering/CounterListItem.h: Removed.
        * rendering/CounterResetNode.cpp: Removed.
        * rendering/CounterResetNode.h: Removed.

2007-02-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4816376> 
        REGRESSION: NetNewsWire 3.0 - Crashes in WebDocumentLoaderMac::attachToFrame() (12674)
        
        The bug was that the NNW policy delegate never calls back on the policy listener so we'll try to do a load
        while there's a policy decision underway. The extra call to setPolicyDocumentLoader would cause a detached (and deallocated)
        WebDataSource to be reattached and thus causing a crash.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        Remove extra call to setPolicyDocumentLoader.

2007-02-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4674537> REGRESSION: Adobe Acrobat 8 - Text 
        blinks when mouse is moved, and is invisible otherwise

        Acrobat 8 was relying on a WebKit bug that was fixed about a year 
        ago with r12753. The bug was that we would not reload a page if the 
        source of an iframe was set to the same value it already was. Now 
        that we have fixed the bug, Acrobat constantly reloads their EULA, 
        making it blinky and impossible to read. 

        No layout test since the fix is to add an Acrobat-specific quirk.

        * WebCore.exp:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setLocation): If the new url is the 
        same as the old one and we are honoring the Acrobat quirk, don't do 
        anything.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setNeedsAcrobatFrameReloadingQuirk):
        * page/Settings.h:
        (WebCore::Settings::needsAcrobatFrameReloadingQuirk):

2007-02-09  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Dave Harrison

        Disable the thread-check assertion in WebCore, as well as Webkit

        * WebCore.xcodeproj/project.pbxproj:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        No need to pause timeout checks anymore.
        
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):

2007-02-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth
        
        - WebCore part of fix for radar 4939636, problems with context menu items and binaries linked
          against WebKit 2.0.

        * platform/ContextMenuItem.h:
        (WebCore::):
        Tweaked comment; bumped enum value for new SPI tags to avoid conflict with pre-3.0 SPI tag values.

2007-02-09  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by Dave Hyatt.

        Removed broken recognition of :last-* and :only-* selectors

        * css/CSSGrammar.y:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):

2007-02-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        <rdar://problem/4980176>

        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed): Since this frame is getting
        disconnected from its page, ensure it is not the focus node.

2007-02-09  Krzysztof  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        gdklauncher crashes when compiled with NDEBUG defined.

        * Projects/gdk/webcore-gdk.bkl:

2007-02-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        <rdar://problem/4971224> REGRESSION: ASSERT in WebCore with Mail (12491)
        http://bugs.webkit.org/show_bug.cgi?id=12491

        No test case. Not testable since there is no way to do substitute
        data loads from layout tests.
        
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy): Don't dispatch data load
        callback when loading empty data.

2007-02-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12705
        REGRESSION: Crash with user stylesheet set

        Allow the Frame::canLoad check to skipped so that user stylesheets can be loaded in remote documents.

        * ChangeLog:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestCSSStyleSheet): Skip canLoad check if this is a user stylesheet.
        (WebCore::DocLoader::requestUserCSSStyleSheet):
        (WebCore::DocLoader::requestResource): Allow canLoad check to be skipped.
        * loader/DocLoader.h:
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Darin.

        Linux/gdk build fixes.

        * Projects/gdk/webcore-gdk.bkl: Account for file renaming.
        * platform/gdk/KeyEventGdk.cpp: Make gdk's tab key recognized as tab so that
        keyboard link walking works on gdk.
        (WebCore::keyIdentifierForGdkKeyCode):

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12599
        <rdar://problem/4973507> REGRESSION: When replying in Gmail, the caret disappears when you start to type (12599)

        When a frame's window was focused, the page didn't get updated about the new frame getting focus.
        This was causing handleKeyPress to fail because it kept getting a selection for the wrong frame (which wasn't editable).

        Test: fast/frames/iframe-window-focus.html

        * page/Frame.cpp:
        (WebCore::Frame::focusWindow):
        (WebCore::Frame::unfocusWindow):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::focusWindow):
        (WebCore::FrameMac::unfocusWindow):

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12480
        <rdar://problem/4971222> REGRESSION (NativeListBox): Deselecting option causes list to jump to top

        Test: fast/forms/listbox-deselect-scroll.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::activeSelectionStartListIndex): Added.  Returns the index for the active selection.  If there is no active selection,
         it returns the first selected index.
        (WebCore::HTMLSelectElement::activeSelectionEndListIndex): Added.  If there is no active selection, it returns the last selected index.
        * html/HTMLSelectElement.h:
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::scrollToRevealSelection): Instead of using the first and last selected indices,
          use the active selection indices to determine which item to reveal.  This way, when you're selecting with the keyboard, or the mouse,
          no unnecessary scrolling will occur if the end of your active selection is already visible.

2007-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4963411> Items of SELECT element are incorrectly highlighted when display:block is set

        Test: fast/forms/select-block-background.html

        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintObject):
          Paint the item backgrounds during the PaintPhaseChildBlockBackground or PaintPhaseChildBlockBackgrounds phase.

2007-02-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11047
          REGRESSION: Empty options cause the entire select to collapse
        
        Test: fast/forms/select-empty-option-height.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=10783
          REGRESSION (r16044): Clicking a popup changes layout around it

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setText): If the option text is empty, use a RenderBR
        as inner text, to ensure that the inner div has line height.

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Added a hard counter for SubresourceLoaders because the leaks tool now
        ignores them.
        
        * loader/SubresourceLoader.cpp:
        (WebCore::):
        (WebCore::SubresourceLoaderCounter::~SubresourceLoaderCounter):
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::~SubresourceLoader):
        * page/Frame.cpp: Removed unnecessary #define

2007-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4982374> CSSComputedStyleDeclaration::getPropertyCSSValue 
        leak reported by buildbot
        
        The leak was a typo: "new" instead of "return new". I also generously
        deployed RefPtr in places that were holding ref-counted objects in
        bare pointers.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * platform/gdk/EditorClientGdk.cpp: Added. Based on qt version.
        (WebCore::EditorClientGdk::shouldDeleteRange):
        (WebCore::EditorClientGdk::shouldShowDeleteInterface):
        (WebCore::EditorClientGdk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGdk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGdk::spellCheckerDocumentTag):
        (WebCore::EditorClientGdk::shouldBeginEditing):
        (WebCore::EditorClientGdk::shouldEndEditing):
        (WebCore::EditorClientGdk::shouldInsertText):
        (WebCore::EditorClientGdk::shouldApplyStyle):
        (WebCore::EditorClientGdk::didBeginEditing):
        (WebCore::EditorClientGdk::respondToChangedContents):
        (WebCore::EditorClientGdk::didEndEditing):
        (WebCore::EditorClientGdk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGdk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGdk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGdk::isEditable):
        (WebCore::EditorClientGdk::registerCommandForUndo):
        (WebCore::EditorClientGdk::registerCommandForRedo):
        (WebCore::EditorClientGdk::clearUndoRedoOperations):
        (WebCore::EditorClientGdk::canUndo):
        (WebCore::EditorClientGdk::canRedo):
        (WebCore::EditorClientGdk::undo):
        (WebCore::EditorClientGdk::redo):
        (WebCore::EditorClientGdk::shouldInsertNode):
        (WebCore::EditorClientGdk::pageDestroyed):
        (WebCore::EditorClientGdk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGdk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGdk::toggleGrammarChecking):
        (WebCore::EditorClientGdk::handleKeyPress):
        (WebCore::EditorClientGdk::EditorClientGdk):
        (WebCore::EditorClientGdk::setPage):
        * platform/gdk/EditorClientGdk.h: Added. Ditto.
        * platform/gdk/FrameGdk.cpp: Add exitAfterLoading and dumpRenderTreeAfterLoading
        as small debugging features. Remove FrameGdkClient as no other platform has Frame*Client
        anymore. Adjust for new APIs.
        (WebCore::FrameGdk::FrameGdk):
        (WebCore::FrameGdk::onDidFinishLoad):
        (WebCore::FrameGdk::dumpRenderTree):
        (WebCore::FrameGdk::keyPress):
        (WebCore::FrameGdk::handleGdkEvent):
        (WebCore::FrameGdk::focusWindow):
        (WebCore::FrameGdk::unfocusWindow):
        (WebCore::FrameGdk::getObjectInstanceForWidget):
        (WebCore::FrameGdk::getEmbedInstanceForWidget):
        (WebCore::FrameGdk::bindingRootObject):
        (WebCore::FrameGdk::print):
        (WebCore::FrameGdk::getAppletInstanceForWidget):
        (WebCore::FrameGdk::issueCutCommand):
        (WebCore::FrameGdk::issueCopyCommand):
        (WebCore::FrameGdk::issuePasteCommand):
        (WebCore::FrameGdk::issueTransposeCommand):
        (WebCore::FrameGdk::issuePasteAndMatchStyleCommand):
        (WebCore::FrameGdk::markedTextRange):
        (WebCore::FrameGdk::shouldChangeSelection):
        (WebCore::FrameGdk::respondToChangedSelection):
        (WebCore::FrameGdk::mimeTypeForFileName):
        * platform/gdk/FrameGdk.h: Ditto.
        (WebCore::FrameGdk::setExitAfterLoading):
        (WebCore::FrameGdk::exitAfterLoading):
        (WebCore::FrameGdk::setDumpRenderTreeAfterLoading):
        (WebCore::FrameGdk::dumpRenderTreeAfterLoading):
        (WebCore::GdkFrame):
        * platform/gdk/TemporaryLinkStubs.cpp: Adjust to new APIs. Small cleanups.
        (FrameView::updateBorder):
        (Widget::setEnabled):
        (Widget::isEnabled):
        (Widget::enableFlushDrawing):
        (Widget::removeFromParent):
        (Widget::paint):
        (Widget::setIsSelected):
        (Widget::invalidate):
        (Widget::invalidateRect):
        (PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::findWordBoundary):
        (ChromeClientGdk::chromeDestroyed):
        (ChromeClientGdk::closeWindowSoon):
        (ChromeClientGdk::canTakeFocus):
        (ChromeClientGdk::takeFocus):
        (ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (ChromeClientGdk::addMessageToConsole):
        (ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (ChromeClientGdk::runJavaScriptAlert):
        (ChromeClientGdk::runJavaScriptConfirm):
        (ChromeClientGdk::runJavaScriptPrompt):
        (ChromeClientGdk::setStatusbarText):
        (ChromeClientGdk::shouldInterruptJavaScript):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::PlugInInfoStore::supportsMIMEType):
        (WebCore::refreshPlugins):
        (SearchPopupMenu::saveRecentSearches):
        (SearchPopupMenu::loadRecentSearches):
        (SearchPopupMenu::SearchPopupMenu):
        (Path::apply):
        (PlatformScrollbar::PlatformScrollbar):
        (PlatformScrollbar::~PlatformScrollbar):
        (PlatformScrollbar::width):
        (PlatformScrollbar::height):
        (PlatformScrollbar::setEnabled):
        (PlatformScrollbar::paint):
        (PlatformScrollbar::updateThumbPosition):
        (PlatformScrollbar::updateThumbProportion):
        (PlatformScrollbar::setRect):
        (ResourceHandle::willLoadFromCache):
        (ResourceHandle::loadsBlocked):
        (ResourceHandle::loadResourceSynchronously):
        (PageCache::close):
        (Editor::ignoreSpelling):
        (Editor::learnSpelling):
        (Editor::isSelectionUngrammatical):
        (Editor::isSelectionMisspelled):
        (Editor::guessesForMisspelledSelection):
        (Editor::guessesForUngrammaticalSelection):
        (Editor::markMisspellingsAfterTypingToPosition):
        (Editor::newGeneralClipboard):
        (Pasteboard::generalPasteboard):
        (Pasteboard::writeSelection):
        (Pasteboard::writeURL):
        (Pasteboard::clear):
        (Pasteboard::canSmartReplace):
        (Pasteboard::documentFragment):
        (Pasteboard::plainText):
        (Pasteboard::Pasteboard):
        (Pasteboard::~Pasteboard):
        (ContextMenu::ContextMenu):
        (ContextMenu::~ContextMenu):
        (ContextMenu::appendItem):
        (ContextMenu::setPlatformDescription):
        (ContextMenu::platformDescription):
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (WebCore::systemBeep):
        (WebCore::userIdleTime):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * platform/GlyphPageTreeNode.h: Fix header guard name.
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/CursorGdk.cpp:
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        * platform/gdk/MouseEventGdk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gdk/PageGdk.cpp: Removed. No longer used.
        * platform/gdk/RenderThemeGdk.cpp:
        (WebCore::RenderThemeGdk::getThemeData):
        (WebCore::RenderThemeGdk::setCheckboxSize):
        (WebCore::RenderThemeGdk::paintCheckbox):
        (WebCore::RenderThemeGdk::setRadioSize):
        (WebCore::RenderThemeGdk::paintRadio):
        (WebCore::RenderThemeGdk::paintButton):
        (WebCore::RenderThemeGdk::adjustTextFieldStyle):
        (WebCore::RenderThemeGdk::paintTextField):
        (WebCore::RenderThemeGdk::paintTextArea):
        (WebCore::RenderThemeGdk::systemFont):
        * platform/gdk/RenderThemeGdk.h:
        * platform/gdk/ScreenGdk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes for cairo.

        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clearFocusRingClip):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::toCairoOperator):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::fillRoundedRect):

2007-02-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes.

        * Projects/gdk/webcore-gdk.bkl:
        * WebCoreSources.bkl:
        * webcore-base.bkl:

2007-02-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Tweaked the thread violation behavior to be disabled by default, and to provide
        an easy breakpoint to set.  
        The possibilities for the "WebCoreThreadCheck" user defaults key are -
          - The value "None" disables thread checking
          - The value "Log" causes an NSLog on a violation
          - The value "Exception" causes exceptions to be raised on a violation

        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::_WebCoreThreadViolationCheck):
        (WebCoreReportThreadViolation):  In the global namespace, making breakpoints cake!

2007-02-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        <rdar://problem/4983515> Need mechanism to protect against WebKit calls from secondary threads
        This initial landing is a conservative move until we can be certain of performance impact.
        By writing to the user defaults key @"WebCoreThreadCheck" for the WebKit app you're running -
          - The value "None" disables thread checking
          - The value "Exception" causes exceptions to be raised on a violation
          - The default is to do the check, and NSLog each violation

        * bindings/objc/ExceptionHandlers.h:  Add a "Is Main Thread" assert macro
        * bindings/scripts/CodeGeneratorObjC.pm: Use new mechanism in allocs and deallocs for now

        * platform/Logging.h: Added WebCoreThreadViolationCheck macro
        * platform/mac/LoggingMac.mm:
        (WebCore::_WebCoreThreadViolationCheck): Check for main-threadedness, and do some stuff

2007-02-08  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Maciej, Darin, and Mark.

        rdar://problem/4922454
        - Prevents remote sites from executing local scripts.

        * bindings/objc/DOM.mm: - renamed a function that is now in the base class
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * dom/XMLTokenizer.cpp: - removed needless asserts
        (WebCore::XMLTokenizer::notifyFinished):
        * html/HTMLImageLoader.cpp: - renamed a function that is now in the base class
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLTokenizer.cpp: - removed needless asserts
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/misc/SVGImageLoader.cpp: - renamed a function that is now in the base class
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * loader/Cache.cpp: - return early if an error occured
        (WebCore::Cache::requestResource):
        (WebCore::Cache::remove):
        * loader/CachedImage.h: - renamed a function that is now in the base class
        (WebCore::CachedImage::canRender):
        * loader/CachedResource.h: - renamed a function that is now in the base class
        (WebCore::CachedResource::errorOccurred):
        * loader/CachedScript.h: - renamed a function that is now in the base class 
        (WebCore::CachedScript::schedule):
        * loader/DocLoader.cpp: - The heart of the fix, prevents resources from being created or retrieved from the cache if a remote site is requesting the local resource.
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::setLoadInProgress):
        * page/EventHandler.cpp: - renamed a function that is now in the base class
        (WebCore::selectCursor):
        * rendering/HitTestResult.cpp: - renamed a function that is now in the base class
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.cpp: - renamed a function that is now in the base class
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h: - renamed a function that is now in the base class
        (WebCore::RenderImage::errorOccurred):
        * rendering/RenderListItem.cpp: - renamed a function that is now in the base class
        (WebCore::RenderListItem::setStyle):
        * rendering/RenderListMarker.cpp: - renamed a function that is now in the base class
        (WebCore::RenderListMarker::isImage):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Add updateGeometry() to gdk's ScrollView. Needed to fix resizing of the window
        in gdk.

        * platform/ScrollView.h:
        * platform/gdk/ScrollViewGdk.cpp:
        (WebCore::ScrollView::updateGeometry):
        (WebCore::ScrollView::setDrawable):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux/gdk build fixes.

        * platform/ContextMenuItem.h:
        * platform/PlatformMenuDescription.h:
        * platform/gdk/PopupMenuGdk.cpp: Added. Renamed from RenderPopupMenuGdk.cpp for
        consistency with other platforms.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        * platform/gdk/RenderPopupMenuGdk.cpp: Removed.
        * platform/gdk/RenderPopupMenuGdk.h: Removed.

2007-02-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12608
          Incorrect min. width calculation of a series of floats with clear:both and white-space:nowrap

        Test: fast/block/float/nowrap-clear-min-width.html

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

2007-02-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10522
          REGRESSION: Incomplete repaint after table relayout that decreases height

        Test: fast/repaint/intermediate-layout-position.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Adjust the old bounds by the layout delta,
        to get the block's absolute bounds as they were before its ancestors moved it
        during layout.
        (WebCore::RenderBlock::collapseMargins): Update the layout delta for the child
        when moving it.
        (WebCore::RenderBlock::clearFloatsIfNeeded): Ditto.
        (WebCore::RenderBlock::determineHorizontalPosition): Ditto.
        (WebCore::RenderBlock::layoutBlockChildren): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Adjust the old bounds by the current
        layout delta.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Ditto.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Ditto.
        * rendering/RenderView.h:
        (WebCore::RenderView::layoutDelta): Added. Keeps track of the offset between
        the position of the object currently being laid out and its position at the
        end of the last layout.
        (WebCore::RenderView::addLayoutDelta): Added.

2007-02-07  Christopher Brichford  <chrisb@adobe.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=6286
        Very large (~500MB) images cause reproducible Safari crash

        * loader/CachedImage.cpp: 
        (WebCore::CachedImage::bufferData): Detect failure to create a
        large Vector<> and call error() when that happens.

2007-02-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5399
          no-repeat on negatively positioned background images are ignored

        Test: fast/backgrounds/repeat/negative-offset-repeat.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=5821
          Changing background of <col> doesn't repaint the column

        Test: fast/repaint/table-col-background.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=11720
          REGRESSION: large amounts of CPU consumed viewing this site

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged): Added. Finds the border and/or background
        layer(s) that use the image and invalidates only the rect in which the image
        actually paints. There are two special cases in this function: 1) for the body
        element, the background is propagated to the root; 2) inline flows do a full
        repaint.
        (WebCore::RenderBox::calculateBackgroundImageGeometry): Added. Factored out,
        simplified and corrected the calculation of the rectangle into which the background
        image paints, the tile size and the pattern phase.
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::imageChanged): Moved the implementation to RenderBox.
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::getAbsoluteRepaintRect): Overridden to return the
        table's repaint rect.
        (WebCore::RenderTableCol::imageChanged): Overridden to do a full repaint, which
        currently repaints the entire table.
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::imageChanged): Overridden to do a full repaint
        of the row, since the backgrounds are painted by the cells.
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::imageChanged): Overridden to do a full
        repaint of the section, since the backgrounds are painted by the cells.
        * rendering/RenderTableSection.h:

2007-02-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Move shouldInterruptJavaScript to the Chrome.

        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::shouldInterruptScript):
        * page/Chrome.cpp:
        (WebCore::Chrome::shouldInterruptJavaScript):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::shouldInterruptJavaScript):

2007-02-07  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - <rdar://problem/4826861> WebKit tests show memory leaks in NSHTMLReader, caused by method named "hash"

        * bindings/scripts/CodeGeneratorObjC.pm: Added a list of method names we should never use, since they
        are in base classes WebScriptObject and NSObject. Luckily, only "hash" is causing trouble. Added
        "hash" to the existing special case for "id". Now "hash" is "hashName" just as "id" is "idName".

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes for graphics-related stuff.

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/gdk/ImageGdk.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux/gdk build fixes related to networking.

        * platform/network/ResourceHandleInternal.h: Add accessor for m_client.
        (WebCore::ResourceHandleInternal::client):
        * platform/network/gdk/ResourceHandleCurl.cpp: Add missing functions and
        massage for changed APIs.
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/gdk/ResourceHandleManager.cpp: Rename get() to
        sharedInstance(). Massaged for changed APIs.
        (WebCore::ResourceHandleManager::sharedInstance):
        (WebCore::writeCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::remove):
        * platform/network/gdk/ResourceHandleManager.h: Ditto.

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Mismatched type of alloc/free function crashes gdk build.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::close):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes - add file based on qt implementation.

        * platform/DragData.h:
        * platform/gdk/DragDataGdk.cpp: Added.

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes - add new files based on qt implementation.

        * page/gdk/DragControllerGdk.cpp: Added.
        (WebCore::DragController::dragOperation):
        * page/gdk/EventHandlerGdk.cpp: Added.
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::eventActivatedView):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Linux/gdk build fixes - add new files based on Qt implementation.

        * loader/gdk/DocumentLoaderGdk.cpp: Added.
        (WebCore::DocumentLoader::getResponseModifiedHeader):
        * loader/gdk/FrameLoaderClientGdk.cpp: Added.
        (WebCore::FrameLoaderClientGdk::FrameLoaderClientGdk):
        (WebCore::FrameLoaderClientGdk::frame):
        (WebCore::FrameLoaderClientGdk::userAgent):
        (WebCore::FrameLoaderClientGdk::createDocumentLoader):
        (WebCore::FrameLoaderClientGdk::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientGdk::committedLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGdk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGdk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGdk::postProgressStartedNotification):
        (WebCore::FrameLoaderClientGdk::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientGdk::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientGdk::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientGdk::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientGdk::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientGdk::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientGdk::createPlugin):
        (WebCore::FrameLoaderClientGdk::createFrame):
        (WebCore::FrameLoaderClientGdk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGdk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGdk::objectContentType):
        (WebCore::FrameLoaderClientGdk::overrideMediaType):
        (WebCore::FrameLoaderClientGdk::windowObjectCleared):
        (WebCore::FrameLoaderClientGdk::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientGdk::hasWebView):
        (WebCore::FrameLoaderClientGdk::hasFrameView):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientGdk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGdk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGdk::makeDocumentView):
        (WebCore::FrameLoaderClientGdk::makeRepresentation):
        (WebCore::FrameLoaderClientGdk::forceLayout):
        (WebCore::FrameLoaderClientGdk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGdk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGdk::detachedFromParent1):
        (WebCore::FrameLoaderClientGdk::detachedFromParent2):
        (WebCore::FrameLoaderClientGdk::detachedFromParent3):
        (WebCore::FrameLoaderClientGdk::detachedFromParent4):
        (WebCore::FrameLoaderClientGdk::loadedFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGdk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGdk::dispatchWillClose):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGdk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGdk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGdk::dispatchShow):
        (WebCore::FrameLoaderClientGdk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGdk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGdk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGdk::willChangeTitle):
        (WebCore::FrameLoaderClientGdk::didChangeTitle):
        (WebCore::FrameLoaderClientGdk::finishedLoading):
        (WebCore::FrameLoaderClientGdk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGdk::setDefersLoading):
        (WebCore::FrameLoaderClientGdk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGdk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGdk::clearArchivedResources):
        (WebCore::FrameLoaderClientGdk::canHandleRequest):
        (WebCore::FrameLoaderClientGdk::canShowMIMEType):
        (WebCore::FrameLoaderClientGdk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGdk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGdk::restoreScrollPositionAndViewState):
        (WebCore::FrameLoaderClientGdk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGdk::didFinishLoad):
        (WebCore::FrameLoaderClientGdk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGdk::setTitle):
        (WebCore::FrameLoaderClientGdk::setDocumentViewFromPageCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGdk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGdk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGdk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGdk::download):
        (WebCore::FrameLoaderClientGdk::cancelledError):
        (WebCore::FrameLoaderClientGdk::cannotShowURLError):
        (WebCore::FrameLoaderClientGdk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGdk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGdk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGdk::shouldFallBack):
        (WebCore::FrameLoaderClientGdk::willUseArchive):
        (WebCore::FrameLoaderClientGdk::saveScrollPositionAndViewStateToItem):
        (WebCore::FrameLoaderClientGdk::saveDocumentViewToPageCache):
        (WebCore::FrameLoaderClientGdk::canCachePage):
        (WebCore::FrameLoaderClientGdk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGdk::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientGdk::setMainDocumentError):
        (WebCore::FrameLoaderClientGdk::startDownload):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientGdk::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientGdk::shouldGoToHistoryItem):
        * loader/gdk/FrameLoaderClientGdk.h: Added.
        (WebCore::FrameLoaderClientGdk::~FrameLoaderClientGdk):
        (WebCore::FrameLoaderClientGdk::setFrame):

2007-02-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Linux/gdk fixes related to fonts.

        * platform/gdk/FontDataGdk.cpp:
        (WebCore::FontData::platformInit): remove a work-around for older cairo versions
        since Ubuntu 6.10 ships with cairo that is new enough
        * platform/gdk/FontGdk.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/gdk/FontPlatformDataGdk.cpp: Remove unused variables.
        (WebCore::FontPlatformData::FontPlatformData):

2007-02-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12582
        REGRESSION: Unclosed <title> makes the window display garbage or empty title

        Automatic testing is not possible, and manual testing probably doesn't make sense.

        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle): Bail out early if the passed in string is all whitespace.

2007-02-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4977952>
        REGRESSION: Yahoo Messenger IM is totally blank
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        Don't ask the policy delegate for content that has valid substitute data.
        
        (WebCore::FrameLoader::checkNavigationPolicy):
        If the loader has substitute data but doesn't have an unreachable URL, let the policy
        delegate decide what to do.

2007-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Restoring some of the functionality I removed in r19445. It's insufficient for
        each page to cancel keepAlive only for its child frames, because a frame
        can be removed from the page before we get a chance to cancel its keepAlive.
        So, the page destructor has to cancel keepAlive for all frames. This is safe
        because we prohibit closing a WebView while JavaScript is executing.

        * page/Frame.cpp:
        (WebCore::keepAliveSet):
        (WebCore::Frame::keepAlive):
        (WebCore::Frame::cancelAllKeepAlive):
        (WebCore::Frame::lifeSupportTimerFired):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::~Page):

2007-02-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12603
        A crash when trying to use XPath functions normalize-space(), string-length() and number()

        Test: fast/xpath/implicit-node-args.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunNumber::doEvaluate): Implemented zero parameter case.
        (WebCore::XPath::FunctionMapping::): Corrected descriptions of these functions, as they
        do allow zero parameters.
        (WebCore::XPath::createFunction): Combined the two failure cases to ensure that this
        function never returns 0.

2007-02-07  Zack Rusin  <zrusin@trolltech.com>

        Fix compilation

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::eventActivatedView):

2007-02-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Added editing command functions for scrolling by page and moving the caret

        * editing/Editor.cpp:
        (WebCore::execMoveUpByPageAndModifyCaret):
        (WebCore::execMoveDownByPageAndModifyCaret):
        (WebCore::CommandEntry::):

2007-02-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4922367>
        WebView selectLine: followed by deleteBackward: deletes TABLE element of following line

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply): Don't ASSERT when manipulating
        non-editable content that is embedded in editable content.  We'll do 
        this kind of manipulation when removing redundant style spans after
        pasting content that has non-editable pieces.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::isContentEditable): Added, wrapper for Node::isContentEditable
        (WebCore::rangeCompliantEquivalent): Although legal, 
        [{table, select, etc.}, {0, numChildren}] don't refer to children of the element, 
        but positions before and after the element.  So, rangeCompliantEquivalent is 
        really responsible for converting illegal positions *and* legal positions 
        that have a special meaning internally.
        * editing/htmlediting.h:

2007-02-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        * platform/String.cpp:
        (WebCore::String::ascii):
        Fix dumping null Strings.

2007-02-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Fix <rdar://problem/4979484>
        
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isCSSTokenizerIdentifier):
        Do the range check before calling isalpha or isalnum.

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed Frame/RenderObject/Node leak report seen while running SVG image tests.
        (We'll need this fix if we ever re-enable SVG image.)
        
        The extra reference belonged to the Frame keepAlive timer (so this was
        not a "real" leak, in the end). The Page destructor has code to cancel all 
        Frame keepAlive timers upon the destruction of the last Page, but an SVG 
        image puts a Page within a Page, making this condition impossible to meet.
        
        The fix here is to have each individual page cancel the keepAlive timers 
        belonging to its child frames.
        
        * page/Frame.cpp: Changed the FrameCounter to use WTF logging.
        (WebCore::): Nixed the lifeSupportSet, since it's no longer used.
        (WebCore::Frame::cancelKeepAlive): Renamed from "endLifeSupport" to match
        the name "keepAlive".
        * page/Page.cpp:
        (WebCore::Page::~Page): Made each page cancel its child keepAlive timers 
        and clear its mainFrame, since we may never reach the condition of having 0 Pages.

2007-02-06  Adam Roben  <aroben@apple.com>

        Rubberstamped by Brady.

        Revert the log channel constants to their old values for all you pretty
        people out there who were using the old ones. I also renamed
        LogResources to LogPlatformLeaks to be a bit more specific.

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

2007-02-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4959067>
        Bullets get erased or moved down to another line
        <rdar://problem/4912529>
        Seed: Bulleted list in Note in Mail.app does not work with Japanese input mode
        
        Do not expand the selection to include fully selected 
        special elements when insering text over a selection.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteSelection): Pass
        expandForSpecialElements through to DeleteSelectionCommand's constructor.
        (WebCore::CompositeEditCommand::moveParagraphs): Use the 
        convenience function.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Do not expand the selection
        to be deleted for special elements.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Added a FIXME about 
        when we should expand the selection.

2007-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Disabled support for SVG image because it crashes all the time.

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

2007-02-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12518
          Betsson.com crashes browser

        Test: fast/layers/generated-layer-scrollbar-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar): Changed element()->document() to
        document() to work with anonymous objects.
        (WebCore::RenderLayer::updateOverflowStatus): Ditto.

2007-02-06  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        WebKit ignores floating point values for stroke-miterlimit
        http://bugs.webkit.org/show_bug.cgi?id=12577
        
        Test: svg/W3C-SVG-1.1/painting-stroke-07-t.svg

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        (WebCore::StyleStrokeData::operator!=):

2007-02-06  Adam Roben  <aroben@apple.com>

        Reviewed by Ada and Oliver.

        Adding a new LogResources channel for tracking platform resource usage.

        * platform/Logging.cpp: Added new channel, cleaned up constants to be more readable.
        * platform/Logging.h: Declare new channel.

2007-02-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=12619
        Non-abbreviated XPaths don't work

        Test: fast/xpath/ancestor-axis.html

        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::lex): Fix axis name parsing to actually work.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Fix "*" node test to actually work.

2007-02-06  Mark Rowe  <mrowe@apple.com>

        Roll out incomplete support for font-stretch (r19350) at Dave Hyatt's request.
        See http://bugs.webkit.org/show_bug.cgi?id=12530#c9 for more info.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::weight):
        (WebCore::FontDescription::setWeight):
        (WebCore::FontDescription::operator==):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/WebFontCache.mm:
        (acceptableChoice):
        (betterChoice):
        (+[WebFontCache fontWithFamily:traits:size:]):

2007-02-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        A few small updates to my bidi patch.

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): Moved the declaration of the CharacterBuffer outside the if statement since we use its data outside that scope.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): ditto.
        * rendering/bidi.cpp: (WebCore::RenderBlock::bidiReorderCharacters): Used a PassRefPtr for the BidiContext.

2007-02-05  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for assertion failure in fast/events/objc-keyboard-event-creation.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectionStart): Check that the selection offsets are not equal to -1 (which is means the selection has never been set) instead of checking for >= 0.
        (WebCore::HTMLInputElement::selectionEnd): ditto.
        (WebCore::HTMLInputElement::setValue): ditto.
        (WebCore::HTMLInputElement::selection): Return an empty selection if the input is not a text field or if no selection has ever been set in the text field.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::selectionStart): Check that the selection offsets are not equal to -1.
        (WebCore::HTMLTextAreaElement::selectionEnd): ditto.
        (WebCore::HTMLTextAreaElement::setValue): ditto.
        (WebCore::HTMLTextAreaElement::selection): Return an empty selection if no selection has ever been set in the textarea.

        * dom/Position.cpp: Added FIXMEs that we should catch the negative offset earlier.
        (WebCore::Position::previous):
        (WebCore::Position::next):

2007-02-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4947387>
        REGRESSION Shift Command Left should only select to the beginning of the line

        * editing/Editor.cpp:
        (WebCore::CommandEntry::): Never copy/paste code.

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

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11535
          <rdar://problem/4946959> REGRESSION: onclick="this.select();" not working on new forms (11535)

        Test: fast/forms/input-select-on-click.html

        * page/EventHandler.h: Added m_mouseDownWasSingleClickInSelection boolean.
        Organized other booleans a bit more logically.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Rearrange order to match EventHandler.h, add
        m_mouseDownWasSingleClickInSelection initialization.
        (WebCore::EventHandler::handleMousePressEventSingleClick): Set m_mouseDownWasSingleClickInSelection
        to true in the appropriate special case.
        (WebCore::EventHandler::handleMousePressEvent): Set m_mouseDownWasSingleClickInSelection to false.
        (WebCore::EventHandler::handleMouseReleaseEvent): Change code to clear selection or set to caret to
        only fire if m_mouseDownWasSingleClickInSelection was true rather than firing for any
        m_mouseDownMayStartSelect case.

2007-02-05  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Send HTTP cookies.

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

2007-02-05  Adele Peterson  <adele@apple.com>

        Reviewed by Mitz and Anders.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11811
        <rdar://problem/4947184> REGRESSION (r11783): Hebrew text in list boxes is reversed

        http://bugs.webkit.org/show_bug.cgi?id=11812
        <rdar://problem/4960269> REGRESSION (Native file upload): Hebrew filenames are reversed

        Tests: 
        fast/text/international/bidi-listbox.html
        fast/text/international/bidi-listbox-atsui.html

        * rendering/RenderBlock.h: Added static bidiReorderCharacters that will run the bidi algorithm on a character buffer.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderCharacters): Added. Creates an anonymous RenderBlock and RenderText to feed into bidiReorderLines.
        (WebCore::RenderBlock::constructLine): Uses the new convenience methods on BidiRun.
        * rendering/bidi.h:
        (WebCore::BidiRun::reversed): Added convenience method.
        (WebCore::BidiRun::dirOverride): ditto.

        * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): Creates a buffer and calls bidiReorderCharacters
          to get a correctly ordered character buffer for drawText.
        * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): ditto.

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12590
          REGRESSION: Text selection is weird in textareas in Trac wiki editing pages

        Test: fast/repaint/selection-gap-overflow-scroll.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRects): Adjust for overflow scroll.

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11916
          REGRESSION (SearchField): RTL search fields are mixed up

        Test: fast/forms/search-rtl.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerBlockStyle): Always make the inner
        block LTR so that the results button will be on the left and the cancel
        button will be on the right.
        (WebCore::RenderTextControl::createInnerTextStyle): Inherit the direction
        property directly from the control so that it won't be masked by the inner
        block's LTR override.
        (WebCore::RenderTextControl::nodeAtPoint): Removed code that swapped the
        results and cancel buttons for RTL.
        (WebCore::RenderTextControl::forwardEvent): Ditto.
        (WebCore::RenderTextControl::clientPaddingLeft): Ditto.
        (WebCore::RenderTextControl::clientPaddingRight): Ditto.

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12618
          REGRESSION (SearchField): Dragging across the text and releasing over the clear button clears the field

        Test: fast/forms/search-cancel-button-mouseup.html

        Made the cancel button capturing.

        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldCancelButtonElement::HTMLSearchFieldCancelButtonElement):
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        * html/HTMLTextFieldInnerElement.h:

2007-02-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6626
          Arabic & Farsi rendered with no shaping (all glyphs separate, unreadable!)

        No test possible since Mac OS X only ships with fonts that contain shaping
        information.

        * icu/unicode/ushape.h: Added from
        http://www.opensource.apple.com/darwinsource/10.4.8.ppc/ICU-6.2.9/icuSources/common/unicode/
        * platform/FontData.h:
        (WebCore::FontData::shapesArabic): Added. Returns whether the font contains
        shaping information for Arabic or not.
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):
        (WebCore::FontData::checkShapesArabic): Added. Checks whether the font contains
        a glyph metamorphosis table. The heuristic is that if a font contains Arabic glyphs
        and a metamorphosis table, then it includes shaping information for Arabic.
        * platform/mac/FontMac.mm:
        (WebCore::overrideLayoutOperation): Changed to use the same character buffer passed
        to ATSUI instead of the original character buffer and to give zero-width spaces zero
        width.
        (WebCore::isArabicLamWithAlefLigature): Added. Checks if the character is one
        of the Arabic presentation forms of Lam with Alef.
        (WebCore::shapeArabic): Added. This is a wrapper around the ICU Arabic shaping routine
        that replaces each space following a Lam with Alef ligature resulting from shaping
        with a zero-width space.
        (WebCore::ATSULayoutParameters::initialize): Changed to allocate the auxiliary buffer
        lazily for mirroring and Arabic shaping. Added a call to shapeArabic() when required.

2007-02-05  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        * ksvg2/svg/SVGStyleElement.cpp: add forgotten header.

2007-02-05  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        Fix style name testcase which I broke in my last commit.

        * ksvg2/svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::xmlspace):
        (WebCore::SVGStyleElement::title): override Element::title()
        (WebCore::SVGStyleElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyleElement.h:

2007-02-04  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Fix hand cursor on link hover for SVG
        Fix status text on link hover for SVG
        Fix tooltips on link hover for SVG
        Fix link dragging for SVG
        http://bugs.webkit.org/show_bug.cgi?id=12575
        
        Test: added manual-tests/svg-links.svg

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * dom/Element.cpp:
        (WebCore::Element::title):
        * dom/Element.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setId):
        (WebCore::HTMLElement::title):
        (WebCore::HTMLElement::setTitle):
        (WebCore::HTMLElement::setLang):
        * html/HTMLElement.h:
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::title):
        (WebCore::SVGAElement::parseMappedAttribute):
        (WebCore::SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGTitleElement.cpp:
        * ksvg2/svg/SVGTitleElement.h:
        * manual-tests/svg-links.svg: Added.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::title):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        (WebCore::HitTestResult::titleDisplayString):

2007-02-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12602
        XPath functions string(), normalize-space() and string-length() don't work
        without arguments

        Test: fast/xpath/implicit-node-args.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunString::doEvaluate):
        (WebCore::XPath::FunStringLength::doEvaluate):
        (WebCore::XPath::FunNormalizeSpace::doEvaluate):
        Don't try to pass RefPtr<Node> to the Value ctor.

2007-02-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8791
        XPath should support custom node resolvers

        * bindings/js/JSCustomXPathNSResolver.cpp: Added.
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::~JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSCustomXPathNSResolver.h: Added.
        * bindings/objc/DOMCustomXPathNSResolver.h: Added.
        * bindings/objc/DOMCustomXPathNSResolver.mm: Added.
        (WebCore::DOMCustomXPathNSResolver::DOMCustomXPathNSResolver):
        (WebCore::DOMCustomXPathNSResolver::~DOMCustomXPathNSResolver):
        (WebCore::DOMCustomXPathNSResolver::lookupNamespaceURI):
        Wrappers for JS/ObjC objects that can be used as resolvers.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        Use the above wrappers to support custom resolvers.

        * xml/XPathNSResolver.cpp:
        * xml/XPathNSResolver.h:
        Turned this class into an abstract one.

        * xml/NativeXPathNSResolver.cpp: Added.
        (WebCore::NativeXPathNSResolver::NativeXPathNSResolver):
        (WebCore::NativeXPathNSResolver::~NativeXPathNSResolver):
        (WebCore::NativeXPathNSResolver::lookupNamespaceURI):
        * xml/NativeXPathNSResolver.h: Added.
        A XPathNSResolver subclass, doing what XPathNSResolver used to do.

        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::createNSResolver): Create a NativeXPathNSResolver.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

2007-02-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Tidying up EventHandler, and moving more of
        EventHandlerMac.mm to EventHandler.cpp

        Also added EventHandler::eventLoopHandleMouse[Dragged,Up]
        these are basically helper functions to allow correct event
        handling on MacOS.        

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::dragSourceMovedTo):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::dispatchDragSrcEvent):
           Moved from EventHandlerMac to EventHandler

        * page/EventHandler.h:
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
          Null implementations of two Mac helper functions
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):           
        (WebCore::EventHandler::handleDrag):
          Much tidying, reduced nesting, made less dependent on NS types   
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventLoopHandleMouseUp):  
          Helper functions to let us process events properly on MacOS

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):

2007-02-04  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Some Qt hacks and cleanups - makes rendering of forms much better on
        OS X

        * platform/qt/PlatformKeyboardEventQt.cpp: Add Key_Return/Enter
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/qt/RenderThemeQt.cpp: Hacks and fix buttons
        (WebCore::RenderThemeQt::addIntrinsicMargins):
        (WebCore::RenderThemeQt::setCheckboxSize):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::applyTheme):

2007-02-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Adam.

        - remove obsolete code that has an annoying space in the directory name

        * WebCore.vcproj/Image Viewer/Image Viewer.cpp: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.h: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.rc: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.reg: Removed.
        * WebCore.vcproj/Image Viewer/Image Viewer.vcproj: Removed.
        * WebCore.vcproj/Image Viewer/ImageDocument.cpp: Removed.
        * WebCore.vcproj/Image Viewer/ImageDocument.h: Removed.
        * WebCore.vcproj/Image Viewer/ImageMainFrame.cpp: Removed.
        * WebCore.vcproj/Image Viewer/ImageMainFrame.h: Removed.
        * WebCore.vcproj/Image Viewer/ImageView.cpp: Removed.
        * WebCore.vcproj/Image Viewer/ImageView.h: Removed.
        * WebCore.vcproj/Image Viewer/Resource.h: Removed.
        * WebCore.vcproj/Image Viewer/res/Image Viewer.ico: Removed.
        * WebCore.vcproj/Image Viewer/res/Image ViewerDoc.ico: Removed.
        * WebCore.vcproj/Image Viewer/res/ImageViewer.rc2: Removed.
        * WebCore.vcproj/Image Viewer/res/Toolbar.bmp: Removed.
        * WebCore.vcproj/Image Viewer/stdafx.cpp: Removed.
        * WebCore.vcproj/Image Viewer/stdafx.h: Removed.

2007-02-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12564
          REGRESSION: Uncaught AppKit exception when using the scrollwheel while Gmail is loading

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::eventNumberForEvent): Scroll wheel events don't have an event number.

2007-02-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Add support for xml:space="preserve" for SVG text.
        It can be modeled by using white-space="pre" and replace \n by spaces.

        Handle xml:space="default" correctly.
        Always remove tabs from SVG text - as demanded by spec.

        Added test: svg/custom/text-whitespace-handling.svg

        * css/svg.css:
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle):
        (WebCore::RenderText::setTextInternal):
        * rendering/bidi.cpp:
        (WebCore::shouldPreserveNewline):
        (WebCore::RenderBlock::skipWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12560
        W3C XPath test Text_Nodes.svg fails

        Covered by dom/svg/level3/xpath/Text_Nodes.svg

        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodeTestMatches): Only include the first text sibling in text() matches.

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12485
        XPath id() function doesn't work as root in paths

        Test: fast/xpath/id-path.html

        * xml/XPathPath.cpp:
        (WebCore::XPath::Path::doEvaluate): Implemented.
        (WebCore::XPath::LocationPath::evaluate): A new overload that takes an initial NodeVector.
        (WebCore::XPath::LocationPath::doEvaluate): Moved most of the logic to the new evaluate().

        * xml/XPathPath.h: Added a new evaluate() overload and a using declaration to keep the
        generic one visible.

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12559
        REGRESSION: Crash in checkForHeadCharset() under GuardMalloc

        No tests possible.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Fix end of buffer checks; sprinkle a number 
        of new ones over the function.

2007-02-03  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (no-svg build fix).

        * page/EventHandler.cpp: Include FloatPoint.h.

2007-02-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=12549
        Wrong character encoding at www.ravmilim.co.il

        Test: fast/encoding/meta-charset.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Fix an off by one error.

2007-02-02  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Hyatt & Adele.
        
        - <rdar://problem/4896972> TV guide listings page doesn't finish loading (11674)
        
        Test case: fast/forms/disabled-select-change-index.html
        
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelected): Allow changing selected state of a disabled
        option.
        
2007-02-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        Blind attempt to fix Qt build.

        * WebCore.pro: Add RenderSVGGradientStop.cpp / RenderSVGHiddenContainer.cpp

2007-02-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric & Maciej.

        Fix serveral <use> issues:
        - When events are dispatch to a referenced element, the actual event.target
          has to be set to the corresponding SVGElementInstance object

        - Node::shadowAncestorNode() should _not_ return the shadowParentNode for SVG elements
          This is only needed for the HTML forms concept and breaks event dispatching for SVG shadow tree elements.

        - Add SVGElementInstance as possible EventTarget in bindings/js/kjs_dom.cpp
          (Now event.target returns the actual SVGElementInstance object for a shadow tree element)

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12502 (Reproducible crash when browsing SVG map.)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12511 (<use> has event dispatching issues)

        Added test: svg/custom/use-event-handler-on-use-element.svg
        Added test: svg/custom/use-event-handler-on-referenced-element.svg
        Added test: svg/custom/use-elementInstance-event-target.svg
        Added test: svg/custom/use-elementInstance-methods.svg

        * bindings/js/kjs_dom.cpp:
        (KJS::toJS):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toSVGElementInstance):
        * dom/EventTarget.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::handleLocalEvents):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchEvent):
        * dom/EventTargetNode.h:
        * dom/Node.cpp:
        (WebCore::Node::shadowAncestorNode):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::shadowTreeParentElementForShadowTreeElement):
        (WebCore::SVGElement::dispatchEvent):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::toSVGElementInstance):
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):
        (WebCore::SVGUseElement::instanceForShadowTreeElement):
        * ksvg2/svg/SVGUseElement.h:

2007-02-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Add guard around accessing [NSEvent eventNumber] to ensure
        we don't attempt to access it on on non-mouse related NSEvent.

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::eventNumberForEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-02-02  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Try to be a little less selfish about DocumentLoader.

        Spotted while working on <rdar://problem/4957747>.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
            Everyone can open frames in new windows.

2007-02-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Move xml:space/xml:lang from svgattrs.in to xmlattrs.in where they actually belong.
        Now they are actually recognized by SVGLangSpace::parseMappedAttribute.
        Patch implementing xml:space="preserve" coming soon, which acts as test for this stuff.

        Always build XMLNames.cpp (not only for SVG) and replace all occourences of
        "http://www.w3.org/XML/1998/namespace" by "XMLNames::xmlNamespaceURI".

        * DerivedSources.make:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * ksvg2/svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::SVGLangSpace):
        (WebCore::SVGLangSpace::parseMappedAttribute):
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/svgattrs.in:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * xml/XPathNSResolver.cpp:
        (WebCore::XPathNSResolver::lookupNamespaceURI):
        * xml/xmlattrs.in:

2007-02-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Working on a layout test.

        Fix for <rdar://problem/4966100> REGRESSION: Reproducible ASSERT 
        hit at Walgreens.com

        * page/Frame.cpp:
        (WebCore::Frame::setView): If we are setting the view to 0 and 
        detaching the document, call unscheduleRealyout() on the old view 
        before setting it to 0.

2007-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Added support for selectively ignoring WebCore::Node leaks during layout
        tests, so that we can ignore known leaks in other components.

        * WebCore.exp:
        * dom/Node.cpp:
        (WebCore::Node::isSupported): Moved isSupported up with the rest of the static functions.

        (WebCore::): Added an ignoreSet, which collects WebCore::Nodes whose lifetime
        we want to ignore. We need to track which nodes to ignore rather than, say,
        just suspending the count, because node destruction depends on lots of
        different variables, so it would be nearly impossible to know when exactly 
        to suspend the count and when exactly to resume it.

        (WebCore::NodeCounter::~NodeCounter): Changed to use WTFLog instead of fprintf.

        (WebCore::Node::startIgnoringLeaks): Do the ignoring.
        (WebCore::Node::stopIgnoringLeaks): ditto
        (WebCore::Node::Node): ditto
        (WebCore::Node::~Node): ditto

        * dom/Node.h: Moved isSupported up with the rest of the static functions.

        * platform/mac/LoggingMac.mm:
        (WebCore::initializeWithUserDefault): Renamed from "initializeLoggingChannel"
        because the real goal here is to honor a user default -- WTFLoggingChannels
        need no run-time initialization. Also replaced "off by default, on if a 
        user default says so" behavior with "only override existing setting if a
        user default says so" behavior. It seemed like a bug that you would specify 
        a channel's on/off state in its definition, but this function would unconditionally
        blow that state away.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2007-02-02  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Fix gradient stop style resolution to be less of a hack, fixing style invalidation:
        http://bugs.webkit.org/show_bug.cgi?id=12193
        and fix stop-color and stop-opacity not to inherit:
        http://bugs.webkit.org/show_bug.cgi?id=12193
        
        Tests:
        * svg/custom/gradient-stops-style-change.svg: added
        * svg/W3C-SVG-1.1/pservers-grad-18-b.svg: updated

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::inheritedNotEqual):
        (WebCore::SVGRenderStyle::inheritFrom):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::createRenderer):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::createRenderer):
        (WebCore::SVGGradientElement::buildStops):
        * ksvg2/svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::rendererIsNeeded):
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::createRenderer):
        * ksvg2/svg/SVGStopElement.h:
        (WebCore::SVGStopElement::rendererIsNeeded):
        * rendering/RenderSVGGradientStop.cpp: Added.
        * rendering/RenderSVGGradientStop.h: Added.
        * rendering/RenderSVGHiddenContainer.cpp: Added.
        * rendering/RenderSVGHiddenContainer.h: Added.
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix scrolling-on-selection bug by correctly
        scrolling to the offset instead of trying to 
        ensure visibility with margins.

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

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fix drawing of dashed and colored lines. Pen
        has to be inherited for stroke to stay consistent.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):

2007-02-01  Nicholas Shanks  <webkit@nickshanks.com>

        Reviewed by Mark.

        Add support for CSS2 font-stretch property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * platform/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontPlatformDataCacheKeyTraits::deletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/FontDescription.h:
        (WebCore::):
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::stretch):
        (WebCore::FontDescription::narrowerStretch):
        (WebCore::FontDescription::widerStretch):
        (WebCore::FontDescription::setStretch):
        (WebCore::FontDescription::operator==):
        * platform/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/WebFontCache.mm:
        (acceptableChoice):
        (betterChoice):
        (+[WebFontCache fontWithFamily:traits:size:]):

2007-02-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/4969201> REGRESSION: Safari applies the wrong font to BODY element at http://www.apple.com/downloads/dashboard/

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]): Don't call [NSFont fontWithName:] with the desiredFamily on Tiger.

2007-02-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12506
        REGRESSION: Safari doesn't display hebrew text on a web page,
        displayed correctly on Tiger

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Advance the pointer when necessary.

2007-02-01  George Staikos  <staikos@kde.org>

        Reviewed by Zack and Lars.

        Add a cookie interface for the Qt build.

        * WebCore.pro:
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):

2007-02-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        - fixed <rdar://problem/4922764> ASSERTION: (!m_contentFunction) in PolicyCheck::call trying to visit feed URL (CNN, Apple, etc.)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopPolicyCheck): Call new cancel method instead of call(false) on old check.
        (WebCore::PolicyCheck::cancel): call any callback function that is set with false or PolicyIgnore as
        appropriate.
        * loader/FrameLoader.h:

2007-02-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=10517 REGRESSION 
        (r12065-r12082): Navigation graphic wraps to the next line on 
        duart.com and <rdar://problem/4960505> REGRESSION: The Awesome 
        Windows Vista page has a layout error in the header table (10517)

        The problem is that we never supported a quirk that other browsers 
        support where, under very specific circumstances, a table cell will 
        grow to fit an image inside of it. This is only a regression 
        because a bug was fixed were we were 1 pixel off in the calculation 
        of overflow in some cases.

        * rendering/RenderBlock.cpp:
        (WebCore::shouldGrowTableCellForImage):
        (WebCore::RenderBlock::calcInlineMinMaxWidth):

2007-02-01  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Implement native look for comboboxes
        and fix/implement popup menus.

        * platform/PopupMenu.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):

2007-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/4887428> REGRESSION: Implement slight delay for firing incremental onSearch event

        * rendering/RenderTextControl.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl): Set up timer.
        (WebCore::RenderTextControl::subtreeHasChanged): Start timer here instead of immediately sending event.
        (WebCore::RenderTextControl::searchEventTimerFired): Added. Sends search event.
        (WebCore::RenderTextControl::stopSearchEventTimer): Added.
        (WebCore::RenderTextControl::startSearchEventTimer): Added. Sends search event right away if there is
        no text. If there is some text, sets the timer using the same delay rule as NSSearchField. If you keep
        typing, then the timer keeps getting reset 0.2 seconds into the future until you pause.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::onSearch): Tell the renderer to
        stop the timer, since we're sending a search event. This helps when a caller other than
        the timer decides to send an explicit search event.

2007-02-01  Maciej Stachowiak  <mjs@apple.com>

        Fix by Darin, reviewed by Maciej.

        - fix ~10% performance regression from encoding fix

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Fix a logic
        error which made huge strings accidentally.

2007-02-01  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * page/qt/EventHandlerQt.cpp:

2007-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Adam and Geoff.

        - fix <rdar://problem/4786767> REGRESSION: <select> controls are not resized when zooming text

        Test: fast/forms/select-width-font-change.html

        * rendering/RenderMenuList.h: Cleaned up formatting a bit. Removed unneeded include of PopupMenu.h.
        Made a lot more things private, including the PopupMenuClient base class, all of the virtual
        functions from PopupMenuClient, and the setTextFromOption function. Added updateOptionsWidth.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle): Added code to call updateOptionsWidth when the font changes.
        (WebCore::RenderMenuList::updateOptionsWidth): Added. Factored code out of updateFromElement.
        Changed to do nothing when m_optionsWidth is already correct.
        (WebCore::RenderMenuList::updateFromElement): Moved code to recomputed options width to the new
        updateOptionsWidth function.
        (WebCore::RenderMenuList::text): Made const.

2007-01-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Migrate more drag and drop logic to WebCore, start preparing
        to move EventHandler::handleDrag from EventHandlerMac to EventHandler 

        * WebCore.exp:   
          updating methods
                    
        * dom/Clipboard.cpp:
        * dom/Clipboard.h:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::setDragHasStarted):
        (WebCore::Clipboard::dragStarted): 
          Moving from ClipboardMac to Clipboard 

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
          PlatformMouseEvent no longer lies about button state, however 
          DOM Events don't allow NoButton, so we need to convert NoButton 
          to LeftButton when we create a DOM Event from PlatformMouseEvent

        * page/DragClient.h:
          Tidying comment 

        * page/DragController.cpp:
        (WebCore::createMouseEvent):
          Updated for new PlatformMouseEvent constructors
        (WebCore::DragController::mayStartDragAtEventLocation):
          Migrated from WebKit

        * page/DragController.h:
          Added above function declarations

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragState): 
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::freeClipboard):
        (WebCore::EventHandler::shouldDragAutoNode):
          Moved from EventHandlerMac
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleMousePressEvent):
          Use DragController     

        * page/EventHandler.h:
          Added DragState struct definition to EventHandler

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleMouseUp):
        (WebCore::EventHandler::mouseDown):
          Update to use DragController and PlatformMouseEvent

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dragSourceMovedTo:]):
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):
          Use DragController for state

        * platform/PlatformMouseEvent.h:
        (WebCore::):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformMouseEvent::eventType):
        (WebCore::PlatformMouseEvent::timestamp):
        (WebCore::PlatformMouseEvent::eventNumber):
        (WebCore::PlatformMouseEvent::setClickCount):
          Exposing necessary data for Drag logic

        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::setDragImage):
          Have moved a number of fields from ClipboardMac to Clipboard
          so need to use accessors in a few places now

        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::mouseButtonForEvent):
        (WebCore::mouseEventForNSEvent):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
          Determine MouseEventType, and provide event time info

2007-01-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12506
        REGRESSION: Safari doesn't display hebrew text on a web page,
        displayed correctly on Tiger

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): Skip over 
        quoted attributes.

2007-01-31  David Carson  <dacarson@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12510
        Initialize the variable m_totalLoops
        Is tested by LayoutTests/fast/css/MarqueeLayoutTest.html

        * rendering/RenderLayer.cpp:
        (WebCore::Marquee::Marquee):

2007-01-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4886776>
        REGRESSION: After opening a web archive, location shows the actual URL, not the webarchive file

        * WebCore.exp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadWithData):
        * loader/FrameLoader.h:
        New function which continues a load but using a given buffer instead.
        
2007-01-31  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12516
        REGRESSION (r19313): All keyboard navigation has stopped working

        For non-editable selections, handleKeyPress doesn't need to call _interceptEditingKeyEvent. 

        * editing/Editor.cpp:
        (WebCore::selectionForEvent): Moved this to the top of the file.
        (WebCore::Editor::handleKeyPress): Do the equivalent of the _canEdit check that used to be in WebKit WebEditorClient::handleKeyPress.

2007-01-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Added a Range counter to detect leaks. Tweaked the Node counter.
        
        Also fixed a TextIterator destructive modification bug that I noticed along the
        way. No test case for this bug because no clients have been bitten by it
        yet.

        * dom/Node.cpp: Renamed NodeImplCounter to NodeCounter, changed counter
        to unsigned, fixed formatting to match style guidelines.
        (WebCore::NodeCounter::~NodeCounter):
        (WebCore::Node::Node):
        (WebCore::Node::~Node):

        * dom/Range.cpp:
        (WebCore::RangeCounter::~RangeCounter): Added.
        (WebCore::Range::Range):
        (WebCore::Range::~Range):
        (WebCore::Range::ownerDocument): New accessor, used by TextIterator to avoid
        annoying NULL checks.
        * dom/Range.h:

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::subrange): 
        (1) Don't initialize result with entireRange --  doing so would create a 
        PassRefPtr that pointed to entireRange, so this function would destructively 
        modify the Range you passed it. Initialize it with a new Range instead.
        (2) Don't use a PassRefPtr as a local variable, because they have sneaky
        semantics. Use a RefPtr instead.
        (3) Don't call CharacterIterator::range() willy-nilly, since it does 
        non-trivial work. Use a local variable instead.

2007-01-31  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebCore part of fix for <rdar://problem/4521461> REGRESSION: when keyPress event changes form focus, inserted key goes to wrong control

        Test: fast/events/keypress-focus-change.html

        * editing/Editor.cpp:
        (WebCore::selectionForEvent): Added.  This computes a selection that considers the case where an event handler 
         has moved the selection outside of a text control.  In that case, we use the target control's selection.
        (WebCore::Editor::insertText): This gets the selectionForEvent, checks that the selection is editable,
         and calls TypingCommand::insertText with the correct selection.

        * editing/TypingCommand.h: Added a version of insertText that takes a selection.  The old version of insertText will call this, and pass
          in the frame's selection.
        * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertText): Added. Uses the passed in selection to 
          set the starting and ending selections correctly so that the editing machinery will insert the text in the correct place.

        * page/Page.h: Added convenience method to get selection from focused or main frame.
        * page/Page.cpp: (WebCore::Page::selection):

        * html/HTMLInputElement.h: Added selection methods to get selection for text controls.
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::selection):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::selection):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::selection):

2007-01-31  Darin Adler  <darin@apple.com>

        - fix build

        * ForwardingHeaders/wtf/ListHashSet.h: Added.

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Return the correct selection color.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):

2007-01-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - fixed <rdar://problem/4751164> REGRESSION: Safari places text on incorrect button when returning to a page via back [10541]
        http://bugs.webkit.org/show_bug.cgi?id=10541

        * dom/Document.cpp:
        (WebCore::Document::formElementsState):
        * dom/Document.h:
        
        I couldn't figure out the back/forward support in the tests enough
        to make an automated test, but this maual test reproduces the
        problem 100% without this patch:
        
        * manual-tests/back.html: Added.
        * manual-tests/form-control-madness.html: Added.

2007-01-31  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12490
          Clean up canPlaceOnLine logic in bidi.cpp

        No test cases since there is no change in functionality.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Simplify canFitOnLine expression.

2007-01-31  Zack Rusin  <zack@kde.org>

        Adding comments explaining how the focus ring implementation
        works on the Qt platform and just move focus ring rendering
        related code to the same spot.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::setFocusRingColorChangeFunction):
        (WebCore::focusRingColor):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Properly propagate key events. 

        * page/qt/FrameQt.cpp:
        * page/qt/FrameQt.h: Remove redundant method.
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):

2007-01-31  George Staikos  <staikos@kde.org>

        Reviewed by Zack and Lars.

        Fix double delete on cancel as well as assertion with proxy.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::WebCoreHttp::getConnection):
        (WebCore::WebCoreHttp::onRequestFinished):
        (WebCore::WebCoreHttp::cancel):

2007-01-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        * dom/Document.h: Change #if XSLT_SUPPORT to #ifdef XSLT_SUPPORT.

2007-01-31  Lars Knoll <lars@trolltech.com>

        Fix the Qt build.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::setDefersLoading):

2007-01-31  Zack Rusin  <zack@kde.org>

        Reviewed by Eric.

        Implement SVGImage on the Qt platform.

        * WebCore.pro:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::create):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::pixmap):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::setData):

2007-01-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady.

        - fixed <rdar://problem/4939366> REGRESSION: Assertion failure and crash when going back in history (12314)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow): special case a frame name of "_blank"
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): ditto

2007-01-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - fixed <rdar://problem/4963871> REGRESSION: Crash occurs at WebCore::Frame::loader() when attempting to open a saved archive file

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::request): Removed obsolete FIXME.
        (WebCore::DocumentLoader::initialRequest): Ditto.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader): Handle data loads from a timer, otherwise bad things happen.
        (WebCore::MainResourceLoader::handleDataLoadNow):
        (WebCore::MainResourceLoader::handleDataLoadSoon):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::didCancel): cancel data load timer
        * loader/MainResourceLoader.h:

2007-01-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4961953> Stop using NSString deprecated methods like initWithCString:

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/svg/filters/cg/WKArithmeticFilter.m:
        (-[WKArithmeticFilter init]):
        * platform/graphics/svg/filters/cg/WKComponentMergeFilter.m:
        (-[WKComponentMergeFilter init]):
        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.m:
        (-[WKDiffuseLightingFilter init]):
        * platform/graphics/svg/filters/cg/WKDiscreteTransferFilter.m:
        (-[WKDiscreteTransferFilter init]):
        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.m:
        (-[WKDisplacementMapFilter init]):
        * platform/graphics/svg/filters/cg/WKDistantLightFilter.m:
        (-[WKDistantLightFilter init]):
        * platform/graphics/svg/filters/cg/WKGammaTransferFilter.m:
        (-[WKGammaTransferFilter init]):
        * platform/graphics/svg/filters/cg/WKLinearTransferFilter.m:
        (-[WKLinearTransferFilter init]):
        * platform/graphics/svg/filters/cg/WKNormalMapFilter.m:
        (-[WKNormalMapFilter init]):
        * platform/graphics/svg/filters/cg/WKPointLightFilter.m:
        (-[WKPointLightFilter init]):
        * platform/graphics/svg/filters/cg/WKSpecularLightingFilter.m:
        (-[WKSpecularLightingFilter init]):
        * platform/graphics/svg/filters/cg/WKSpotLightFilter.m:
        (-[WKSpotLightFilter init]):
        * platform/graphics/svg/filters/cg/WKTableTransferFilter.m:
        (-[WKTableTransferFilter init]):

2007-01-30  David Hyatt  <hyatt@apple.com>

        Fix for Radar bug #4679426, golden gate bridge Web site layout broken.
        
        This is a regression caused by the addition of :lang support.  This
        feature caused us to accept any pseudo-class/element with function
        arguments, even ones we couldn't handle.  The site used such a construct
        in conjunction with :not, which turned :not(something-crazy) into not(false).
        This ended up being "true", and so we started matching a rule we used to
        reject.

        The fix is to now aggressively parse pseudo-elements and classes and to
        cause the rejection of an entire rule if any pseudoclass or element within
        any simple selector of that rule is unrecognized.

        Reviewed by darin

        fast/css/invalid-pseudo-classes.html

        * css/CSSGrammar.y:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector):

2007-01-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12487
          REGRESSION: Repro crash when a second background image is animated

        Test: fast/images/animated-background-image-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::arenaDelete): Deref() all background images and the
        border image.

2007-01-30  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * dom/EventTarget.h:
        * dom/EventTarget.cpp: (WebCore::EventTarget::toNode):
        Use EventTargetNode instead of Node. Removed unneeded includes.
        Make EventTarget's destructor protected to make it clear that you
        should never delete one.

        * dom/EventTargetNode.h:
        (WebCore::EventTargetNode::toNode):
        Tweaked formatting. Updated for change to return value.

        * platform/graphics/BitmapImage.h: Updated comment for clarity.
        Marked FrameData Noncopyable.

        * platform/graphics/Image.h: Tweaked formatting.

        * platform/graphics/ImageAnimationObserver.h:
        Make ImageAnimationObserver's destructor protected to make it clear that you
        should never delete one.

2007-01-30  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin (by way of Hyatt).

        - fix http://bugs.webkit.org/show_bug.cgi?id=12373
          ASSERTION FAILURE: !child->needsLayout() on paypal.com

        Test: fast/table/inline-form-assert.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout): Changed the assertion to ignore inlines.

2007-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12486
        XPathNSResolver.lookupNamespaceURI should return null if no URI is found

        * xml/XPathNSResolver.idl: added [ConvertNullStringTo=Null].

2007-01-30  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Revert the parts of 19244 that removed deferring NSURLConnections, that was not a correct change.
        Remove ASSERTS from loader.cpp that aren't true anymore since the callbacks are invoked without a handle
        when loading a subresource from an archive.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::setDefersLoading):
        * loader/loader.cpp:
        (WebCore::Loader::didFail):
        (WebCore::Loader::didReceiveResponse):
        (WebCore::Loader::didReceiveData):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::setDefersLoading):

2007-01-30  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fix for <rdar://problem/4911504> REGRESSION: With a image selected, ctrl-clicking
          on page displays the wrong contextual menu items "Search in Google", "Search in Spotlight"
          and "Look up in Dictionary"

        * platform/ContextMenu.cpp:
        (WebCore::selectionContainsPossibleWord): Added. Returns true if there are some
        non-whitespace characters in the selection.
        (WebCore::ContextMenu::populate): Don't add SearchSpotlightItem, SearchWebItem,
        or LookInDictionaryItem if selectionContainsPossibleWord returns false.

2007-01-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Oliver.

        Respect stroke-width in absolute repaint rect calculations for SVG text.
        Added test: svg/custom/text-repaint-including-stroke.svg

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::relativeBBox):

2007-01-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing includes.

        * ksvg2/svg/SVGElementInstance.cpp:

2007-01-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12452
        XPath id() function is not supported

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::isWhitespace): A helper to detect XML whitespace.

        (WebCore::XPath::FunId::isConstant):
        (WebCore::XPath::FunId::doEvaluate):
        (WebCore::XPath::FunctionMapping::):
        Implemented id().

2007-01-30  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Sam.

        Make the gradients work on the Qt platform.

        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/qt/SVGPaintServerGradientQt.cpp:
        (WebCore::SVGPaintServerGradient::fillColorArray):
        (WebCore::SVGPaintServerGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setupGradient):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::SVGPaintServerRadialGradient::setupGradient):

2007-01-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric & Oliver. Leak related fixes reviewed by Mark.

        Finally make the SVG <use> implementation use the proper "shadow tree" concept,
        which is also used by the HTML forms implementation. It's the first time in ksvg
        history that <use> is not implement as a crude hack, but proper & sane.

        Implement deep expansion of use trees both for the instance & shadow tree.
        (<use> on a <symbol> containing a <g> containg a <use> element referencing a <rect>)
 
        The shadow tree is free of any symbol/use tags, but is properly expanded to the
        actual referenced content. The instance tree (SVGElementInstance objects) now exactly
        exposes the "expanded" shadow tree, as required by the specification. Previously
        we cloned referenced <use> elements, so our faked use shadow tree itself contained
        <use> elements. That lead to very nasty bugs - finally these dirty pieces are gone.

        Checked twice that the updating logic works for all weird "deep expansions" cases. Example:
        <rect id="someRect"/> <g id="g"> <symbol> <use xlink:href="#someRect"/> </g> <use xlink:href="#g" id="use"/>
 
        If you walk through the instanceRoot using JavasScript, and explicitely modify some propertties of "someRect"
        -> all instances get updated correctly. For such simple cases it doesn't even involve recloning the shadow tree!

        SVGElementInstance is now an EventTarget, as demanded by the specification - sending events to <use> instances
        will be implemented in a follow-up patch - as well as the "share event listeners with referenced target" logic.

        Fixes all updating/stability issues with svg/carto.net/window.svg.
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=6000 (<use> does not handle recursion safely)

        Added test: svg/custom/use-on-use.svg (deep use referencing)
        Added test: svg/custom/use-on-g-containing-use.svg (nested deep use referencing)
        Added test: svg/custom/use-modify-target-container.svg (instanceRoot scripting, modifying <g> target)
        Added test: svg/custom/use-modify-target-symbol.svg (instanceRoot scripting, modfiying <symbol> target)
        Added test: svg/custom/use-modify-container-in-target.svg (modify <g> within referenced use target -> needs to update instances)
        Added test: svg/custom/use-recursion-1.svg (referencing container, whose children reference itself)
        Added test: svg/custom/use-recursion-2.svg (<use> self referencing)
        Added test: svg/custom/use-recursion-3.svg (<use> self rerencing, within <use> target)
        Added test: svg/custom/use-recursion-4.svg (cyclic referencing, within <use> target)

        * bindings/scripts/CodeGeneratorJS.pm:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeTimeContainer):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::viewportElement):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::isShadowNode):
        (WebCore::SVGElement::shadowParentNode):
        (WebCore::SVGElement::setShadowParentNode):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::shadowTreeElement):
        (WebCore::SVGElementInstance::setShadowTreeElement):
        (WebCore::containsUseChildNode):
        (WebCore::SVGElementInstance::updateInstance):
        (WebCore::SVGElementInstance::addEventListener):
        (WebCore::SVGElementInstance::removeEventListener):
        (WebCore::SVGElementInstance::dispatchEvent):
        * ksvg2/svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::refEventTarget):
        (WebCore::SVGElementInstance::derefEventTarget):
        (WebCore::SVGElementInstance::hasOneRef):
        (WebCore::SVGElementInstance::refCount):
        (WebCore::SVGElementInstance::setParent):
        (WebCore::SVGElementInstance::parent):
        * ksvg2/svg/SVGElementInstance.idl:
        * ksvg2/svg/SVGGElement.cpp:
        (WebCore::SVGGElement::localMatrix):
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGHiddenElement.h: Removed.
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::~SVGSVGElement):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateElementInstance):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFromDocument):
        (WebCore::SVGUseElement::notifyAttributeChange):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::attach):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::attachShadowTree):
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement):
        * ksvg2/svg/SVGUseElement.h:

2007-01-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        <rdar://problem/4928646> REGRESSION: manual-tests/remove-input-file-onchange.html crashes
        
        * platform/FileChooser.h:
        (WebCore::FileChooser::disconnected): New method, so the RenderFileControl can tell when it's
        gotten disconected.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::valueChanged): Avoid calling repainted() when onChange()
        handler destroyed us.

2007-01-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Combine libJavaScriptCore into libWebKitQt.
        Build with ELF visibility if possible.

        * WebCore.pro:

2007-01-30  Zack Rusin  <zack@kde.org>

        The method has been removed from the header
        (make it compile)

        * platform/network/qt/ResourceHandleQt.cpp:

2007-01-30  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by aroben

        Compile fix. 

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::setDefersLoading):

2007-01-29  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Propagate the allows-scrolling property on the frames
        correctly. If the frame has been constructed as non-
        scrolling, respect that and don't show scrollbars.

        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        (WebCore::ScrollView::setAllowsScrolling):

2007-01-29  Geoffrey Garen  <ggaren@apple.com>

        I am the chosen one! I have seen the faces of the final five! I will
        save the WebKit build!
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):

2007-01-30  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Maciej.

        Part of fix for http://bugs.webkit.org/show_bug.cgi?id=10725
        Image data in from RTFD clipboard data thrown away
        
        ResourceHandles no longer need to be able to defer loading as that is
        now handled by the ResourceLoader.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow): updated to remove defersLoading argument.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources): release the deferred request.
        (WebCore::ResourceLoader::load): defer creating the ResourceHandle instead of
        asking the ResourceHandle to defer loading.
        (WebCore::ResourceLoader::setDefersLoading): create the ResourceHandle if we have deferred creating it.
        * loader/ResourceLoader.h:
        * platform/network/ResourceHandle.cpp: ResourceHandle's don't need to know about deferLoading.
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h: ditto.
        * platform/network/ResourceHandleInternal.h: ditto.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm: ditto.
        (WebCore::ResourceHandle::start):

2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice

        Lets use smart pointers, shall we?

        * platform/network/ResourceHandleInternal.h:

2007-01-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4960137>
        ASSERTION FAILURE calling SelectionController::setBaseAndExtent (11833)

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Hand off the selection
        to the selectionController responsible for it, instead of asserting.
        A selection object can't be constructed with endpoints in different 
        documents, so this code is only necessary for one endpoint.

2007-01-29  Ada Chan  <adachan@apple.com>

        Reviewed by Brady.
        
        Moved the update of the title of the current entry in the backforward list to WebCore.

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

2007-01-29  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        More preparation for event handling fixes.

        * bridge/EditorClient.h: Removed EventTargetNode parameter from handleKeyPress since we can just get that from the event.
        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler): ditto.
        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler): ditto.
        * page/EventHandler.h: ditto.
        * platform/graphics/svg/SVGImageEmptyClients.h: (WebCore::SVGEmptyEditorClient::handleKeyPress): ditto.

        * editing/Editor.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyPress): Removed EventTargetNode parameter.
        (WebCore::Editor::execCommand): Made commandMap use AtomicStringImpls instead of Strings.
        (WebCore::Editor::insertText): Moved from the bridge.

        * page/mac/WebCoreFrameBridge.h: Moved insertText method to Editor.
        * page/mac/WebCoreFrameBridge.mm:

        * WebCore.exp: Updated exports.

2007-01-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4960097>
        http://bugs.webkit.org/show_bug.cgi?id=12444
        Assertion failure in -[WebCoreFrameBridge installInFrame:]
        
        The problem was that the XML tokenizer didn't create elements with 
        createdByParser set to true.
        
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        New method which takes a QName. This is used by both the XML tokenizer and createElementNS.
        
        (WebCore::Document::createElementNS):
        Call new createElement method.
        
        * dom/XMLTokenizer.h:        
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        Use an OwnPtr for the pending callbacks object. Also, use String instead of StringImpl in the hash map.
        
        (WebCore::toString):
        (WebCore::XMLTokenizer::startElementNs):
        Call createElement.
        
2007-01-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        http://bugs.webkit.org/show_bug.cgi?id=12465
        Only set the iconURL port for non-zero ports

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

2007-01-29  John Sullivan  <sullivan@apple.com>

        * platform/network/mac/ResourceRequestMac.mm:
        Build fix -- removed #import of no-longer-extant WebDataProtocol.h (and also one of the
        two #imports for WebCoreSystemInterface.h, while I was at it)

2007-01-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):
        Only try a drag operation if the drag client explicitly specified that it is OK

2007-01-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Migrated more drag logic and state to WebCore
                                              
        * page/DragClient.h:       

        * page/DragController.cpp:
        (WebCore::DragController::delegateDragSourceAction):
          New forwarding method for the UI delegate
        * page/DragController.h:
        (WebCore::DragController::dragOffset):
          Now store the drag offset -- the offset of the cursor relative to the drag image)
          in DragController
        * page/EventHandler.cpp:
        (WebCore::EventHandler::allowDHTMLDrag):
          Moved from WebFrameBridge
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleDrag):                  
          EventHandlerMac now uses EventHandler::allowDHTMLDrag rather than the 
          implementation in WebFrameBridge
        * page/mac/WebCoreFrameBridge.h:
          removed definition of allowDHTMLDrag from WebFrameBridge
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::dragSourceActionMaskForPoint):
          Updated empty DragClient

2007-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12359
        XPathEvaluator may return some nodes more than once in a result set

        Test: fast/xpath/nodeset-duplicates.html

        * xml/XPathPath.cpp:
        (WebCore::XPath::LocationPath::doEvaluate): Ensure uniqueness of elements
        in the node-set.

        * xml/XPathPredicate.cpp:
        (WebCore::XPath::Union::doEvaluate): Fixed a uniqueness algorithm that was
        already present here. Added a FIXME about incorrect result ordering.

2007-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12340
        XPathEvaluator behavior does not match Firefox - name() and attribute nodes

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunName::doEvaluate): Do not try to append a prefix if it doesn't exist.

2007-01-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11815
        XPathEvaluator behavior does not match Firefox - substring() and empty element

        Test: fast/xpath/empty-string-substring.html

        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::Value):
        * xml/XPathValue.h:
        Added a constructor taking const char*, so that string literals and arrays don't 
        get converted to boolean values.

2007-01-29  Zack Rusin  <zrusin@trolltech.com>

        Cosmetic fixes - don't resize the widget in the constructor
        (it was a hack from the initial port) and fix the paint
        signature.

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

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - change from struct to class to make picky compilers happy

        * loader/SubstituteData.h:

2007-01-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12458
        Bug 12458: Crash in W3C-SVG-1.1/animate-elem-09-t.svg running layout tests under guard malloc

        * ksvg2/svg/SVGAnimationElement.cpp: 
        (WebCore::parseValues): ptr either points to a ';' or off the end of the buffer.  We're
        interested in what comes before the ';', so start there instead.

2007-01-29  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars.

        Take the scrollbars into considation when computing
        the contents size of the main frame.

        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::invalidate):
        (WebCore::Widget::invalidateRect):

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - fix includes

        * loader/SubstituteData.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - added new file that I forgot in the last commit

        * loader/SubstituteData.h: Added.
        (WebCore::SubstituteData::SubstituteData):
        (WebCore::SubstituteData::isValid):
        (WebCore::SubstituteData::content):
        (WebCore::SubstituteData::mimeType):
        (WebCore::SubstituteData::textEncoding):
        (WebCore::SubstituteData::failingURL):

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - made data loading cross-platform
        - fixed <rdar://problem/4910106>

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::urlForHistory):
        (WebCore::DocumentLoader::unreachableURL):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::substituteData):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::checkNavigationPolicy):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::handleEmptyLoad):
        (WebCore::MainResourceLoader::handleDataLoad):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        * loader/mac/DocumentLoaderMac.mm:
        * loader/mac/WebDataProtocol.h: Removed.
        * loader/mac/WebDataProtocol.mm: Removed.
        * loader/qt/DocumentLoaderQt.cpp:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):

2007-01-29  Zack Rusin  <zrusin@trolltech.com>

        Order the build files alphabetically instead of
        the random mess we had before.

        * WebCore.pro:

2007-01-29  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Use the platform independent scrollbar code.
        Remove the redundant empty stubs and forward
        few missing platform scrollbar calls.

        * WebCore.pro:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::paint):
        (WebCore::PlatformScrollbar::setRect):

2007-01-29  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix the way we handle native widgets (QWidget) inside
        WebCore. Now WebCore::Widget owns the QWidget in all
        cases. This is the only way to get well defined semantics
        for all teh native widgets we have (currently ScrollView
        and ScrollBar, but plugins will follow).

        This has the side effect that one cannot rely on a defined 
        lifetime of a QWebFrame when using the API. 

        * platform/Widget.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        (WebCore::ScrollView::removeChild):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::qwidget):

2007-01-28  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Don't send data during a redirect -> causes assert failure.

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

2007-01-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=11085
        Bug 11085: REGRESSION: favicon.ico always looked for on port 80

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL): Copy the port over to the favicon URL.

2007-01-28  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12453
        REGRESSION(r19197): Tabbing into web page requires two key presses

        All layout tests pass.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus): If there's no focused frame,
        actually go ahead and find a focusable node instead of just focusing
        the main frame and quitting. This behavior was a holdover from a
        previous desired tabbing behavior with respect to frames.

2007-01-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin and David Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12423
          Mixing white-space:pre text with non white-space:pre text does not wrap properly

        Test: fast/block/basic/white-space-pre-wraps.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Wrap a non-wrapping text run if it
        appears on a line with previous text runs that do wrap.

2007-01-28  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8360
          Repro crash when onscroll handler deletes the scrolled object

        Test: fast/layers/removed-by-scroll-handler.html

        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Added a m_enqueueEvents count.
        (WebCore::FrameView::layout): Raise the enqueue count before starting layout and
        until after enqueued events are dispatched.
        (WebCore::FrameView::scheduleEvent): Made this function dispatch the event
        immediately unless the enqueue count is positive.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): Schedule the scroll event through the
        FrameView.
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::Marquee::start):

2007-01-28  Charles Ying  <charles_ying@yahoo.com>

        Reviewed by eseidel.  Landed by eseidel.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12429
            animateTransform rotate, with cx/cy is broken
            
        SVGTransform now contains a float point to store the rotation center, needed
            to track rotation center for interpolation by animateTransform.
            
        SVGTransform now has an additional constructor:
            SVGTransform(type) to make empty base value transforms that match their
            distanced values.
            
        Removed m_colorDistance and m_transformDistance from their respective classes
            as they are now computed at update time.

        Fix a case where animateTransform did not parse transform values correctly
            according to BNF in W3C spec:

        Test case in:
        * manual-tests/animation/animateTransform-toanimation.svg: Added.

        Fix a case where animateTransform only specified a to animation only.

        Test case in:
        * manual-tests/animation/animateTransform-parser.svg: Added.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateColorElement::updateAnimatedValue):
        (WebCore::SVGAnimateColorElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::updateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateTransformElement::calculateFromAndToValues):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::angle):
        (SVGTransform::rotationCenter):
        (SVGTransform::setTranslate):
        (SVGTransform::setScale):
        (SVGTransform::setRotate):
        (SVGTransform::setSkewX):
        (SVGTransform::setSkewY):
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addSVGTransform):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformDistance.h:
        * manual-tests/animation/animateTransform-parser.svg: Added.
        * manual-tests/animation/animateTransform-toanimation.svg: Added.

2007-01-27  Adam Roben  <aroben@apple.com>

        Reviewed by Ada.

        Fix <rdar://problem/4957184> REGRESSION: After creating a new mail
        message, the caret is automatically in message body

        -[WebHTMLView _updateActiveState] was calling
        FocusController::focusedOrMainFrame, which had the surprising
        side-effect of setting the focused frame if there was none. The fix
        was to remove this side-effect.

        No tests possible, as this bug involves focus outside the WebView,
        which we have no support for in DRT.

        Change inspired by Dave Harrison.

        * page/FocusController.cpp:
        (WebCore::FocusController::focusedOrMainFrame): Removed this method's
        non-obvious side-effect of setting the focused frame.
        * WebCore.xcodeproj/project.pbxproj: Version wars.

2007-01-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11880: Improve some egregious
        Windows form control drawing issues:
        Provide Classic mode fallbacks for the button/textfield drawing
        routines.
        Provide some basic drawing of menulists (still relatively broken).
        Some cleanup.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::RenderThemeWin::systemFont):
        * rendering/RenderThemeWin.cpp:
        (WebCore::m_menuListTheme):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::determineClassicState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::m_classicState):
        (WebCore::RenderThemeWin::setRadioSize):
        (WebCore::RenderThemeWin::paintTextArea):

2007-01-27  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12260
          Windows platform build is not maintained

        * loader/win/FrameLoaderWin.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::FrameLoader::redirectDataToPlugin):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::createPlugin):

2007-01-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        - Patch for http://bugs.webkit.org/show_bug.cgi?id=11957
          REGRESSION: Unordered List Bullets too big and changing from size

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint): Explicitly set the stroke size to 1.0f.

2007-01-27  Lars Knoll <lars@trolltech.com>

        Fix the Qt build and disable the usage
        of QScrollbars for PlatformScrollBar for 
        now as it causes crashes in the layout tests.

        * WebCore.pro:
        * ksvg2/svg/SVGTransformDistance.cpp:
        * page/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::createRootObject):
        * page/qt/FrameQt.h:
        * platform/qt/PlatformScrollBarQt.cpp:
        (WebCore::PlatformScrollbar::PlatformScrollbar):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):

2007-01-27  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by NOBODY (buildbot build fix).

        * ksvg2/svg/ColorDistance.cpp:
        (WebCore::ColorDistance::scaledDistance): Added static cast of arguments to int.

2007-01-27  Rob Buis  <buis@kde.org>

        Reviewed by NOBODY (typo in method name fix).

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

2007-01-27  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Fix support for SVG's <set> element.

        Manual test added.

        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::updateAnimatedValue):
        (WebCore::SVGSetElement::calculateFromAndToValues):
        * ksvg2/svg/SVGSetElement.h:
        * manual-tests/animation/set-to.svg: Added.

2007-01-27  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):

2007-01-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12389
        Chinese decoding error at hk.antispam.yahoo.com

        Test: fast/encoding/noscript-in-head.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset): We were already allowing 
        NOSCRIPT tags in head, let's actually skip over their content.

2007-01-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4608404> WebScriptObject's _executionContext lack 
        of ownership policy causes crashes (e.g., in Dashcode)

        Added RootObject ref-counting goodness.

        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::cleanupPluginObjects): Invalidate our RootObjects 
        instead of detroying them. Track _bindingRootObject separately from the
        rest of our RootObjects, since it has its own variable.

        * page/mac/WebCoreFrameBridge.mm:
        (createRootObject): Use the Frame's new, more encapsulated function to
        create a RootObject.

        * bindings/objc/WebScriptObject.mm: Nixed rootObject setters, since they
        were unused and they complicated reference-counting.

2007-01-26  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Eric.

        Release build fix.

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateValueIndexAndPercentagePast): Added static cast
        to unsigned when calculating flooredValueIndex.

2007-01-26  Darin Adler  <darin@apple.com>

        - checked in slightly newer revision of the patch below

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Grouped all the unimplemented values at the bottom. Fixed the ifdef for
        CSS_PROP__WEBKIT_DASHBOARD_REGION so that it compiles on all platforms.

        * css/cssparser.cpp: (WebCore::CSSParser::parseValue): Removed default
        case and added type so that the compiler warns about missing properties.
        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::applyProperty): Ditto.

2007-01-26  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12412
          "unimplemented propertyID: 46" seen at dojotoolkit.org

        Covered by fast/css/computed-style.html

        * css/CSSPropertyNames.in: Sorted the file into two separate sections, one
        for properties without the -webkit- prefix and another for properties with.

        * css/makeprop: Generate a CSSPropertyID enum instead of a set of #defines.
        Removed unused CSS_PROP_MIN and CSS_PROP_MAX. Renamed CSS_PROP_TOTAL to
        numCSSProperties and changed it to a const int instead of #define.
        Added a declaration of getPropertyName in the header. Changed the return
        type of getPropertyName to const char* and the parameter type to CSSPropertyID.

        * css/CSSComputedStyleDeclaration.cpp: Sort the lists of properties in
        an easier to maintain order -- properties without a WebKit prefix first.
        (WebCore::valueForLength): Changed return value to PassRefPtr.
        (WebCore::valueForMaxLength): Ditto.
        (WebCore::valueForBorderStyle): Ditto.
        (WebCore::valueForTextAlign): Ditto.
        (WebCore::valueForAppearance): Added.
        (WebCore::valueForMarginCollapse): Added.
        (WebCore::valueForShadow): Changed return value to PassRefPtr.
        (WebCore::getPositionOffsetValue): Ditto.
        (WebCore::currentColorOrValidColor): Ditto.
        (WebCore::CSSComputedStyleDeclaration::cssText): Added cast since
        getPropertyName now takes an enum value.
        (WebCore::primitiveValueFromLength): Changed return value to PassRefPtr.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Added cast to CSSPropertyID so that gcc will detect missing enums in the
        switch statement. Simplified the background-size and border-spacing
        implementations so they don't have local variables. Added lots of cases
        to the switch statement for unimplemented properties. Implemented the
        outline-width, box-sizing, -webkit-appearance, -webkit-rtl-ordering,
        -webkit-user-drag, and -webkit-user-select properties.
        (WebCore::CSSComputedStyleDeclaration::item): Added cast since
        getPropertyName now takes an enum value.

        * css/CSSMutableStyleDeclaration.cpp: Removed declaration of getPropertyName.
        (WebCore::CSSMutableStyleDeclaration::item): Added cast since
        getPropertyName now takes an enum value.

        * css/CSSProperty.cpp: Removed declaration of getPropertyName.
        (WebCore::CSSProperty::cssText): Added cast since
        getPropertyName now takes an enum value and returns a const char*.

        * css/CSSStyleDeclaration.cpp: Removed declaration of getPropertyName.
        (WebCore::CSSStyleDeclaration::getPropertyShorthand): Added cast since
        getPropertyName now takes an enum value and returns a const char*.

2007-01-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        Fixed <rdar://problem/4838076> CrashTracer: 10 crashes in Mail at com.apple.WebCore: WTF::HashMap<WebCore::String

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        Added nil check around resource from cache.

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Build fix.

        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateValueIndexAndPercentagePast):
        Keep index variables as unsigned until we need to convert to float.

2007-01-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Ada.

        Fixed <rdar://problem/4919097> REGRESSION: Ctrl-Y fails to yank (11076)

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        If there's no selection, locally create a range that is to the end of the granularity unit and pass that to deleteRange(). 

2007-01-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Qt build fix.

        * page/qt/EventHandlerQt.cpp:

2007-01-26  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Hyatt.

        Fix so that we only relayout frameset children on calls to layout.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2007-01-26  Oliver Hunt  <oliver@apple.com>

        Build Fix

        * ksvg2/svg/ColorDistance.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::handleTimerEvent):

2007-01-26  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Add support for calcMode, keyTimes and (nearly) keySplines.
        http://bugs.webkit.org/show_bug.cgi?id=12350
        Re-architect much of the animation system to remove huge sections of code.
        Added new ColorDistance, SVGTransformDistance to simplify animateColor, animateTransform calculations.
        I also added basic <animateMotion> support since it was so easy w/ the new architecture.
        
        Adding manual animation tests until bug 12074 is fixed.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::applyAnimations):
        * ksvg2/svg/ColorDistance.cpp: Added.
        (WebCore::ColorDistance::ColorDistance):
        (WebCore::clampColorValue):
        (WebCore::ColorDistance::scaledDistance):
        (WebCore::ColorDistance::addColorsAndClamp):
        (WebCore::ColorDistance::addToColorAndClamp):
        (WebCore::ColorDistance::isZero):
        (WebCore::ColorDistance::distance):
        * ksvg2/svg/ColorDistance.h: Added.
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        (WebCore::SVGAnimateColorElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateColorElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateColorElement::updateAnimatedValue):
        (WebCore::SVGAnimateColorElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateColorElement.h:
        (WebCore::SVGAnimateColorElement::contextElement):
        * ksvg2/svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::updateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidTarget):
        (WebCore::SVGAnimateMotionElement::updateAnimatedValue):
        (WebCore::parsePoint):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        (WebCore::SVGAnimateMotionElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateMotionElement::applyAnimatedValueToElement):
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        (WebCore::SVGAnimateTransformElement::updateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimateTransformElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimateTransformElement::calculateFromAndToValues):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::contextElement):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseValues):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::targetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::detectAnimationMode):
        (WebCore::adjustPercentagePastForKeySplines):
        (WebCore::SVGAnimationElement::valueIndexAndPercentagePastForDistance):
        (WebCore::SVGAnimationElement::calculateTotalDistance):
        (WebCore::caculateValueIndexForKeyTimes):
        (WebCore::SVGAnimationElement::isValidAnimation):
        (WebCore::SVGAnimationElement::calculateValueIndexAndPercentagePast):
        (WebCore::SVGAnimationElement::updateAnimationBaseValueFromElement):
        (WebCore::SVGAnimationElement::applyAnimatedValueToElement):
        (WebCore::SVGAnimationElement::handleTimerEvent):
        (WebCore::SVGAnimationElement::updateAnimatedValueForElapsedSeconds):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPolyParser::parsePoints):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGSetElement.cpp:
        * ksvg2/svg/SVGSetElement.h:
        (WebCore::SVGSetElement::updateAnimatedValue):
        (WebCore::SVGSetElement::calculateFromAndToValues):
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::type):
        (SVGTransform::translate):
        (SVGTransform::scale):
        (SVGTransform::setSkewX):
        (SVGTransform::setSkewY):
        * ksvg2/svg/SVGTransform.h:
        (WebCore::operator==):
        (WebCore::operator!=):
        * ksvg2/svg/SVGTransformDistance.cpp: Added.
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addSVGTransform):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::isZero):
        (WebCore::SVGTransformDistance::distance):
        * ksvg2/svg/SVGTransformDistance.h: Added.
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::concatenateForType):
        * ksvg2/svg/SVGTransformList.h:
        * manual-tests/animation/animateColor-by.svg: Added.
        * manual-tests/animation/animateColor-from-by.svg: Added.
        * manual-tests/animation/animateColor-repeat-indefinite.svg: Added.
        * manual-tests/animation/animateColor-to-from.svg: Added.
        * manual-tests/animation/animateColor-to.svg: Added.
        * manual-tests/animation/animateColor-values-simple.svg: Added.
        * manual-tests/animation/animateMotion-to.svg: Added.
        * manual-tests/animation/animateTransform-keyTimes.svg: Added.
        * manual-tests/animation/animateTransform-repeat-once.svg: Added.

2007-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4956565> REGRESSION: After scrolling frame, 
        hovering over link in this frame doesn't change cursor to pointing 
        hand

        The mouseMove event was not being propagated correctly after using 
        the mouse to scroll the frame because m_mousePressed was never 
        getting set to false.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent): This code does not 
        belong here.
        * page/EventHandler.h: lastEventIsMouseUp() is only ever relevant 
        in EventHandlerMac, so it can just be a static function there.
        * page/mac/EventHandlerMac.mm:
        (WebCore::lastEventIsMouseUp): Make this static.
        (WebCore::EventHandler::passMouseDownEventToWidget): Here is where 
        we need to set m_mousePressed to false if lastEventIsMouseUp() is 
        true.

2007-01-26  David Hyatt  <hyatt@apple.com>

        Fix for style regression caused by strictness checking of the number of properties.  This caused code like:
        "width: 20 px" to fail, because we interpreted it as two values and rejected it.  Our old code allowed 20 to be
        used like a pixel value and then ignored the orphaned unit.

        This patch actually scans the list of values looking for orphaned units and reattaches them to the numeric
        values that they should correspond to.  This means rules like "width: 5 em" will now work in quirks mdoe and
        the "em" unit type will be honored.

        Reviewed by beth

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::unitFromString):
        (WebCore::CSSParser::checkForOrphanedUnits):
        (WebCore::CSSParser::parseValue):
        * css/cssparser.h:
        (WebCore::ValueList::valueAt):
        (WebCore::ValueList::deleteValueAt):

2007-01-26  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Qt implementation.

        * WebCore.pro:
        * platform/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::scrollbarUnderMouse):

2007-01-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders' rubberstamp
        
        Warning about unreferenced formal parameter caused compile to fail

        * platform/cf/RetainPtr.h:
        (WebCore::adoptCFReference):

2007-01-26  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix <rdar://problem/4956688> move Mac-specific part of icon code into IconMac
        - fix a GC-compatibility problem in the icon code I noticed by code inspection

        * platform/FileChooser.cpp: (WebCore::FileChooser::chooseIcon): Removed Mac-specific
        path check -- that's in newIconForFile now.

        * platform/graphics/Icon.h: Changed the image to be a RetainPtr. The old code was
        using -[NSObject retain] which is not good enough for a pointer in a C++ object.
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::Icon): Got rid of unneeded code to do what RetainPtr does for us.
        (WebCore::Icon::~Icon): Ditto.
        (WebCore::Icon::newIconForFile): Added check for non-absolute file names. Updated
        for use of RetainPtr. Use constructor that takes NSImage.
        (WebCore::Icon::paint): Add get() calls needed now that we are using a RetainPtr.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode do its thing.

2007-01-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12385
        Assertion failure when loading subresources from "data:" frames

        Test: fast/loader/opaque-base-url.html

        * platform/KURL.cpp:
        (WebCore::KURL::init): Make the URL invalid if it's relative, but has an opaque or empty base.

2007-01-26  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        Removed a call to invalidateClick(), since we don't want to cancel a
        click if the mouse moves.

2007-01-26  Darin Adler  <darin@apple.com>

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::mediaTypeMatchSpecific):
        Oops, forgot a !.

2007-01-26  Darin Adler  <darin@apple.com>

        Patch by Nate Begeman.
        Reviewed by Darin and Maciej.

        - <rdar://problem/4946877> Avoid unnecessary allocations in CSS, patch attached (12401)
          http://bugs.webkit.org/show_bug.cgi?id=12401

        * css/MediaQueryEvaluator.h: Add mediaTypeMatchSpecific, a function that
        takes a char* to avoid creating and destroying a String for simple media
        type queries.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::mediaTypeMatchSpecific): Added. Besides
        avoiding the conversion to String, this also doesn't have the special
        case code to handle "" and "all".

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::matchUARules):
        Call mediaTypeMatchSpecific here when deciding whether to use the
        print version of the user agent style sheet.

        * loader/Cache.cpp: (WebCore::Cache::requestResource): Don't convert to
        a string and back to a KURL when calling createResource. Avoids reparsing
        the URL string.

2007-01-26  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Add history related classes to the project file.

        * WebCore.pro:

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Introduce PlatformScrollBar and try to make 
        the scrollbar behavior a little more sane.

        * WebCore.pro:
        * platform/qt/PlatformScrollBarQt.cpp: Added.
        (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):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::addChild):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2007-01-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11109
          REGRESSION (r15471): menus are offset on eink.com
          <rdar://problem/4824760>

        Changed offset{Left,Top} to match Firefox. If the body element is statically
        positioned, it is still returned as the offsetParent of elements whose containing
        block is the initial containing block (the root), but their offset{Left,Top} are
        relative to the root. If the body element is positioned, then offsets are relative
        to it. The body's own offset{Left,Top} are always 0. 

        Test: fast/dom/Element/offsetLeft-offsetTop-body-quirk.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetLeft):
        (WebCore::RenderObject::offsetTop):

2007-01-26  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin and Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10983
          REGRESSION (r12290): Drop shadow of flickr photo note is positioned incorrectly the second time it's shown

        Test: fast/dynamic/staticY.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects): Avoid marking the object's
        parents, since they have already been laid out.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStaticY): Added a call to setChildNeedsLayout() to
        ensure relayout by this box's container (third and fourth cases in the
        layout test).
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout): For positioned objects
        with static y, also mark the object's parent to ensure that it recomputes
        the static y value (first case in the layout test).

2007-01-26  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Get rid of FrameQtClient. It's unused since we moved over
        to the loader.

        * WebCore.pro:
        * page/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * page/qt/FrameQt.h:
        * page/qt/FrameQtClient.cpp: Removed.
        * page/qt/FrameQtClient.h: Removed.
        * platform/network/ResourceHandleInternal.h:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::RequestQt):
        (WebCore::ResourceHandleManager::add):
        * platform/network/qt/ResourceHandleManagerQt.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):

2007-01-26  Zack Rusin  <zack@kde.org>

        Fix the compile

        * WebCore.pro:

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Fixed <rdar://problem/4946499>, which made it impossible to tab
        forward into the left frame of tivofaq.com after tabbing out of the
        document.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus): Clear the focused frame
        before passing off focus to Chrome so that when we re-enter the
        document we start at the main frame instead of the last focused frame.

2007-01-25  Rob Buis  <buis@kde.org>

        Reviewed by olliej.

        http://bugs.webkit.org/show_bug.cgi?id=11911
        SVG exhibits double-text-selection behavior

        Fix selection height of the inline text boxes for svg.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionTop):
        (WebCore::InlineTextBox::selectionHeight):
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintCustomHighlight):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/InlineTextBox.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createInlineTextBox):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::createInlineTextBox):
        (WebCore::RenderText::createInlineBox):
        * rendering/RenderText.h:
        * rendering/SVGInlineTextBox.cpp: Added.
        (WebCore::SVGInlineTextBox::selectionTop):
        (WebCore::SVGInlineTextBox::selectionHeight):
        * rendering/SVGInlineTextBox.h: Added.
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Fix drawing of tiled images.

        * WebCore.pro:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::drawPattern):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Fixing image loading - we decode QImages
        but render QPixmaps now. Implement Icon
        class

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getPixmap):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::Icon):
        (WebCore::Icon::~Icon):
        (WebCore::Icon::newIconForFile):
        (WebCore::Icon::paint):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::reset):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::drawPattern):
        (WebCore::BitmapImage::getPixmap):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2007-01-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver
        
        <http://bugs.webkit.org/show_bug.cgi?id=12409>
        REGRESSION (r19039): Drag caret isn't cleared after a drop

        No new layout tests because the regression was
        caught by current layout tests.

        * page/DragController.cpp:
        (WebCore::DragController::concludeDrag): Clear the drag caret.

2007-01-25  Darin Adler  <darin@apple.com>

        Reviewed and landed by Geoffrey Garen.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12342
          REGRESSION: destroying a frame from its own script causes various crashes

        * bindings/js/kjs_window.cpp: (KJS::ScheduledAction::execute):
        Use RefPtr for the frame and the interpreter object so they don't get deleted
        out from underneath us.

        * bindings/js/kjs_proxy.cpp: (WebCore::KJSProxy::evaluate):
        Add a check for a page of 0. This was the only call site for the
        addMessageToConsole function that did not have a check for a page of 0.

2007-01-25 Dirk Mueller  <mueller@kde.org>

        Reviewed and merged by Beth.

        Fix for <rdar://problem/4921692> not processing comments inside a 
        title element leads to XSS (for at least BlogSpot)

        This is equivalent to commit 626791 in the KDE tree. Basically, the 
        patch allows comment parsing in titles to avoid capturing a 
        <script> tag by accident.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseComment):

2007-01-25  Darin Adler  <darin@apple.com>

        * ksvg2/svg/SVGPreserveAspectRatio.cpp: Add a couple of comments.

2007-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12365
          Reproducible crash in WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio
          in svg/W3C-SVG-1.1/animate-elem-40-t.svg under guard malloc
        - fix bug where the parser accepts "meet" or "slice" as an entire string
        - fix bug where "slice" is ignored if the old alignment was "none"
          even if the newly-parsed alignment is something other than "none", and
          "slice" is not ignored if the old alignment was not "none", but the
          newly-parsed alignment is "none"
        - optimize to only call notifyAttributeChange if the attribute actually changed

        Test: svg/dom/preserve-aspect-ratio-parser-test.html

        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (WebCore::checkString): Added an overload for using char* constants which is
        much simpler than the old one, and almost as fast.
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio): Fail if there's no
        more text after "defer". Fail if there's neither "none" nor an x/y specified.
        Check that there's more text before looking at the "m" and "s" for "meet" and
        "slice". Merged the failure and success cases. Only call notifyAttributeChange
        if something changed.

        I think all the "optimized" code where we check the first character before
        calling checkString isn't really helpful, but I decided to leave it as-is
        for now.

2007-01-25  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Trivial implementation of getMIMETypeForExtension.
        Use the above method in the ResourceHandleManager to set
        a mimetype on Resources that don't have one set (which
        includes everything loaded from local disk).

        Should fix quite a few test cases :)

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

2007-01-25 Harald Fernengel <harald@trolltech.com>

        Reviewed by zack

        Compile on platforms where qreal is not a double.

        * platform/graphics/qt/AffineTransformQt.cpp:
        (WebCore::AffineTransform::map):

2007-01-25  Zack Rusin  <zack@kde.org>

        Reviewed by Lars.

        Add wheel event handling and make explicit usage
        of the EventHandler.

        * WebCore.pro:
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::lastEventIsMouseUp):
        (WebCore::EventHandler::handleMouseUp):
        * platform/PlatformWheelEvent.h:
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::wheelEvent):
        (WebCore::ScrollViewCanvasQt::dragEnterEvent):
        (WebCore::ScrollViewCanvasQt::dragLeaveEvent):
        (WebCore::ScrollViewCanvasQt::dragMoveEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/qt/WheelEventQt.cpp: Added.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2007-01-25  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12391
        SVG containers with viewports should respect overflow when hit testing

        Take into account the overflow property when hit testing <svg>.

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

2007-01-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        fixed <rdar://problem/4808039> REGRESSION: eBay ID check never completes
        Also known as http://bugs.webkit.org/show_bug.cgi?id=11230

        * bindings/js/kjs_window.cpp:
        It's not necessary to check safeScript when doing a location.replace, .reload, or .assign
        (KJS::Location::getOwnPropertySlot):
        (KJS::LocationFunc::callAsFunction):

2007-01-25  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff and Adele.

        fixed <rdar://problem/4866655> REGRESSION: Copying out of Calculator & CIFIlterWidget is broken on 9A320

        * editing/Editor.cpp:
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        Reverting some mistakes made in r17504:
        Anything in r17503 that used to call mayDHTML* still calls canDHTML* as it was changed in r17504, where canDHTML* now calls !selectionController::isInPasswordField instead of editor::canCopy
        Anything else in r17503 that used to call mayCopy now calls (!)selectionController::isInPasswordField.

        * editing/JSEditor.cpp:
        copy via JS should be enabled as long as selection is not in a password field.  a range selection shouldn't be required. 

2007-01-24  Adele Peterson  <adele@apple.com>

        Reviewed by Brady and Oliver.

        Fix for <rdar://problem/4953504> When the keydown event changes focus, the keypress event should go to the new focused node

        Test: fast/events/keydown-keypress-focus-change.html

        * page/EventHandler.cpp:
        (WebCore::eventTargetNodeForDocument): Added for convenience.
        (WebCore::EventHandler::keyEvent): Moved from EventHandlerMac.mm.  After dispatching the keyDown event,
         recheck the target node for the keyPress event in case its changed.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::keyEvent):
          Moved the bulk of this code to EventHandler.cpp.

2007-01-24  Geoffrey Garen  <ggaren@apple.com>

        New forwarding header. No review necessary.

        * ForwardingHeaders/kjs/ustring.h: Added.

2007-01-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Migrating more drag state information to WebCore

        * page/DragController.cpp:
        * page/DragController.h:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::setDraggingImageURL):
        (WebCore::DragController::draggingImageURL):
        (WebCore::DragController::setDragOffset):
        (WebCore::DragController::dragOffset):

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12331
          REGRESSION(r18951): Selecting text in a textarea makes the page scroll

        Test: fast/events/autoscroll.html

        * rendering/RenderLayer.cpp: (WebCore::RenderLayer::autoscroll):
        Adjust position to be relative to the object's corner for the hit test, but not for the
        scrollRectToVisible call. The previous version accidentally re-used the version that was
        adjusted for the hit test.

2007-01-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix for <rdar://problem/4948128> REGRESSION: A crash occurs at 
        WebCore::Frame::view() after completing a query at mapquest.com 
        then switching to Bookmarks view

        This is just a null-check. If you are in strict mode and ask for 
        the clientWidth or clientHeight after the document was removed from 
        it's parent, we no longer have a frameView, so we have to null-
        check it. I added null checks for the FrameView in some other 
        places where it seems like we could potentially run into this 
        issue.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _rectOnScreen]):
        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * dom/Element.cpp:
        (WebCore::Element::clientWidth): Actual bug fix here!
        (WebCore::Element::clientHeight): And here!
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createJavaAppletWidget):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::windowClipRect):
        (WebCore::RenderLayer::updateOverflowStatus):
        (WebCore::frameVisibleRect):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::windowClipRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2007-01-24  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, just removing accidentally committed file.

        - removed file that shouldn't be there

        * Image Viewer/Image Viewer.aps: Removed.

2007-01-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff and Adam.

        <rdar://problem/4922655>
        http://galeri.milliyet.com.tr/ reproducibly crashes Safari
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame):
        If the frame already exists, defer the navigation so that we won't end up replacing the document
        while we're parsing it. This is similar to what setting window.location ends up doing.

2007-01-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        * Info.plist: Update copyright string.

2007-01-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <rdar://problem/4916235>
        eBay Editor: Crash occurs at WebCore::Range::startPosition() after applying ordered list styling to selected text
        <rdar://problem/4857269>
        REGRESSION: editing/execCommand/create-list-from-range-selection.html no longer works as intended
        <rdar://problem/4916583>
        eBay Editor: Removing a indent from a list item actually deletes the list item instead
        <rdar://problem/4928635>
        designMode outdent causes crash (11750)

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Fixed br insertion
        after the pruning of empty containers left over after the paragraph
        to move is removed.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand): There are
        bugs that leave the wrong number of line breaks after a deletion 
        that expands to include special elements (lists/tables).  Added 
        a workaround so that moveParagraphs can avoid these until they 
        are fixed.
        (WebCore::DeleteSelectionCommand::initializeStartEnd): Ditto.
        (WebCore::DeleteSelectionCommand::initializePositionData): Ditto.
        * editing/DeleteSelectionCommand.h:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): We used to not call exitNode for
        ancestors of a node where the next node in a pre-order traversal is 
        the ranges's pastEndNode().  This is only correct for ancestors that
        contain the end of the range.
        (WebCore::shouldEmitNewlineAfterNode): Added, we should only emit newlines
        after blocks that have VisiblePositions after them.  VisiblePosition creation
        though is too expensive to do here, what I added here is an OK substitute.
        (WebCore::shouldEmitNewlineBeforeNode): Added.  No special logic yet.
        (WebCore::TextIterator::handleNonTextNode): Call shouldEmitNewlineBeforeNode.
        (WebCore::TextIterator::exitNode): Call shouldEmitNewlineAfterNode.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode): Call
        shouldEmitNewlineAfterNode.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Changed to /usr/sbin/sysctl
        so we don't rely on people's paths.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - a couple minor tweaks to recently-changed things

        * dom/Document.h: Use HTMLHeadElement as type for the head function.
        * dom/Document.cpp: (WebCore::Document::head):

        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance): Change loop to
        a for loop and use a local variable for document.

2007-01-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Fixes DragController to allow a null target Document.
        This is encountered in new tabs/windows that have not 
        loaded any page

        * page/DragController.cpp:
        (WebCore::documentAtPoint):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::concludeDrag):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):

2007-01-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12394
        Cleanup RenderBox

        No functionality changes, just a good old fashion cleanup,
        thus no tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::setPos):
        (WebCore::RenderBox::calcBorderBoxWidth):
        (WebCore::RenderBox::calcBorderBoxHeight):
        (WebCore::RenderBox::calcContentBoxWidth):
        (WebCore::RenderBox::calcContentBoxHeight):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackgrounds):
        (WebCore::RenderBox::paintBackground):
        (WebCore::cacluateBackgroundSize):
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::getOverflowClipRect):
        (WebCore::RenderBox::getClipRect):
        (WebCore::RenderBox::containingBlockWidth):
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::dirtyLineBoxes):
        (WebCore::RenderBox::position):
        (WebCore::RenderBox::getAbsoluteRepaintRect):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        (WebCore::RenderBox::repaintDuringLayoutIfMoved):
        (WebCore::RenderBox::relativePositionOffsetX):
        (WebCore::RenderBox::relativePositionOffsetY):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        (WebCore::RenderBox::calcHorizontalMargins):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::availableHeightUsing):
        (WebCore::RenderBox::calcVerticalMargins):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::caretRect):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setOverrideSize):
        (WebCore::RenderBox::width):
        (WebCore::RenderBox::height):
        (WebCore::RenderBox::setWidth):
        (WebCore::RenderBox::setHeight):
        (WebCore::RenderBox::inlineBoxWrapper):
        (WebCore::RenderBox::setInlineBoxWrapper):
        (WebCore::RenderBox::stretchesToViewHeight):
        (WebCore::RenderBox::setStaticX):
        (WebCore::RenderBox::setStaticY):

2007-01-24  Eric Seidel  <eric@webkit.org>

        Reviewed by ap.

        Converted SVGTransform from being Shared<T> to a POD type.

        No functional changes, thus no tests.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::baseValueTransformList):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::storeInitialValue):
        (WebCore::SVGAnimateTransformElement::resetValues):
        (WebCore::SVGAnimateTransformElement::updateCurrentValue):
        (WebCore::SVGAnimateTransformElement::handleStartCondition):
        (WebCore::SVGAnimateTransformElement::applyAnimationToValue):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternProperties):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGTransform):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::updateLocalTransform):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::updateLocalTransform):
        * ksvg2/svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::isValid):
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransform.idl:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::SVGTransformList):
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::consolidate):
        (SVGTransformList::concatenate):
        * ksvg2/svg/SVGTransformList.h:
        * ksvg2/svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):

2007-01-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Plug another bunch of SVG memory leaks.

        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions): Delete memory we have allocated.
        (WebCore::SVGDocumentExtensions::removePendingResource): Return an auto_ptr to show that we are transferring ownership.
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument): Update for use of auto_ptr.

2007-01-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady.

        Plug thousands of node leaks seen running layout tests.

        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::~SVGElementInstance): Disassociate ourselves from our children so they will
        be destroyed if we were the only thing referencing them.
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFromDocument):
        * ksvg2/svg/SVGUseElement.h:

2007-01-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        minor change.  removing unnecessary call to frame to fetch editor

2007-01-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=12375
        Bug 12375: REGRESSION(r19038): fast/dom/title-text-property-2.html failing

        Fix regression by making setTitle/updateTitle/removeTitle logic match document.title
        specification at http://whatwg.org/specs/web-apps/current-work/#the-title1.

        * dom/Document.cpp:
        (WebCore::Document::setTitle): Materialize a title element into the head if one doesn't exist when setting
        document.title.  Also update the contents of the title element when the title is set via document.title.
        (WebCore::Document::removeTitle): Update the title based on first title element in the head, if one exists.
        (WebCore::Document::head): Convenience method to retrieve the head element in an HTML document.
        * dom/Document.h:

2007-01-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Follow-up to the fix below for 4843226.

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox): Has to be recursive or we will miss 
        out on grandchildren!

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fixes dropping of files into safari

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2007-01-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Added a couple of CF things previously missed

        * platform/network/ResourceError.h:
        * platform/network/ResourceHandle.h:

2007-01-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix evil genericContext() assertion, which occours sometimes when running DRT.
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12379

        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::genericContextMap):
        (WebCore::SVGDocumentExtensions::forgetGenericContext):

2007-01-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4843226> REGRESSION: Pull down menu appears 
        clipped at http://istweb.apple.com/

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox): Always unite with sibling rects.

2007-01-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4920742>
        REGRESSION: GMail Editor: Attempting to remove formatting from selection results in a crash at WebCore::Range::checkDeleteExtract()

        * dom/Range.cpp:
        (WebCore::Range::checkDeleteExtract): Return if there is no
        commonAncestor container or if commonAncestorContainer() throws
        an exception.
        * editing/Editor.cpp:
        (WebCore::Editor::removeFormattingAndStyle): Fixed a bug that reversed
        the order of the selected paragraphs.

2007-01-23  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Fix dynamic creation/updates of markers, masks, clipPaths, and several tiny pattern issues.
        Added 16 (!) new layout tests covering quite some weird scenerios - Batik & Opera do have problems, we don't.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12380
        Fixes: svg/custom/image-with-transform-clip-filter.svg (filter shows up again)

        Added: svg/custom/clip-path-child-changes.svg
        Added: svg/custom/clip-path-href-changes.svg
        Added: svg/custom/clip-path-units-changes.svg
        Added: svg/custom/deep-dynamic-updates.svg
        Added: svg/custom/js-late-clipPath-and-object-creation.svg
        Added: svg/custom/js-late-clipPath-creation.svg
        Added: svg/custom/js-late-marker-and-object-creation.svg
        Added: svg/custom/js-late-marker-creation.svg
        Added: svg/custom/js-late-mask-and-object-creation.svg
        Added: svg/custom/js-late-mask-creation.svg
        Added: svg/custom/js-update-pattern-child.svg
        Added: svg/custom/marker-changes.svg
        Added: svg/custom/marker-child-changes.svg
        Added: svg/custom/marker-viewBox-changes.svg
        Added: svg/custom/mask-changes.svg
        Added: svg/custom/mask-child-changes.svg

        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        (WebCore::SVGMarkerElement::notifyAttributeChange):
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::notifyAttributeChange):
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::notifyResourceParentIfExistant):
        (WebCore::SVGStyledElement::rebuildRenderer):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::addClient):
        (WebCore::SVGResource::repaintClients):
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        (WebCore::SVGResourceMarker::cachedBounds):
        * platform/graphics/svg/SVGResourceMarker.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::getAbsoluteRepaintRect):
        (WebCore::RenderPath::paint):
        (WebCore::drawMarkerWithData):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::getAbsoluteRepaintRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::paintSVGInlineFlow):

2007-01-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.
        
        WebCore part of fix for <rdar://problem/4946753>REGRESSION: Inserting tabs is broken in Mail

        In addition to this fix, I also reorganized some event handling code for keyPress events to
        prepare for another fix.  There's also just a little bit of unrelated cleanup.
        
        * dom/EventTargetNode.cpp: (WebCore::EventTargetNode::defaultEventHandler):
          Move tab focus behavior into new defaultKeyboardEventHandler method.
        
        * bridge/EditorClient.h: Added handleKeyPress.
        * editing/Editor.cpp:
        (WebCore::Editor::handleKeyPress): Added. Calls over to the client method.
        (WebCore::Editor::deleteRange): Removed unnecessary propogateDOMException.
        * editing/Editor.h: Added handleKeyPress.
        (WebCore::Editor::addToKillRing): Formatting cleanup.
        * editing/mac/EditorMac.mm: Removed unnecessary propogateDOMException.
        
        * page/EventHandler.cpp: (WebCore::EventHandler::defaultKeyboardEventHandler): Added. Checks
          the tabKeyCyclesThroughElements setting before advancing focus for tab key events.  Calls handleKeyPress.
        * page/EventHandler.h: Added defaultKeyboardEventHandler.
        
        * page/Page.cpp: (WebCore::Page::Page): Initialize m_tabKeyCyclesThroughElements to true.
        * page/Page.h: Added m_tabKeyCyclesThroughElements.
        (WebCore::Page::setTabKeyCyclesThroughElements): Added.
        (WebCore::Page::tabKeyCyclesThroughElements): Added.
        
        * platform/PlatformKeyboardEvent.h: Added ability to get NSEvent from PlatformKeyboardEvent.
        * platform/mac/KeyEventMac.mm: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
          Initialize m_macEvent to the NSEvent.
        
        * platform/graphics/svg/SVGImageEmptyClients.h: (WebCore::SVGEmptyEditorClient::handleKeyPress): Added.

2007-01-23  George Staikos  <staikos@kde.org>

        Compile with a released Qt.

        * platform/graphics/qt/ImageQt.cpp:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Widget and ScrollView do not own the Qt widgets
        anymore. Make sure they can handle the case of
        a null QWidget and never delete them.

        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::setScrollArea):
        (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::scrollOffset):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollbarMode):
        (WebCore::ScrollView::vScrollbarMode):
        (WebCore::ScrollView::setHScrollbarMode):
        (WebCore::ScrollView::setVScrollbarMode):
        * platform/qt/WidgetQt.cpp:
        (WebCore::WidgetPrivate::~WidgetPrivate):
        (WebCore::Widget::setQWidget):

2007-01-23  Zack Rusin  <zack@kde.org>

        Forgot to add one new file to the build.

        * WebCore.pro: Add dom/clipboard.cpp

2007-01-23  Zack Rusin  <zack@kde.org>

        Fix the Qt build

        * page/DragActions.h:
        * page/DragController.cpp:
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/qt/FileChooserQt.cpp:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Make the last remaining pieces of the FrameLoader platform 
        independent. Move most of the code over to WebFrameLoaderClient.
        Some smaller cleanups in the WebFrameBridge, and moved some
        platform independent functionality over to the shared code
        in WebCore.
        
        * WebCore.exp:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::shouldUsePlugin):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::partClearedInBegin):
        (WebCore::FrameLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::didChangeTitle):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        (WebCore::):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * loader/mac/FrameLoaderMac.mm: Removed.
        * loader/qt/FrameLoaderQt.cpp: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/FrameView.cpp:
        (WebCore::FrameView::mediaType):
        * page/qt/FrameQt.cpp:
        (WebCore::FrameQt::FrameQt):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::makeRepresentation):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCommitLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoad):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchCreatePage):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchUnableToImplementPolicy):
        (WebCore::SVGEmptyFrameLoaderClient::revertToProvisionalState):
        (WebCore::SVGEmptyFrameLoaderClient::setMainDocumentError):
        (WebCore::SVGEmptyFrameLoaderClient::startDownload):
        (WebCore::SVGEmptyFrameLoaderClient::committedLoad):
        (WebCore::SVGEmptyFrameLoaderClient::shouldFallBack):
        (WebCore::SVGEmptyFrameLoaderClient::willUseArchive):
        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):
        (WebCore::SVGEmptyFrameLoaderClient::createFrame):
        (WebCore::SVGEmptyFrameLoaderClient::createPlugin):
        (WebCore::SVGEmptyFrameLoaderClient::createJavaAppletWidget):
        (WebCore::SVGEmptyFrameLoaderClient::objectContentType):
        (WebCore::SVGEmptyFrameLoaderClient::overrideMediaType):
        (WebCore::SVGEmptyFrameLoaderClient::redirectDataToPlugin):
        (WebCore::SVGEmptyFrameLoaderClient::windowObjectCleared):

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Added DragController to handled drag and drop state and control logic.
        Currently this only handles logic for Dragging and Dropping, and is 
        unable to initialise a drag itself.

        platform/DragData encapsulate the paltform Drag data (NSDraggingInfo on Mac, 
        QMimeType in Qt).  This provides methods to pull data out the drag data as a String, 
        a URL, a DocumentFragment (for rich content), or a Colour.

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Clipboard.cpp: Added.
        (WebCore::Clipboard::setAccessPolicy):
        (WebCore::dragOpFromIEOp):
        (WebCore::IEOpFromDragOp):
        (WebCore::Clipboard::sourceOperation):
        (WebCore::Clipboard::destinationOperation):
        (WebCore::Clipboard::setSourceOperation):
        (WebCore::Clipboard::setDestinationOperation):
        (WebCore::Clipboard::setDropEffect):
        (WebCore::Clipboard::setEffectAllowed):
          move platform independent functions from ClipboardMac to Clipboard

        * dom/Clipboard.h:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::dropEffect):
        (WebCore::Clipboard::effectAllowed):
        (WebCore::Clipboard::policy):
          as above -- also removed virtual modifier from now 
          platform independent methods

        * editing/Editor.cpp:
        (WebCore::Editor::smartInsertDeleteEnabled): 
        (WebCore::Editor::shouldApplyStyle):
        * editing/Editor.h:
          adding calls through to EditorClient
         
        * page/DragActions.h: Added.
        (WebCore::):
          Replicates a number of NS* enums in the WebCore namespace

        * page/DragClient.h: Added.
        (WebCore::DragClient::~DragClient):
          Standard client interface for dragging UIDelegate

        * page/DragController.cpp: Added.
        (WebCore::createMouseEvent):
        (WebCore::DragController::DragController):
        (WebCore::DragController::~DragController):
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::isMoveDrag):
        (WebCore::visiblePositionForPoint):
        (WebCore::DragController::cancelDrag):
        (WebCore::documentAtPoint):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::concludeDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
          Class to handle state and logic for dragging and dropping

        * page/DragController.h: Added.
        (WebCore::DragController::client):
        (WebCore::DragController::didInitiateDrag):
        (WebCore::DragController::isHandlingDrag):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::document):
        (WebCore::DragController::dragInitiator):
        (WebCore::DragController::dragDestinationAction):
        (WebCore::DragController::dragSourceAction):
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::setIsHandlingDrag):
        (WebCore::DragController::setDidInitiateDrag):
        (WebCore::DragController::setDragOperation):
        (WebCore::DragController::setDragSourceAction):
        (WebCore::DragController::setDragInitiator):
          See above

        * page/Page.cpp:
        (WebCore::Page::Page):
          Update Page to have DragController

        * page/Page.h:
        (WebCore::Page::dragController):
          ditto

        * page/mac/DragControllerMac.mm: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
          Platform specific portions of the DragController

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::dragSourceEndedAt):
          Convert from NSDragOperation to WebCore::DragOperation

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
          Remove obsolete Drag functions

        * page/qt/DragControllerQt.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
          Basic stubs to maintain Qt  build

        * platform/DragData.cpp: Added.
        (WebCore::DragData::DragData):
        * platform/DragData.h: Added.
        (WebCore::DragData::clientPosition):
        (WebCore::DragData::globalPosition):
        (WebCore::DragData::platformData):
        (WebCore::DragData::draggingSourceOperationMask):
          DragData class to encapsulate platform drag data/event

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
          Addition of dummy DragClient

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::~SVGEmptyDragClient):
        (WebCore::SVGEmptyDragClient::willPerformDragDestinationAction):
        (WebCore::SVGEmptyDragClient::actionMaskForDrag):
        (WebCore::SVGEmptyDragClient::dragControllerDestroyed):
          ditto

        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::clearData):
        (WebCore::ClipboardMac::clearAllData):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::setDragImage):
         Moving platform independent logic to Clipboard, and updating
         platform specific methods to use appropriate accessors rather than 
         directly manipulating data they no longer own

        * platform/mac/DragDataMac.mm: Added.
        (WebCore::DragData::DragData):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::imageExistsAtPaths):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
          Mac implementations of DragData methods.  A number of these use
          a Helper class that accesses WebKit functionality.  That functionality 
          should be migrated to WebCore in the future.

        * platform/mac/PasteboardHelper.h: Added.
        (WebCore::PasteboardHelper::~PasteboardHelper):
          Temporary, and Mac only, helper class to access WebKit functionality 
          from WebCore

        * platform/qt/DragDataQt.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
         Basic stubs to maintain Qt build

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
         Correct HitTestResult copy contructor to copy localPoint

2007-01-22  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11692
        Bug 11692: REGRESSION(r17352): Disappearing page title

        * dom/Document.cpp:
        (WebCore::Document::setTitle): If the title has already been set explicitly via JavaScript,
        ignore any changes to it due to encountering <title> tags.

2007-01-22  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12344
          NativeListBox: item hit testing does not account for top padding and border

        Test: fast/forms/listbox-selection-2.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::numVisibleItems): Changed height() to contentHeight()
        since items are visible only in the content box.
        (WebCore::RenderListBox::listIndexAtOffset): Adjusted for vertical padding and
        borders. Changed to return -1 instead of the last item's index if the given offset
        is below the last item.
        (WebCore::RenderListBox::autoscroll): Adjusted for vertical padding and borders.
        (WebCore::RenderListBox::controlClipRect): Changed to return the content box since
        items should not spill into the padding box. This change is the reason the test
        generates pixel results.

2007-01-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4944770>
        editing/pasteboard/4641033 layout test is broken (12328)
        
        This layout test failure demonstrates three bugs:
        Smart replace shouldn't be turned on, but is because a word
        selection granularity from the previous test isn't cleared.
        Smart replace shouldn't add any spaces because the paste is performed
        in an empty paragraph.
        Smart replace spaces are added to the text of options inside
        the select element instead of before/after the select element.
        
        This patch fixes the second two problems.  During a 
        ReplaceSelectionCommand, the VisiblePosition for the end of 
        the inserted content is the last position in the last leaf 
        inserted.  This is a problem when the last leaf is inside a 
        select element, since VP creation is inconsistent there.  
        Second, smart spaces were inserted inside the last leaf, not
        at the endOfInsertedContent.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): Renamed 
        m_lastNodeInserted to m_lastLeafInserted.  Use the 
        start/endOfInsertedContent getters.
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd): Ditto.
        (WebCore::ReplaceSelectionCommand::removeNodePreservingChildren): Ditto.
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Ditto.
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent): Added.
        Special case for when the last leaf inserted is inside a select 
        element: return the VisiblePosition after the select element.
        (WebCore::ReplaceSelectionCommand::positionAtStartOfInsertedContent): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Did renaming.  Used
        the start/endOfInsertedContent getters.  Insert smart replace spaces
        into the right nodes.
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR): Renaming.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
        (WebCore::ReplaceSelectionCommand::updateNodesInserted): Ditto.
        * editing/ReplaceSelectionCommand.h:

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12273
          REGRESSION: File input value invisible after removing and re-appending

        - made more of the file chooser code cross-platform

        - fixed an Objective-C garbage collection problem in FileChooser

        - tried to remove layering violations where FileChooser in the platform
          directory knows about the rendering and DOM trees (but wasn't able to
          do it entirely)

        * platform/FileChooser.cpp: Added.
        (WebCore::FileChooser::create): Changed parameters.
        (WebCore::FileChooser::chooseFile): Changed to call chooseIcon function.
        (WebCore::FileChooser::chooseIcon): Added.

        * platform/FileChooser.h: Added FileChooserClient so this file doesn't have
        to know about RenderFileUploadControl. Used RetainPtr instead of retain/release
        so this works properly with Objective-C GC. Replaced disconnectUploadControl
        with disconnectClient, which has a simple inline implementation. Moved the
        Document parameter from the constructor to openFileChooser, along with a comment
        about why it should not be there. Added a filename parameter to the constructor
        for the initial filename. Added a font parameter to basenameForWidth so we don't
        depend on having a pointer to the renderer. Removed the uploadControl() and
        document() functions since no one calls either of them.

        * platform/mac/FileChooserMac.mm: Removed code that is now cross-platform.
        (-[OpenPanelController beginSheetWithFrame:]): Added frame parameter, instead
        of storing a document pointer in the FileChooser.
        (WebCore::FileChooser::FileChooser): Updated for changed parameters. Also added
        code to choose the icon based on the initial filename. Pass the adopt parameter
        to the constructor of the RetainPtr.
        (WebCore::FileChooser::~FileChooser): Removed the release call, since the
        RetainPtr will take care of it. Added a call to disconnectFileChooser here.
        There's no need to disconnect at disconnectClient time, and that lets us have
        one more cross-platform function.
        (WebCore::FileChooser::openFileChooser): Added document parameter. Added code
        to get the frame from the document. And added a nil check since there's no
        ironclad guarantee the document won't have outlived its frame.
        (WebCore::FileChooser::basenameForWidth): Added font parameter. Use that instead
        of going at the upload control's style. The caller can handle that now.

        * rendering/RenderFileUploadControl.h: Removed unnecessary includes.
        Made class inherit privately from FileChooserClient. Changed constructor
        parameter to HTMLInputElement rather than Node. Made protected members be
        private instead, and made a couple function members const.
        * rendering/RenderFileUploadControl.cpp: Moved constants to the top of the file,
        but after the "using namespace"
        (WebCore::RenderFileUploadControl::RenderFileUploadControl): Updated for changes
        to the FileChooser::create function and the parameter types.
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl): Removed unneeded
        null check -- there's no case where the FileChooser fails to be created.
        (WebCore::RenderFileUploadControl::click): Pass document to openFileChooser.
        (WebCore::RenderFileUploadControl::updateFromElement): Tweaked code a bit by
        using updateFromElement and setValue instead of casting the renderer to a
        RenderButton and calling setText directly. Put setInputType call here.
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Made const. Broke long line.
        (WebCore::RenderFileUploadControl::createButtonStyle): Made const.
        (WebCore::RenderFileUploadControl::paintObject): Moved buttonShadowHeight constant
        to the top of the file. Call isEmpty instead of checking width and height of
        IntRect for 0. Computed font to pass to FileChooser::basenameForWidth. Broke
        long lines.
        (WebCore::HTMLFileUploadInnerButtonElement::HTMLFileUploadInnerButtonElement):
        Moved the setInputType call to the caller; concept here is that this class is
        as simple as possible, rather than doing as much of the button job as possible.

        * WebCore.xcodeproj/project.pbxproj: Added FileChooser.cpp.
        * WebCore.pro: Ditto.
        * CMakeLists.txt: Ditto.
        * WebCoreSources.bkl: Ditto.

        * platform/gdk/TemporaryLinkStubs.cpp: Updated stubs.
        * platform/qt/FileChooserQt.cpp: Updated stubs.

2007-01-22  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12364
          REGRESSSION (NativeListBox): Selected option's background is not clipped to the list box

        Test: fast/forms/select-item-background-clip.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemBackground): Intersect the item's rect with
        the list box's clip rect.

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12369
          REGRESSION (r19027): amazon.com home page crashes WebKit r19028 debug build

        I caused this a few hours ago. Oops!

        * rendering/RenderText.cpp: (WebCore::RenderText::setStyle):
        Compute whether the font changed before calling RenderObject::setStyle.

2007-01-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4912129> REGRESSION: Crash occurs at 
        WebCore::Frame::eventHandler() after clicking to dismiss a 
        contextual menu on the page

        * page/EventHandler.cpp:
        (WebCore::EventHandler::stopAutoscrollTimer): Added nil-check.

2007-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        Inspired by a much simpler patch by Andrew Wellington <proton@wiretapped.net>.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11197
          REGRESSION: Specifying a counter for a CODE tag's content style property
          on before or after causes a crash.

        Test: fast/css/beforeSelectorOnCodeElement.html

        - fix regression I recently introduced where the monospace cache could be
          used for text that was not ASCII, if text was changed after the style was set

        Test: fast/text/monospace-width-cache.html

        - streamline RenderText.h -- remove unneeded functions, make some needlessly
          virtual functions non-virtual, remove unneeded header includes, replace use
          of Font* with Font& for consistency with RenderStyle, use "text" consistently
          instead of "string"

        * rendering/RenderText.h: Removed unneeded include of "Text.h", declarations of
        SOFT_HYPHEN, DocumentMarker, InlineBox, Position, String. Got rid of friend
        declaration for InlineTextBox. Changed constructor to take a PassRefPtr since
        we do take owership of the passed-in text. Made deleteTextBoxes() private.
        Removed unneeded data(). Made override of length() private so people will use
        the faster textLength() instead. Renamed string() to text() so it matches up
        better with setText(). Same for stringLength(), originalString(), and
        setInternalString(), which are now textLength(), originalText(), and
        setTextInternal(). Renamed the old text() function to characters(), since it
        returns a pointer as StringImpl::characters does. Changed Font* to Font& everywhere.
        Renamed the internal calcMinMaxWidth() function to calcMinMaxWidthInternal() and
        made it non-virtual since it's not overriden anywhere. Also made the
        trimmedMinMaxWidth() function non-virtual. Made containsOnlyWhitespace() private.
        Removed both font() functions (one was needlessly virtual) and element().
        Renamed cacheWidths() to updateMonospaceCharacterWidth() and removed the
        shouldUseMonospaceCache() function. Renamed allAscii() to isAllASCII() and made
        it an inline function. Removed the m_allAsciiChecked flag and renamed the
        m_allAscii flag to m_isAllASCII.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText): Removed initialization of m_allAsciiChecked.
        Initialize m_isAllASCII. Changed all occurrences of m_str->length() and
        m_str->characters () to use the stringLength() and characters() inline functions
        instead.
        (WebCore::RenderText::setStyle): Replaced the unconditional call to cacheWidths
        with a conditional call to updateMonospaceCharacterWidth. This speeds up the common
        case where style is changed without changing the font.
        (WebCore::RenderText::originalText): Changed code to not depend on overridden
        element() function with casts to a Text node -- this was one of only two call sites.
        Also renamed.
        (WebCore::RenderText::positionForCoordinates): Name change.
        (WebCore::RenderText::caretRect): Ditto.
        (WebCore::RenderText::updateMonospaceCharacterWidth): Renamed from cacheWidths and
        incorporate the check that was formerly in a separate shouldUseMonospaceCache
        function.
        (WebCore::RenderText::widthFromCache): Changed to take a Font& instead of Font*.
        Changed to take advantage of the fact that the string is known to be all ASCII in
        the m_monospaceCharacterWidth code path.
        (WebCore::RenderText::trimmedMinMaxWidth): Ditto. Also use style()->font() instead
        of font(false).
        (WebCore::RenderText::calcMinMaxWidth): Ditto. Also changed to use softHyphen instead
        of SOFT_HYPHEN.
        (WebCore::RenderText::containsOnlyWhitespace): More of the same.
        (WebCore::RenderText::setSelectionState): Ditto.
        (WebCore::RenderText::setTextWithOffset): Ditto.
        (WebCore::isInlineFlowOrEmptyText): Ditto.
        (WebCore::RenderText::setTextInternal): Updated for name changes. Also changed to
        set the m_isAllASCII flag every time, in the more-efficient way we use elsewhere
        (or'ing all the characters together), and to call updateMonospaceCharacterWidth
        if the "all ASCII"-ness of the text changes.
        (WebCore::RenderText::setText): Updated for name changes.
        (WebCore::RenderText::width): More like above.
        (WebCore::RenderText::selectionRect): Ditto.
        (WebCore::RenderText::caretMaxOffset): Ditto.
        (WebCore::RenderText::previousOffset): Ditto.
        (WebCore::RenderText::nextOffset): Ditto.

        * dom/Position.cpp:
        * dom/Range.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/VisiblePosition.cpp:
        * html/HTMLElement.cpp:
        Added now-needed include of "Text.h" which is no longer included by "RenderText.h".

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::debugRenderer):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        Update for name changes of stringLength(), string(), and originalString() to
        textLength(), text(), and originalText(), and to always use textLength() instead
        of length() when we have a RenderText* rather than a RenderObject*.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Ditto.
        (WebCore::endOfParagraph): Ditto.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Ditto. Also removed use of the
        RenderObject::font() function and replaced it with explicit access to the style.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Ditto.
        (WebCore::InlineTextBox::isLineBreak): Ditto.
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::selectionStartEnd): Ditto.
        (WebCore::InlineTextBox::paintSelection): Ditto.
        (WebCore::InlineTextBox::paintMarkedTextBackground): Ditto.
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::offsetForPosition): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild): Ditto.
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText): Ditto.
        (WebCore::RenderCounter::calcMinMaxWidth): Ditto.
        * rendering/RenderCounter.h: Ditto.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText): Ditto.
        * rendering/RenderTextFragment.h: Ditto.
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::placePositionedBoxesHorizontally): Ditto.
        (WebCore::placeBoxesVerticallyWithAbsBaseline): Ditto.
        * rendering/bidi.cpp:
        (WebCore::BidiIterator::increment): Ditto.
        (WebCore::BidiIterator::current): Ditto.
        (WebCore::BidiIterator::direction): Ditto.
        (WebCore::addRun): Ditto.
        (WebCore::checkMidpoints): Ditto.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Ditto.
        (WebCore::RenderBlock::skipWhitespace): Ditto.
        (WebCore::RenderBlock::findNextLineBreak): Ditto.

        * rendering/RenderBR.h: Updated signature of width function which now takes a
        Font& instead of a Font*.

        * rendering/RenderBlock.cpp: (WebCore::stripTrailingSpace): Updated to no longer
        use the RenderObject::font() function, and added a comment about first-line, which
        is not handled properly here.

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::text):
        * rendering/RenderTreeAsText.cpp: (WebCore::writeTextRun):
        Eliminated use of RenderText::data().

        * rendering/RenderObject.h: Removed RenderObject::font(). This had the bad effect of
        having everyone pass in a boolean rather than using the cleaner style() and
        firstLineStyle() functions in cases where there's no a firstLineStyle boolean.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getVerticalPosition): Replaced use of RenderObject::font()
        with direct use of the style instead, which is arguably easier to understand anyway.
        (WebCore::RenderObject::baselinePosition): Ditto.

2007-01-22  Sam Weinig  <sam@webkit.org>

        Reviewed by The Mitz.

        Move JSHTMLSelectElementCustom.cpp from bindings to bindings/js
        where it belongs.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/JSHTMLSelectElementCustom.cpp: Removed.
        * bindings/js/JSHTMLSelectElementCustom.cpp: Added.

2007-01-22  Zack Rusin  <zack@kde.org>

        Fix the Qt build.

        * WebCore.pro: adjust after last changes

2007-01-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10934
        REGRESSION: prototype.js logs error (HTMLFormElement) on webkit builds

        Added constructors for most HTML elements; started auto-generating HTMLSelectElement JS binding.

        Test: fast/dom/Window/element-constructors-on-window.html

        * DerivedSources.make: Generate JSHTMLSelectElement.
        * WebCore.xcodeproj/project.pbxproj: Added JSHTMLSelectElement{Custom}.
        * bindings/js/JSHTMLElementWrapperFactory.cpp: Create a proper binding for SELECT.

        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::put):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Removed everything related to SELECT. Renamed getHTMLOptionsCollection to toJS for autogenerated code 
        to be happy, and rewrote it using cacheDOMObject.

        * bindings/scripts/CodeGeneratorJS.pm: Added HTMLElement to the list of types that cannot fail conversion.

        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:
        Generate constructors.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::length):
        * html/HTMLSelectElement.h:
        Make length() return unsigned for auto-generated code to be happy.

        * html/HTMLSelectElement.idl: Adjusted to be usable for JS.

        * bindings/JSHTMLSelectElementCustom.cpp: Added. Implements remove().

        * page/DOMWindow.idl:
        Added properties for most elements' constructors.

2007-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12357
        Bug 12357: Reproducible crash in WebCore::Settings::isJavaScriptEnabled in svg/custom/js-update-bounce.svg under guard-malloc

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Access the global object directly rather than via Window::retrieveWindow to prevent our reference to
        a deleted settings object being used.

2007-01-21  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/4930503> REGRESSION: Page changes title when
          command-clicking on named anchor link (12299)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        Return if shouldContinue is false. This matches the other similar
        functions and prevents us from doing extra work in the "ignore" case.

2007-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12355
        Bug 12355: Reproducible crash in WebCore::parseNumber in svg/custom/js-update-bounce.svg under guard-malloc

        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber): Parenthesize to prevent reading past end of buffer.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12345
          REGRESSION: Disabled pop-up text is not grayed out

        Test: fast/forms/select-disabled-appearance.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):

2007-01-21  Darin Adler  <darin@apple.com>

        - fix non-Mac builds

        * CMakeLists.txt: Added JSDocumentCustom.cpp.
        * WebCore.pro: Ditto.
        * WebCoreSources.bkl: Ditto.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12353 <rdar://problem/4944599>
          REGRESSION: Crash on load (mutation event dispatch under the image element constructor deletes the element)
    
        Test: fast/dom/HTMLImageElement/constructor-mutation-event-dispatch.html

        * bindings/js/kjs_html.cpp:
        (KJS::ImageConstructorImp::construct): Protect the image element before setting
        its attributes.

2007-01-21  Sam Weinig  <sam@webkit.org>

        Rolling out patch for http://bugs.webkit.org/show_bug.cgi?id=8360.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::Marquee::start):
        * rendering/RenderLayer.h:

2007-01-21  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12280
          select element not available by name through document.all
          (dropdown list not available on smarthome.com checkout)

        Test: fast/dom/document-all-select.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        (WebCore::HTMLCollection::updateNameCache):

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=10805
          REGRESSION (r15720): manual-tests/onblur-remove.html failing

        * manual-tests/onblur-remove.html: Changed the test to not require pressing
        Enter, since the correct behavior for Enter is to send a blur event.

2007-01-21  Sanjay Madhav  <sanjay12@gmail.com>

        Reviewed by Darin.

        Fix for: <rdar://problem/4928583> Memory usage grows when reloading google.com/ig

        JSDocuments are now responsible for marking the DOM wrappers associated with them, when they get marked.
        This fixes a JS object leak when a DOM wrapper has a reference to a JSDocument that is otherwise not reachable.

        Test: fast/dom/gc-10.html

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDocumentCustom.cpp: Added.
        (WebCore::JSDocument::mark):
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        (KJS::ScriptInterpreter::mark):
        * bindings/js/kjs_binding.h:
        * dom/Document.idl:

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10692
          REGRESSION (r14847): Unnecessary scrollbars with position:relative; and overflow:auto;

        Test: fast/overflow/position-relative.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::lowestPosition): Add the relative position offset only
        if 'includeSelf' is true.
        (WebCore::RenderBox::rightmostPosition): Ditto.
        (WebCore::RenderBox::leftmostPosition): Ditto.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lowestPosition): Ditto.
        (WebCore::RenderFlow::rightmostPosition): Ditto.
        (WebCore::RenderFlow::leftmostPosition): Ditto.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=10472
          REGRESSION: "add" method of <select> object does not put the <option> object in the correct position

        Test: fast/dom/HTMLSelectElement/options-collection-detached.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setRecalcListItems): Reset the options collection
        info if the <select> is not in the document. For in-document <select>s this
        happens anyway as a result of the DOM tree version increasing.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12349
          NativeFileUpload: Button text is not grayed out when the control is disabled

        Covered by fast/forms/file-input-disabled.html 

        * css/html4.css: Changed selectors that had pseudo-classes after the -webkit-file-upload-button
        pseudo-element to have the pseudo-element at the end. Pseudo-elements must be at the end.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::createButtonStyle): Changed to not overwrite the button's
        style with its parent's style. getPseudoStyle() handles inheritance properly.

2007-01-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12343
          crash in css2.1/t1202-counter-09-b.html

        * platform/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):

2007-01-21  Darin Adler  <darin@apple.com>

        Reviewed by Adam and Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12347
          REGRESSION: list box scrolling broken (fast/forms/listbox-selection.html)

        Covered by existing test: fast/forms/listbox-selection.html

        * rendering/RenderListBox.h: Added override of layout(), made selectionChanged()
        no longer an inline. Added private scrollToRevealSelection(),
        m_scrollToRevealSelectionAfterLayout, and m_inAutoscroll.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox): Initialize new data members.
        (WebCore::RenderListBox::updateFromElement): Remove scrolling code.
        (WebCore::RenderListBox::selectionChanged): Moved from header. Calls repaint
        and then scrollToRevealSelection, but if we need layout, instead schedules
        scrollToRevealSelection to be done after layout.
        (WebCore::RenderListBox::layout): Added. After calling base class, calls
        scrollToRevealSelection if the m_scrollToRevealSelectionAfterLayout is set.
        (WebCore::RenderListBox::scrollToRevealSelection): Added. Code was originally
        in updateFromElement.
        (WebCore::RenderListBox::autoscroll): Set m_inAutoscroll so that the
        selectionChanged function knows not to scroll. Also removed the repaint()
        here because updateListBoxSelection() takes care of repainting by calling
        selectionChanged().

2007-01-21  David Kilzer  <ddkilzer@webkit.org>

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Changed #if SVG_SUPPORT to #ifdef SVG_SUPPORT.

2007-01-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11115
          REGRESSION: Crash on Flickr after hitting cancel from adding a note

        Test: fast/forms/text-set-value-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): Added a call to Document::updateRendering().
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue): Ditto.

2007-01-20  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8360
          Repro crash when onscroll handler deletes the scrolled object

        Test: fast/layers/removed-by-scroll-handler.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::dispatchScrollEvent): Added. Called when the timer
        fires and dispatches the scroll event to the layer's element.
        (WebCore::RenderLayer::scrollToOffset): Instead of dispatching the scroll
        event from this function, which is called during layout, schedule a 0-duration
        timer to dispatch the event after layout.
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::Marquee::start):
        * rendering/RenderLayer.h:

2007-01-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Fix JS bindings for SVGAnimated{Boolean, Enumeration, Integer, Number, String}.

        Dynamic SVG DOM updates (ie. "someUse.href.baseVal = '#rect'") with these types
        didn't work. Existing gradient updating examples relied on calling setAttribute
        after a SVG DOM update - that was the only reason it worked, added a new test
        only using SVG DOM updates (js-update-stop.svg).

        Added test: js-update-stop.svg
        Added test: use-property-changes-through-dom.svg (change xlink:href, x/y attributes using setAttribute)
        Added test: use-property-changes-through-svg-dom.svg (change xlink:href, x/y attributes using SVG DOM)

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGPODTypeWrapper::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreator::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::commitChange):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::updatePathSegContextMap):
        (WebCore::removeFromPathSegContextMap):
        * bindings/scripts/CodeGeneratorJS.pm:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::baseValueMap):
        (WebCore::SVGDocumentExtensions::genericContextMap):
        (WebCore::SVGDocumentExtensions::baseValue):
        (WebCore::SVGDocumentExtensions::setBaseValue):
        (WebCore::SVGDocumentExtensions::removeBaseValue):
        (WebCore::SVGDocumentExtensions::hasBaseValue):
        (WebCore::SVGDocumentExtensions::genericContext):
        (WebCore::SVGDocumentExtensions::setGenericContext):
        (WebCore::SVGDocumentExtensions::removeGenericContext):
        (WebCore::SVGDocumentExtensions::hasGenericContext):
        (WebCore::String):
        (WebCore::FloatRect):
        (WebCore::bool):
        (WebCore::double):
        * ksvg2/svg/SVGClipPathElement.h:
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::SVGPathSegList):
        (WebCore::SVGPathSegList::context):
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPointList.cpp:
        (SVGPointList::SVGPointList):
        (SVGPointList::context):
        * ksvg2/svg/SVGPointList.h:
        * ksvg2/svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseMappedAttribute):
        (WebCore::SVGStopElement::notifyAttributeChange):
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyAttributeChange):

2007-01-20  Rob Buis  <buis@kde.org>

        Reviewed by Sam.

        http://bugs.webkit.org/show_bug.cgi?id=12334
        Respect <text> boundaries for svg text selecting

        Make sure the text selection for svg stays inside
        containing blocks.
        Added one manual test since html selection does not
        seem to work for SVG and selectSubString for SVG
        is not implemented yet.

        * manual-tests/svg-text-selection.svg: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGText):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::isSVGText):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::isSVGText):

2007-01-19  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for: <rdar://problem/4697438> REGRESSION: select menu lists match the wrong css rule on www.chainreaction.com

        Update the size attribute value for select elements to match the numeric value.  This is a special case since this
        attribute is used to determine which control to use.  We want to make sure that the size attribute is valid when we match
        CSS rules.

        Test: fast/forms/select-size.html

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::parseMappedAttribute): If the attribute string value is not the
          same as its integer value, then update the attribute value to match the integer.
        * dom/Attribute.h: Made setValue and setPrefix public.

2007-01-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        - WebCore part of fix for: <rdar://problem/4451715> REGRESSION: On some sites, have to 
          type a character before username/password autofill kicks in

        * loader/FrameLoaderClient.h:
        new dispatchDidFinishDocumentLoad call

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        call dispatchDidFinishDocumentLoad
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFinishDocumentLoad):
        empty implementation for dispatchDidFinishDocumentLoad

2007-01-19  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4760280> REGRESSION: Bottom portion of text hangs off edge of SELECT element at http://macreviewzone.com/index.php
        
        Test: fast/forms/control-restrict-line-height.html

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::setFontFromControlSize): Don't honor line-height for controls that
          have restricted font size.

2007-01-19  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11999
          <rdar://problem/4940442> REGRESSION: Incomplete listing in TVListings window (11999)
          Fix was to use the actual size of the renderer in the RenderListBox
          case, instead of always using the size specified by the select element.

        Test: fast/forms/select-list-box-with-height.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=11995
          <rdar://problem/4901834> REGRESSION(NativeListBox): Focus is not placed on
          SELECT after mousing down on OPTION

        Test: fast/forms/select-list-box-mouse-focus.html

        - fix bug where auto-scrolling was not working in list box select elements

        No test yet.

        - fix a missing semicolon in the radio/checkbox section of html4.css

        Test: fast/forms/radio-no-theme-padding.html

        - fix bug where the scroll bars for select elements were pixel-type scroll
          bars even though the scrolling is line at a time scrolling

        No test.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectAll): Removed an explicit call
        to repaint, since the RenderListBox now does that in selectionChanged.
        (WebCore::HTMLSelectElement::notifyOptionSelected): Call the new
        selectionChanged instead of the old setSelectionChanged.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Added a call
        to focus. Removed an explicit call to repaint and added a call to the
        new setMouseDownMayStartAutoscroll function in EventHandler. Removed an
        explicit call to repaint as above.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Call the new
        selectionChanged instead of the old setSelectionChanged.

        * page/EventHandler.h: Added setMouseDownMayStartAutoscroll, needed
        because the existing code to set that flag won't get triggered when
        the select element's default event handler handles the event.

        * rendering/RenderListBox.h: Made ScrollbarClient a private base class.
        Removed setSelectionChanged and m_selectionChanged. Added selectionChanged,
        which is really just a synonym for repaint for now. Moved valueChanged,
        the ScrollbarClient function implementations, and itemHeight into the
        private part of the class. Added numVisibleItems() and listHeight() to
        the private section. Changed m_vBar to be a RefPtr.

        * rendering/RenderListBox.cpp: Removed unneeded includes. Moved all
        the constants to the top of the file.
        (WebCore::RenderListBox::RenderListBox): Removed initialization of
        m_selectionChanged because it was removed and of m_vBar because it's
        now a RefPtr which is automaticall initialized.
        (WebCore::RenderListBox::~RenderListBox): Removed the explicit deref of
        m_vBar because it's a RefPtr. Added null checking for FrameView.
        (WebCore::RenderListBox::updateFromElement): Use numItems().
        (WebCore::RenderListBox::calcMinMaxWidth): Added null checking for
        FrameView and used RefPtr for the newly-created scroll bar.
        (WebCore::RenderListBox::size): Tweaked formatting. Also renamed the
        misleading minDefaultSize to maxDefaultSize, since it's a maximum.
        (WebCore::RenderListBox::numVisibleItems): Added. Used in many places
        where size() was used before. This computes the number of rows we have
        room for. We don't need a row space after the last row, and this takes
        that into account.
        (WebCore::RenderListBox::numItems): Tweaked to remove the local variable.
        (WebCore::RenderListBox::listHeight): Added. Total height of all the rows
        and spaces between them.
        (WebCore::RenderListBox::calcHeight): Changed to call itemHeight for the
        row height, and to subtract the last row spacing off since we don't need
        a space after the last row. Changed the scroll bar setup to make it
        correspond to row numbers, not pixel numbers.
        (WebCore::RenderListBox::baselinePosition): Moved the comment to the
        constant declaration at the top of the file.
        (WebCore::RenderListBox::itemBoundingBoxRect): Simplified by using
        the itemHeight() function.
        (WebCore::RenderListBox::paintObject): Changed to use numItems and
        to use numVisibleItems instead of size.
        (WebCore::RenderListBox::isPointInScrollbar): Added get() call since
        m_vBar is now a RefPtr.
        (WebCore::RenderListBox::listIndexAtOffset): Changed to use numItems(),
        itemHeight(), and rearranged a min/max combo so it starts with the low,
        then the value, then the high value for pinning.
        (WebCore::RenderListBox::autoscroll): Use numVisibleItems() instead of
        size().
        (WebCore::RenderListBox::stopAutoscroll): Removed an unneeded nil check
        of the element.
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex): Changed
        to use numItems() and to use numVisibleItems() instead of size().
        Also changed scroll bar code to work more simply now that the scroll
        bar is row-based.
        (WebCore::RenderListBox::listIndexIsVisible): Changed to use
        numVisibleItems() instead of size().
        (WebCore::RenderListBox::valueChanged): Simplified since the scrollbar
        is now row-based. Also removed an unnecessary null check.
        (WebCore::RenderListBox::itemHeight): Updated for name change from
        optionsSpacingMiddle to rowSpacing.
        (WebCore::RenderListBox::scrollHeight): Changed to use listHeight().
        (WebCore::RenderListBox::setScrollTop): Simplified, and removed the code
        that does nothing if the computed list index is visible (which did not
        make sense for this function and seemed a cut and paste error from the
        scrollToReveal function). The scrollbar part is simpler now that it's
        row-based.
        (WebCore::RenderListBox::windowClipRect): Changed to use document()->view()
        so we don't have to include RenderView.h.

        * css/html4.css: Added a semicolon I noticed was missing.

2007-01-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej and Darin.

        Fix for <rdar://problem/4702420> REGRESSION: Null characters need 
        to be stripped from text nodes (townhall.com)

        This was a regression from the fix for <rdar://problem/3727939>
        Safari strips \0 characters from HTML tags making them valid, which
        was fixed with r12652. We still need to strip null characters in
        text nodes.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write): No behavior change here, this is
        just to make Darin happy.
        (WebCore::HTMLTokenizer::processToken): Call into StringImpl's new 
        createStrippingNull function instead of the normal StringImpl 
        constructor.
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::createStrippingNull): Strip null.
        * platform/StringImpl.h:

2007-01-19  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (no-svg build fix).

        * ksvg2/svg/SVGMPathElement.cpp: Added #ifdef SVG_SUPPORT/#endif guards.

2007-01-19  Anders Carlsson  <acarlsson@apple.com>
        
        Build fix.
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::setStatusbarText):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move JavaScript alert and status bar functions to the chrome.
        
        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * page/Chrome.cpp:
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::setStatusBarText):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::setJSStatusBarText):
        (WebCore::Frame::setJSDefaultStatusBarText):
        * page/Frame.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::runJavaScriptAlert):
        (WebCore::SVGEmptyChromeClient::runJavaScriptConfirm):
        (WebCore::SVGEmptyChromeClient::runJavaScriptPrompt):
        (WebCore::SVGEmptyChromeClient::setStatusBarText):

2007-01-19  Zack Rusin  <zack@kde.org>

        Fix the build.

        * WebCore.pro: Add missing files

2007-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        More cleanup to SVGAnimated* classes.

        No tests possible (only code cleanup)

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyAnimationToValue):
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseBeginOrEndValue):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::parseClockValue):
        (WebCore::SVGAnimationElement::isIndefinite):
        * ksvg2/svg/SVGAnimationElement.h:

2007-01-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Not reviewed.

        Remove accidently commited debug output. Shame on me :-)

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

2007-01-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10410 (SVG Slider example renders completely wrong (inserting <use> dynamically doesn't work))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11660 (SVG: creation of <use/> elements through scripting/DOM doesn't work)

        Added test: svg/custom/use-instanceRoot-modifications.svg
        Added test: svg/custom/use-on-g.svg
        Added test: svg/custom/use-on-rect.svg
        Added test: svg/custom/use-on-symbol-inside-pattern.svg
        Added test: svg/custom/use-on-symbol.svg
        Added test: svg/custom/use-on-text.svg
        Added test: svg/custom/use-transform.svg

        Fixes: svg/W3C-SVG-1.1/text-text-04-t.svg (missing use elements)
        Fixes: svg/carto.net/button.svg (image buttons didn't appear)
        Fixes: svg/carto.net/colourpicker.svg (slider handles finally show up)
        Fixes: svg/carto.net/slider.svg (slider handles finally show up)
        Fixes: svg/carto.net/window.svg (window decorations show up) 
        Fixes: svg/custom/use-forward-refs.svg (missing use elements)

        Rewrite <use> support with a real-shadow tree (as the spec demands), and implement SVGElementInstance.
        AFAIK we're the first implementing this SVG feature - after ASV3 (!).

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMSVG.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        (WebCore::SVGDocumentExtensions::mapInstanceToElement):
        (WebCore::SVGDocumentExtensions::removeInstanceMapping):
        (WebCore::SVGDocumentExtensions::instancesForElement):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):
        * ksvg2/svg/SVGElement.h:
        (WebCore::SVGElement::buildPendingResource):
        * ksvg2/svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        (WebCore::SVGElementInstance::~SVGElementInstance):
        (WebCore::SVGElementInstance::clonedElement):
        (WebCore::SVGElementInstance::correspondingElement):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::parentNode):
        (WebCore::SVGElementInstance::childNodes):
        (WebCore::SVGElementInstance::previousSibling):
        (WebCore::SVGElementInstance::nextSibling):
        (WebCore::SVGElementInstance::firstChild):
        (WebCore::SVGElementInstance::lastChild):
        (WebCore::SVGElementInstance::appendChild):
        (WebCore::SVGElementInstance::updateInstance):
        * ksvg2/svg/SVGElementInstance.h:
        * ksvg2/svg/SVGElementInstance.idl: Added.
        * ksvg2/svg/SVGElementInstanceList.cpp:
        (WebCore::SVGElementInstanceList::SVGElementInstanceList):
        (WebCore::SVGElementInstanceList::length):
        (WebCore::SVGElementInstanceList::item):
        * ksvg2/svg/SVGElementInstanceList.h:
        * ksvg2/svg/SVGElementInstanceList.idl: Added.
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange):
        * ksvg2/svg/SVGGElement.cpp:
        * ksvg2/svg/SVGGElement.h:
        (WebCore::SVGGElement::contextElement):
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHiddenElement.h: Added.
        (WebCore::SVGHiddenElement::Type):
        (WebCore::SVGHiddenElement::~SVGHiddenElement):
        (WebCore::SVGHiddenElement::localName):
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::updateElementInstance):
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::instanceRoot):
        (WebCore::SVGUseElement::animatedInstanceRoot):
        (WebCore::SVGUseElement::hasChildNodes):
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::createRenderer):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::recursiveShadowTreeBuilder):
        (WebCore::dumpShadowTree):
        (WebCore::SVGUseElement::addShadowTree):
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGUseElement.idl:

2007-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Add support for SVGMPathElement parsing.

        No test cases possible (SVGAnimateMotion doesn't work yet)

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::animationPath):
        * ksvg2/svg/SVGMPathElement.cpp: Added.
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::~SVGMPathElement):
        (WebCore::SVGMPathElement::parseMappedAttribute):
        (WebCore::SVGMPathElement::pathElement):
        * ksvg2/svg/SVGMPathElement.h: Added.
        * ksvg2/svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse): fix typo in comment
        * ksvg2/svg/svgtags.in: add back mpath

2007-01-19  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Implement better parsing for keyTimes, keySplines and keyPoints.

        Unfortunately none of this code is used much yet, thus isn't very testable.

        * ksvg2/svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseKeyNumbers):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):

2007-01-18  Adam Roben  <aroben@apple.com>

        Reviewed by Beth.

        Fix: <rdar://problem/4939672> REGRESSION: With text selected that is
        not a link, the "Remove Link" contextual menu item remains active

        * platform/ContextMenuItem.h: Added enabled method.
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::enabled): Implemented.
        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::enabled): Ditto.
        * platform/mac/ContextMenuMac.mm:
        (-[WebCoreMenuTarget validateMenuItem:]): Implemented to fulfill the
        NSMenuValidation protocol.
        
2007-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fix for <rdar://problem/4939558> REGRESSION: "Search in Google", 
        "Search in Spotlight" and "Look up in Dictionary" are missing 
        initially from the contextual menu

        The bug here is that we select the we were selecting the word after 
        the context menu event was dispatched and after the context menu 
        was built up.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Select the word 
        before dispatching the event. It is safe to remove the check for 
        swallowEvent since WebCore context menus ensure that we always 
        swallow the event anyway.

2007-01-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim H.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7926
        Bug 7926: Crash using -callWebScriptMethod to access offsetTop property

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]): Bail out early if function value is an immediate,
        or if the function object is not callable.

2007-01-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=11853
        REGRESSION (r17352): Whitespace in <title> is rendered

        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle): Changed to also collapse internal
        whitespace.  This required removing an optimization that is no
        longer possible.
        * manual-tests/title-internal-whitespace.html: Added.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12039
          Assertion failure in WebCore::Font::primaryFont

        Test: fast/text/font-initial.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Give 'font: initial' the
        Standard generic family. This makes the FontDescription different from
        that of the initial font of a GraphicsContext, ensuring that the latter
        will not be used.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11451
          REGRESSION: Dell.com does not render correctly in ToT (stylesheet not loaded)

        Test: http/tests/misc/css-accept-any-type.html

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): Changed the accept header
        for stylesheets to "text/css,*/*;q=0.1" to match Firefox, accepting CSS served
        as any type.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11271
        REGRESSION (r12358): Text in display: table unselectable

        Test: editing/selection/display-table-text.html

        * editing/htmlediting.cpp:
        (WebCore::isTableElement): Changed to return false for text nodes.

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6218
          CSS1: WebTextRenderer caches and re-uses fallback renderers that are based on family lists

        This patch takes character-to-glyph mapping out of FontData and instead makes
        each Font keep its own mapping, using a shared set of glyph page fallback trees.

        For each page number there is (at most) one tree. A path from the root to a
        node in the tree corresponds to a fallback list of FontDatas. The node points to
        a page (which may be shared with other nodes) that maps each character in its range
        to a glyph in the first FontData in the fallback list that has it, or to 0 if none of
        the FontDatas has a glyph for that character. A special kind of node, that can
        only occur as a leaf, corresponds to using system fallback fonts after the list
        has been exhausted. This prevents system fallback from polluting non-leaf
        nodes.

        Nodes and pages are initialized lazily and employ "copy on write".

        * CMakeLists.txt:
        * WebCore.pro:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * platform/Font.cpp:
        (WebCore::WidthIterator::WidthIterator): Removed substituteFontData.
        (WebCore::WidthIterator::advance): Moved all character-to-glyph mapping logic out
        of here and replaced it with a call to Font::glyphDataForCharacter().
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::glyphDataForCharacter): Added. This method performs the lookup in the
        page fallback trees, triggering lazy initialization as needed, and caching pointers to
        the retrieved page tree nodes in the font.
        (WebCore::Font::update):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::floatWidthForSimpleText): Removed substituteFont argument.
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/Font.h:
        * platform/FontData.cpp:
        (WebCore::FontData::FontData):
        * platform/FontData.h:
        (WebCore::FontData::missingGlyphData): Added. Returns the "missing glyph" GlyphData for
        this FontData.
        * platform/GlyphMap.cpp: Removed.
        * platform/GlyphMap.h: Removed.
        * platform/GlyphPageTreeNode.cpp: Renamed GlyphMap.cpp to this.
        (WebCore::GlyphPageTreeNode::getRoot): Added. Returns the root of the page fallback tree for
        the given page number.
        (WebCore::GlyphPageTreeNode::initializePage): Added. Helper method that initializes the page
        pointer of a node, possibly to a pointer to another node's page or to 0.
        (WebCore::GlyphPageTreeNode::getChild): Added.
        * platform/GlyphPageTreeNode.h: Renamed GlyphMap.h to this.
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPageTreeNode::GlyphPageTreeNode):
        (WebCore::GlyphPageTreeNode::getRootChild):
        (WebCore::GlyphPageTreeNode::parent):
        (WebCore::GlyphPageTreeNode::page):
        (WebCore::GlyphPageTreeNode::level):
        (WebCore::GlyphPageTreeNode::isSystemFallback): Added. Returns whether the node corresponds
        to the system providing fallback fonts, which is done on a character-by-character basis.
        * platform/gdk/GlyphMapGdk.cpp: Removed.
        * platform/gdk/GlyphPageTreeNodeGdk.cpp: Renamed GlyphMapGdk.cpp to this.
        (WebCore::GlyphPage::fill):
        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):
        * platform/mac/FontMac.mm:
        (WebCore::Font::Font):
        * platform/mac/GlyphMapMac.cpp: Removed.
        * platform/mac/GlyphPageTreeNodeMac.cpp: Renamed GlypMapMac.cpp to this.
        (WebCore::GlyphPage::fill): Changed to return false if the font has no glyphs in the page.
        * platform/qt/GlyphMapQt.cpp: Removed.
        * platform/qt/GlyphPageTreeNodeQt.cpp: Renamed GlyphMapQt.cpp to this.
        (WebCore::GlyphPage::fill):
        * platform/win/GlyphMapWin.cpp: Removed.
        * platform/win/GlyphPageTreeNodeWin.cpp: Renamed GlyphMapWin to this.
        (WebCore::GlyphPage::fill):

2007-01-18  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9952
          REGRESSION: Repro crash when dragging an image from the window to the address bar

        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView): Removed the call to Document::detach(). If this
        view is the current view, then the Frame should have already detached the document.
        Added an assertion that this is the case. If this view is not the current view,
        then it cannot access its document, but the page cache should have detached it already.
        Similarly, changed to call RenderPart::setWidget() only if this is the current view
        in the frame.
        (WebCore::FrameView::adjustViewSize): Added an assertion that this view is the current
        view in the frame.
        (WebCore::FrameView::layout): Ditto.
        (WebCore::FrameView::scheduleRelayout): Ditto.
        (WebCore::FrameView::scheduleRelayoutOfSubtree): Ditto.
        (WebCore::FrameView::windowClipRect): Ditto.

2007-01-18  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        No test needed, removed bogus debug-only ASSERT.

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

2007-01-18  Alice Liu  <alice.liu@apple.com>

        Build Fix

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2007-01-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Mark Rowe.

        Fixes the leaks from my last patch, except for the first change below which is a missing delegate call for Mail purposes

        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2007-01-18  David Hyatt  <hyatt@apple.com>

        Make sure layer autoscrolling puts the event coordinates into the layer's coordinate space before
        calling hitTest on it.  Fixes "flashy" selection in textareas.

        Reviewed by darin

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::nodeAtPoint):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Get rid of ResourceLoaderMac.mm and make willCacheResponse platform-independent.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willCacheResponse):
        * loader/ResourceLoader.h:
        * loader/mac/ResourceLoaderMac.mm: Removed.
        * platform/network/ResourceHandleClient.h:
        (WebCore::):
        (WebCore::ResourceHandleClient::willCacheResponse):
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2007-01-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4887416> REGRESSION (SearchField): Assertion failure in HTMLInputElement::setValueFromRenderer when editing via drag and drop (11846)
        http://bugs.webkit.org/show_bug.cgi?id=11846
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Don't insert extra paragraph separators to avoid
        nesting blocks in plaintext mode, since that's not an issue under normal circumstances.
        * html/HTMLInputElement.h:
        * manual-tests/drag-move-in-search-field.html: Added.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::subtreeHasChanged): constrain the value; we'd
        rather truncate it than end up with an illegal value here.

2007-01-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * WebCore.pro: Ha^H^HFix to support massive parallel builds.

2007-01-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin and Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12305
          REGRESSION: Images do not load in video sections on CNN.com homepage

        <rdar://problem/4931480> REGRESSION: Images do not load in video sections on CNN.com homepage (12305)

        Test: fast/dom/HTMLImageElement/image-lowsrc-getset.html

        * html/HTMLAttributeNames.in: Added lowsrc.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isURLAttribute): Added lowsrc.
        (WebCore::HTMLImageElement::lowsrc): Added.
        (WebCore::HTMLImageElement::setLowsrc): Added.
        * html/HTMLImageElement.h: Added lowsrc and setLowsrc.
        * html/HTMLImageElement.idl: Added lowsrc.

2007-01-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * WebCore.pro: Remove generated files on make clean.

2007-01-17  Alice Liu  <alice.liu@apple.com>

        Reviewed by Harrison.

        Fix for <rdar://problem/4894155> REGRESSION: Extra line break is pasted with content into message body after choosing File - Paste

        Migration of some editing code from WebHTMView to WebCore::Editor
        resulted in not calling pasteboardTypesForSelection, which Mail was
        overriding for the special purpose of adding a type to the
        pasteboard after WebKit did.  This patch adds 2 separate code paths
        for Tiger and Leopard.  On Tiger we give in and call the WebView's
        pasteboardTypesForSelection.  On Leopard we call a delegate after
        the pasteboard types are set. 

        * bridge/EditorClient.h:
        * editing/Editor.h:
        * platform/Pasteboard.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::didSetSelectionTypesForPasteboard):
        (WebCore::SVGEmptyEditorClient::pasteboardTypesForSelection):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2007-01-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        - WebCore part of fix for <rdar://problem/4462420> REGRESSION: Mail hangs during 
          Replace All if the replacement string contains the search string
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::findString):
        new startInSelection parameter -- if true, search starts looking in selection; if false,
        search starts looking after the selection
        
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge searchFor:direction:caseSensitive:wrap:startInSelection:]):
        new startInSelection parameter, passed through to Frame::findString()

        * editing/JSEditor.cpp:
        pass false for new findString parameter, to match old behavior

2007-01-17  Beth Dakin  <bdakin@apple.com>

        Rubber stamped by Darin.

        * rendering/HitTestResult.cpp: Just added a comment.

2007-01-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/4920488>
        REGRESSION: A crash occurs at WebCore::Range::processContents () when removing formatting from selected text (that contains a link)

        * dom/Range.cpp:
        (WebCore::Range::commonAncestorContainer): Return null if the nodes
        don't have a common ancestor.  As a side effect, the public 
        commonAncestorContainer now sets an exception if the Range starts
        in one document and ends in another, or starts or ends in a tree
        that's been removed from the document.  The spec doesn't cover
        this and there is no precedent in other browsers for this case because
        they don't allow invalid Ranges (you can create one with WebCore
        by removing a node that contains the start/end of a Range).
        (WebCore::Range::compareBoundaryPoints): If the the two positions
        are in nodes that have no common ancestor, return null.  This doesn't
        change the behavior of the public compareBoundaryPoints: it already
        throws an exception if the two positions are in nodes that don't have
        a common ancestor.  This follows the spec.

2007-01-17  John Sullivan  <sullivan@apple.com>

        The one word was typed by me, but only after debugging for a long time with Darin.

        - fixed <rdar://problem/4912002> REGRESSION: Series of words marked as a single misspelled word

        * editing/TextIterator.cpp:
        (WebCore::WordAwareIterator::WordAwareIterator):
        We were creating a TextIterator with the default kind, but WordAwareIterator is designed to work
        in concert with CharacterIterator, so they need to use the same kind. CharacterIterator uses
        kind RUNFINDER, so WordAwareIterator needs to do so also.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Brady.

        Fix for <rdar://problem/4900895> REGRESSION: onChange doesn't always fire for popups that have had value changed by JS

        No test case since you need to open up the menu to fire onChange.

        * html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::setSelectedIndex):
          Keep track of m_lastOnChangeIndex even when we're not firing onChange.  Since
          the selected index has changed, we still want the m_lastOnChangeIndex to be up to date when we compare
          it later.  This matches our behavior in Safari 2.0.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Darin and John.

        - Fix for <rdar://problem/4816550> REGRESSION: autoscrolling doesn't work after double-click

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): Set swallowEvent bool instead
          of returning early for double and triple clicks.

2007-01-17  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * rendering/RenderObject.h: Removed unused nextEditable and previousEditable.
        * rendering/RenderObject.cpp: Ditto.

2007-01-17  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12278
          <rdar://problem/4928705> REGRESSION(r13070): Dragged image size includes padding (12278)

        * WebCore.exp: Added HitTestResult::imageRect,
        removed HitTestResult::boundingBox.

        * rendering/HitTestResult.h:
        * rendering/HitTestResult.cpp: (WebCore::HitTestResult::imageRect):
        Added. Returns the content rectangle of the image.

        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absolutePosition): Made const.
        (WebCore::RenderObject::contentBox): Added.
        (WebCore::RenderObject::absoluteContentBox): Added.

        * rendering/RenderBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition): Made const.

        * rendering/RenderTableCell.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absolutePosition): Made const.

        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absolutePosition): Made const.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for  http://bugs.webkit.org/show_bug.cgi?id=10139
        <rdar://problem/4823028> REGRESSION: Reproducible crash when selecting a popup/button with ::selection pseudostyle

        Test: fast/css/pseudostyle-anonymous-text.html

        * rendering/RenderObject.cpp: (WebCore::RenderObject::getPseudoStyle): Nil check the node.

2007-01-17  Adele Peterson  <adele@apple.com>

        Reviewed by Anders and John.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11278
        <rdar://problem/4826875> REGRESSION: Popup width doesn't change to accommodate dynamic changes to options

        Test: fast/forms/menulist-width-change.html

        * rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::updateFromElement):
          When the options change, call setNeedsLayoutAndMinMaxRecalc.

2007-01-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12268
        Give object prototypes their own names

        * bindings/js/kjs_html.cpp: Changed the names of KJS:HTMLElement and KJS::HTMLElement to 
        not match the names of their WebCore counterparts. The "DOM" prefix I gave them doesn't 
        seem to carry much sense, but matches some other kjs_html object names.

        * bindings/scripts/CodeGeneratorJS.pm: Append "Proto" to interface name for the prototype's ClassInfo.

        * bindings/js/JSHTMLInputElementBase.cpp:
        (WebCore::JSHTMLInputElementBasePrototypeFunction::callAsFunction):
        (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest):
        (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.cpp:
        (KJS::JSXSLTProcessor::JSXSLTProcessor):
        (KJS::XSLTProcessorPrototypeFunction::callAsFunction):
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
        (KJS::DOMCSSStyleDeclarationPrototypeFunction::callAsFunction):
        (KJS::DOMMediaList::DOMMediaList):
        (KJS::KJS::DOMMediaListPrototypeFunction::callAsFunction):
        (KJS::DOMCSSStyleSheet::DOMCSSStyleSheet):
        (KJS::DOMCSSStyleSheetPrototypeFunction::callAsFunction):
        (KJS::DOMCSSValue::DOMCSSValue):
        (KJS::DOMCSSValuePrototypeFunction::callAsFunction):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNode::DOMNode):
        (KJS::DOMNodePrototypeFunction::callAsFunction):
        (KJS::DOMEventTargetNode::DOMEventTargetNode):
        (KJS::DOMEventTargetNodePrototypeFunction::callAsFunction):
        (KJS::DOMNamedNodeMap::DOMNamedNodeMap):
        (KJS::DOMNamedNodeMapPrototypeFunction::callAsFunction):
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_events.cpp:
        (KJS::DOMEvent::DOMEvent):
        (KJS::DOMEventPrototypeFunction::callAsFunction):
        (KJS::Clipboard::Clipboard):
        (KJS::ClipboardPrototypeFunction::callAsFunction):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLDocumentPrototypeFunction::callAsFunction):
        (KJS::):
        (KJS::JSHTMLDocument::JSHTMLDocument):
        (KJS::JSHTMLElementPrototypeFunction::callAsFunction):
        (KJS::JSHTMLElement::JSHTMLElement):
        (KJS::JSHTMLCollection::JSHTMLCollection):
        (KJS::JSHTMLCollectionPrototypeFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_navigator.cpp:
        * bindings/js/kjs_traversal.cpp:
        (KJS::DOMNodeFilter::DOMNodeFilter):
        (KJS::DOMNodeFilterPrototypeFunction::callAsFunction):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::clear):
        Changed Proto to Prototype, and ProtoFunc to PrototypeFunction.

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack and Darin

        Fix the Qt build again after the latest Image changes.
        Also make some of the methods implemented in ImageCG 
        crossplatform.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        (WebCore::calculatePatternScale):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):
        * platform/qt/TemporaryLinkStubs.cpp:

2007-01-17  Darin Adler  <darin@apple.com>

        - quick attempt to fix the Qt build

        * platform/graphics/qt/ImageQt.cpp: (WebCore::BitmapImage::drawTiled):
        Remove obsolete parameters from this stub.

2007-01-17  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Test: svg/custom/inner-svg-hit-test.svg

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtPoint): never allow containers to be hit.

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Don't call receivedResponse twice for file: URLs.
        Never call back into the ResourceHandleClient once
        cancel() has been called on the ResourceHandle.

        * WebCore.pro:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedResponse):
        (WebCore::ResourceHandleManager::receivedData):
        (WebCore::ResourceHandleManager::receivedFinished):
        (WebCore::FileLoader::request):
        (WebCore::FileLoader::parseDataUrl):
        (WebCore::WebCoreHttp::scheduleNextRequest):
        * platform/network/qt/ResourceHandleManagerQt.h:

2007-01-17  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        * platform/graphics/cg/ImageCG.cpp: correct drawPatternCombined to drawPattern
        (WebCore::Image::drawPattern):
        (WebCore::Image::drawTiled):

2007-01-17  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz and rwlbuis.
        
        SVGs do not work as background images:
        http://bugs.webkit.org/show_bug.cgi?id=12096

        Tests updated:
        - fast/images/svg-as-background.svg: now passes
        - fast/images/svg-as-tiled-background.svg: now passes

        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::nativeImageForCurrentFrame):
        (WebCore::BitmapImage::mayFillWithSolidColor):
        (WebCore::BitmapImage::solidColor):
        * platform/graphics/Image.h:
        (WebCore::Image::mayFillWithSolidColor):
        (WebCore::Image::solidColor):
        (WebCore::Image::nativeImageForCurrentFrame):
        (WebCore::Image::startAnimation):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPatternCallback):
        (WebCore::Image::drawPatternCombined):
        (WebCore::caculatePatternScale):
        (WebCore::Image::drawTiled):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * platform/graphics/svg/SVGImage.h:

2007-01-17  Rob Buis  <buis@kde.org>

        Reviewed by Eric

        Add proper condition for rx attribute negative check.

        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        change all notImplemented() macros to use qDebug
        instead of fprintf(stder, ...)

        * loader/qt/DocumentLoaderQt.cpp:
        * loader/qt/FrameLoaderQt.cpp:
        * page/qt/EventHandlerQt.cpp:
        * page/qt/FrameQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/IconQt.cpp:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/CursorQt.cpp:
        * platform/qt/FileChooserQt.cpp:
        * platform/qt/MimeTypeRegistryQt.cpp:
        * platform/qt/PageQt.cpp: Removed.
        * platform/qt/PopupMenuQt.cpp:
        * platform/qt/ScrollViewQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextBoundaries.cpp:
        * platform/qt/WidgetQt.cpp:

2007-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        A few enhancements to the HTTP Auth architecture

        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::isProxy):
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        * platform/network/ProtectionSpace.h:

2007-01-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by harrison.

        Fixed <rdar://problem/4921134> WebKit needs extensible cut/copy to allow additional types to be written to pasteboard

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/EditorClient.h:
        * editing/Editor.cpp:
        (WebCore::Editor::copy):
        (WebCore::Editor::didWriteSelectionToPasteboard):
        * editing/Editor.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyEditorClient::didWriteSelectionToPasteboard):

2007-01-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <rdar://problem/4747450>
        Gmail Editor: Caret doesn't always position itself after list marker
        <rdar://problem/4917055>
        GMail Editor: A hang can occur when attempting to apply list styling to selected indented text

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength): Use VisiblePositions
        to compute the end of a run for emitted '\n's, because it's often wrong
        in that case.

2007-01-16  Darin Adler  <darin@apple.com>

        - quick lame attempt to get Qt compiling again

        * platform/qt/ContextMenuQt.cpp: Removed show() function.

2007-01-17  Nicholas Shanks  <contact@nickshanks.com>

        Reviewed by Darin.

        * platform/network/ResourceRequest.h:
        (WebCore::ResourceRequest::setHTTPAccept): Correct argument name.

2007-01-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Get rid of show() and hide() since they don't do anything.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent):
        * platform/ContextMenu.h:
        * platform/mac/ContextMenuMac.mm:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Cleaned up the way we create native widgets. They are
        now not created in WebCore anymore, but in the new
        Qt API to WebKit.

        Fix a compile issue in the ResourceHandleManager.

        * WebCore.pro:
        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::ResourceHandleManager::cancel):
        * platform/qt/ScrollViewCanvasQt.cpp:
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::paintEvent):
        (WebCore::ScrollViewCanvasQt::mouseMoveEvent):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::mouseReleaseEvent):
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setScrollArea):
        (WebCore::ScrollView::addChild):
        * platform/qt/WidgetQt.cpp:
        * platform/network/qt/ResourceHandleManagerQt.cpp:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Looks like ResourceHandle _has_ to do everything
        asynchronously if we don't want to run into
        lots of trouble in the loader.

        Implement support data: URLs.

        Remove some unused Qt only code in ResourceHandleClient.h

        * platform/network/ResourceHandleClient.h:
        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::setURL):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedFinished):
        (WebCore::LoaderThread::run):
        (WebCore::FileLoader::request):
        (WebCore::FileLoader::sendData):
        (WebCore::FileLoader::parseDataUrl):
        * platform/network/qt/ResourceHandleManagerQt.h:

2007-01-16  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Refactor drawTiled implementations in preparation for combining them.
        Removed unused RoundTile code path.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPattern):
        (WebCore::BitmapImage::drawTiled):
        (WebCore::caculatePatternScale):

2007-01-16  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - removed unused field from loader

        * loader/loader.cpp:
        (WebCore::Loader::numRequests):
        (WebCore::Loader::cancelRequests):
        * loader/loader.h:

2007-01-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12272
        SVG picture is clipped (edges not visible)

        Expose css dpi constant and use it for svg, making
        1in amount to 96 pixels like for html.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::scaleFactorForConversion):
        * css/csshelper.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::value):
        (WebCore::SVGLength::setValue):
        * ksvg2/svg/SVGLength.h:

2007-01-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam
        
        CFNet additions

        * platform/network/AuthenticationChallenge.cpp:
        (WebCore::operator==):
        * platform/network/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::sourceHandle):
        (WebCore::AuthenticationChallenge::cfURLAuthChallengeRef):
        * platform/network/ResourceError.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Don't map attributes in namespaces other than null to CSS properties.
        
        Test: svg/custom/attribute-namespace-check.svg

        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):

2007-01-15  Lars Naesbye Christensen  <lars@naesbye.dk>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=11112
          add a drop shadow to the hand cursor used for links

        * Resources/linkCursor.png: Added a drop shadow.

2007-01-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12190
          REGRESSION: Placeholder text does not reflect dynamic updates

        Test: fast/forms/placeholder-set-attribute.html

        * html/HTMLTextFieldInnerElement.cpp:
        (WebCore::HTMLSearchFieldCancelButtonElement::defaultEventHandler):
        Call onSearch on the element since I removed it from the renderer.

        * rendering/RenderTextControl.h: Added explicit virtual keywords for overrides
        of virtual functions. Removed the unneeded onSearch function. Made the inheritance
        from PopupMenuClient be private, and made the overrides all private. Replaced the
        showPlaceholderIfNeeded and hidePlaceholderIfNeeded functions with updatePlaceholder.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createResultsButtonStyle): Added an assertion.
        (WebCore::RenderTextControl::updatePlaceholder): Added. Replaces the two
        functions, showPlaceholderIfNeeded and hidePlaceholderIfNeeded.
        (WebCore::RenderTextControl::updateFromElement): Added call to
        updatePlaceholder before updating the value. Also improved the structure
        of the function and corrected incorrect use of copy and replace.
        (WebCore::RenderTextControl::updateCancelButtonVisibility): Added an
        assertion and removed an unneeded local variable.
        (WebCore::RenderTextControl::subtreeHasChanged): Removed an unneeded
        null check and virtual function calls.
        (WebCore::RenderTextControl::forwardEvent): Replaced calls to the old
        functions with calls to updatePlaceholder.
        (WebCore::RenderTextControl::selectionChanged): Changed code to dispatch
        the select event directly -- I plan to remove the onSelect function, which
        was only called here.
        (WebCore::RenderTextControl::autosaveName): Removed too-specific cast and
        local variable.
        (WebCore::RenderTextControl::addSearchResult): Added assertion and changed
        variable name for clarity.
        (WebCore::RenderTextControl::valueChanged): Changed code to check for empty
        autosave name instead of null for consistency with other call sites that
        manage the autosave name. Also changed the code that dispatches an event
        to call onSearch on the input element so we don't need our own function.

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        Fix SVGStyledElement::parseMappedAttribute to only map SVG-allowed CSS properties
        (i.e. width is no longer mapped to CSS for SVG)
        Add SVGStyledElement::mapToEntry to allow RenderStyle-sharing
        http://bugs.webkit.org/show_bug.cgi?id=12060

        * dom/MappedAttributeEntry.h:
        (WebCore::):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::cssPropertyIdForName): new helper
        (WebCore::mapAttributeToCSSProperty): new helper
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName): new helper
        (WebCore::SVGStyledElement::mapToEntry): added.
        (WebCore::SVGStyledElement::parseMappedAttribute): use cssPropertyIdForSVGAttributeName
        * ksvg2/svg/SVGStyledElement.h:

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by bdash.

        Update header guards to follow new style guidelines using new clean-header-guards script.

        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/JSHTMLInputElementBase.h:
        * bindings/js/JSHTMLOptionElementConstructor.h:
        * bindings/js/JSSVGElementWrapperFactory.h:
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_domnode.h:
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.h:
        * bindings/js/kjs_navigator.h:
        * bindings/js/kjs_proxy.h:
        * bindings/js/kjs_traversal.h:
        * bindings/js/kjs_window.h:
        * bridge/EditorClient.h:
        * bridge/History.h:
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        * css/CSSValueList.h:
        * css/DashboardRegion.h:
        * css/FontFamilyValue.h:
        * css/FontValue.h:
        * css/MediaFeatureNames.h:
        * css/MediaList.h:
        * css/Pair.h:
        * css/RectImpl.h:
        * css/ShadowValue.h:
        * css/StyleBase.h:
        * css/StyleList.h:
        * css/StyleSheet.h:
        * css/StyleSheetList.h:
        * css/cssstyleselector.h:
        * dom/BeforeTextInsertedEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Comment.h:
        * dom/DOMImplementation.h:
        * dom/DocPtr.h:
        * dom/Document.h:
        * dom/DocumentFragment.h:
        * dom/DocumentMarker.h:
        * dom/DocumentType.h:
        * dom/EditingText.h:
        * dom/Entity.h:
        * dom/EntityReference.h:
        * dom/EventNames.h:
        * dom/EventTargetNode.h:
        * dom/NameNodeList.h:
        * dom/NamedNodeMap.h:
        * dom/Node.h:
        * dom/NodeList.h:
        * dom/Notation.h:
        * dom/Position.h:
        * dom/ProcessingInstruction.h:
        * dom/Range.h:
        * dom/StyleElement.h:
        * dom/Text.h:
        * editing/AppendNodeCommand.h:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.h:
        * editing/CommandByName.h:
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteButtonController.h:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/DeleteSelectionCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertLineBreakCommand.h:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/InsertTextCommand.h:
        * editing/JoinTextNodesCommand.h:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/ModifySelectionListLevel.h:
        * editing/MoveSelectionCommand.h:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveNodeAttributeCommand.h:
        * editing/RemoveNodeCommand.h:
        * editing/RemoveNodePreservingChildrenCommand.h:
        * editing/ReplaceSelectionCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.h:
        * editing/SplitTextNodeContainingElementCommand.h:
        * editing/TextGranularity.h:
        * editing/TypingCommand.h:
        * editing/WrapContentsInDummySpanCommand.h:
        * history/BackForwardList.h:
        * history/HistoryItem.h:
        * history/HistoryItemTimer.h:
        * history/PageCache.h:
        * html/CanvasGradient.h:
        * html/CanvasPattern.h:
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.h:
        * html/FormDataList.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBlockquoteElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLCollection.h:
        * html/HTMLDListElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLElement.h:
        * html/HTMLElementFactory.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLGenericFormElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLParser.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFieldInnerElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLUListElement.h:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/events/JSSVGLazyEventListener.h:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/PointerEventsHitRules.h:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/misc/TimeScheduler.h:
        * ksvg2/svg/GradientAttributes.h:
        * ksvg2/svg/LinearGradientAttributes.h:
        * ksvg2/svg/PatternAttributes.h:
        * ksvg2/svg/RadialGradientAttributes.h:
        * ksvg2/svg/SVGAElement.h:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.h:
        * ksvg2/svg/SVGAnimateMotionElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimatedPathData.h:
        * ksvg2/svg/SVGAnimatedPoints.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        * ksvg2/svg/SVGAnimationElement.h:
        * 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:
        * 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.h:
        * ksvg2/svg/SVGGElement.h:
        * ksvg2/svg/SVGGradientElement.h:
        * 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/SVGListTraits.h:
        * ksvg2/svg/SVGLocatable.h:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMetadataElement.h:
        * ksvg2/svg/SVGNumberList.h:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGParserUtilities.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/SVGPointList.h:
        * ksvg2/svg/SVGPolyElement.h:
        * ksvg2/svg/SVGPolygonElement.h:
        * ksvg2/svg/SVGPolylineElement.h:
        * ksvg2/svg/SVGPreserveAspectRatio.h:
        * ksvg2/svg/SVGRadialGradientElement.h:
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGRenderingIntent.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:
        * 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/SVGUnitTypes.h:
        * ksvg2/svg/SVGUseElement.h:
        * ksvg2/svg/SVGViewElement.h:
        * ksvg2/svg/SVGZoomAndPan.h:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.h:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocumentLoader.h:
        * loader/Request.h:
        * loader/SubresourceLoader.h:
        * loader/icon/IconDataCache.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconLoader.h:
        * loader/icon/SQLDatabase.h:
        * loader/icon/SQLStatement.h:
        * loader/icon/SQLTransaction.h:
        * page/Frame.h:
        * page/FrameLoadRequest.h:
        * page/FrameTree.h:
        * page/FrameView.h:
        * page/PageState.h:
        * page/Plugin.h:
        * page/qt/FrameQt.h:
        * page/qt/FrameQtClient.h:
        * platform/Arena.h:
        * platform/ArrayImpl.h:
        * platform/Cursor.h:
        * platform/DeprecatedArray.h:
        * platform/DeprecatedCString.h:
        * platform/FileChooser.h:
        * platform/Font.h:
        * platform/FontCache.h:
        * platform/FontData.h:
        * platform/FontDescription.h:
        * platform/FontFamily.h:
        * platform/GlyphBuffer.h:
        * platform/GlyphMap.h:
        * platform/GlyphWidthMap.h:
        * platform/Logging.h:
        * platform/Pasteboard.h:
        * platform/PlatformString.h:
        * platform/PlugInInfoStore.h:
        * platform/PopupMenu.h:
        * platform/PopupMenuClient.h:
        * platform/ScrollBar.h:
        * platform/ScrollView.h:
        * platform/SearchPopupMenu.h:
        * platform/Shared.h:
        * platform/Sound.h:
        * platform/SystemTime.h:
        * platform/Timer.h:
        * platform/Widget.h:
        * platform/cf/RetainPtr.h:
        * platform/gdk/ChromeClientGdk.h:
        * platform/gdk/FontPlatformData.h:
        * platform/gdk/FrameGdk.h:
        * platform/gdk/KeyboardCodes.h:
        * platform/gdk/RenderPopupMenuGdk.h:
        * platform/gdk/RenderThemeGdk.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Icon.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageAnimationObserver.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/IntSizeHash.h:
        * platform/graphics/PathTraversalState.h:
        * platform/graphics/Pen.h:
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/svg/SVGImage.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        * platform/graphics/svg/SVGPaintServer.h:
        * 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.h:
        * platform/graphics/svg/SVGResourceClipper.h:
        * platform/graphics/svg/SVGResourceFilter.h:
        * platform/graphics/svg/SVGResourceMarker.h:
        * platform/graphics/svg/SVGResourceMasker.h:
        * platform/graphics/svg/cg/CgSupport.h:
        * platform/graphics/svg/filters/SVGDistantLightSource.h:
        * platform/graphics/svg/filters/SVGFEBlend.h:
        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
        * platform/graphics/svg/filters/SVGFEComposite.h:
        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
        * platform/graphics/svg/filters/SVGFEFlood.h:
        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
        * platform/graphics/svg/filters/SVGFEImage.h:
        * platform/graphics/svg/filters/SVGFEMerge.h:
        * platform/graphics/svg/filters/SVGFEMorphology.h:
        * platform/graphics/svg/filters/SVGFEOffset.h:
        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
        * platform/graphics/svg/filters/SVGFETile.h:
        * platform/graphics/svg/filters/SVGFETurbulence.h:
        * platform/graphics/svg/filters/SVGFilterEffect.h:
        * platform/graphics/svg/filters/SVGLightSource.h:
        * platform/graphics/svg/filters/SVGPointLightSource.h:
        * platform/graphics/svg/filters/SVGSpotLightSource.h:
        * platform/mac/FontPlatformData.h:
        * platform/mac/PlatformScrollBar.h:
        * platform/network/AuthenticationChallenge.h:
        * platform/network/Credential.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ProtectionSpace.h:
        * platform/network/ResourceError.h:
        * platform/network/ResourceRequest.h:
        * platform/network/ResourceResponse.h:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponseCFNet.h:
        * platform/network/gdk/ResourceHandleManager.h:
        * platform/network/mac/AuthenticationMac.h:
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/qt/ResourceHandleManagerKDE.h:
        * platform/network/qt/ResourceHandleManagerQt.h:
        * platform/network/win/ResourceHandleWin.h:
        * platform/qt/FontPlatformData.h:
        * platform/qt/KeyboardCodes.h:
        * platform/qt/PlatformScrollBar.h:
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/SharedTimerQt.h:
        * platform/win/FontPlatformData.h:
        * platform/win/PlatformScrollBar.h:
        * rendering/AutoTableLayout.h:
        * rendering/HitTestRequest.h:
        * rendering/HitTestResult.h:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/Length.h:
        * rendering/ListMarkerBox.h:
        * rendering/RenderBox.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.h:
        * rendering/RenderPath.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.h:
        * rendering/RenderStyle.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderThemeWin.h:
        * rendering/bidi.h:
        * xml/DOMParser.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathExpressionNode.h:
        * xml/XPathFunctions.h:
        * xml/XPathNSResolver.h:
        * xml/XPathNamespace.h:
        * xml/XPathParser.h:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XPathResult.h:
        * xml/XPathStep.h:
        * xml/XPathUtil.h:
        * xml/XPathValue.h:
        * xml/XPathVariableReference.h:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.h:
        * xml/xmlhttprequest.h:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * loader/ProgressTracker.cpp:

2007-01-15  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCore.pro:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/ProgressTracker.cpp:
        Set finalProgressValue to its value explicitly instead of calculating it 
        (which causes a global initializer to be generated).

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin and Adam.

        Move progress tracking down to WebCore.
        
        * WebCore.exp:
        Add ProgressTracker::estimatedProgress() to be used by WebKit.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add ProgressTracker.[cpp|h]
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::didFinishLoad):
        Call directly to the progress tracker instead of through the frame loader client.
        
        * loader/FrameLoaderClient.h:
        Get rid of the old methods and add new methods for tracking progress.
        
        * loader/ProgressTracker.cpp: Added.
        (WebCore::ProgressItem::ProgressItem):
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::~ProgressTracker):
        (WebCore::ProgressTracker::estimatedProgress):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        (WebCore::ProgressTracker::createUniqueIdentifier):
        * loader/ProgressTracker.h: Added.
        New per page class which tracks progress.
        
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::progress):
        Move createUniqueIdentifier to ProgressTracker, add ProgressTracker object to Page.
        
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::willChangeEstimatedProgress):
        (WebCore::SVGEmptyFrameLoaderClient::didChangeEstimatedProgress):
        (WebCore::SVGEmptyFrameLoaderClient::postProgressStartedNotification):
        (WebCore::SVGEmptyFrameLoaderClient::postProgressEstimateChangedNotification):
        (WebCore::SVGEmptyFrameLoaderClient::postProgressFinishedNotification):
        Add new methods, get rid of the old ones.

2007-01-15  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fix comment.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript):

2007-01-15  John Sullivan  <sullivan@apple.com>

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        Leopard build fix; don't declare one of the case values twice

2007-01-15  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8604
          rowspan does not work when set through javascript

        Covered by existing tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::updateFromElement): Mark the section for grid recalc
        if row span or column span change.

2007-01-15  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Small context menu fixes.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Fix typo.
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Disabled "No Guesses
        Found", and added all enum values explicitly.

2007-01-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6272
        XMLHttpRequest freezes on getting a missing document with overridden Content-Length

        http://bugs.webkit.org/show_bug.cgi?id=6212
        Investigate disallowing some XMLHttpRequest headers from being set via setRequestHeader.

        Tests:
        - http/tests/xmlhttprequest/connection-error-sync.html
        - http/tests/xmlhttprequest/set-dangerous-headers.html

        * bindings/js/kjs_binding.cpp:
        (KJS::):
        (KJS::setDOMException): Added support for NETWORK_ERR. Changed the temporary 
        PERMISSION_DENIED error into a special case.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        Return the error object to the caller. Removed an extra local variable for error, 
        which shadowed the one from enclosing block.

        * dom/XMLTokenizer.cpp:
        (WebCore::openFunc): 
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc): 
        Updated to pass an error object (currently ignored).

        * xml/xmlhttprequest.cpp:
        (WebCore::canSetRequestHeader): Added. The headers to block include the ones from 
        the current XMLHttpRequest draft plus "Via", which is blocked by Firefox.
        (WebCore::XMLHttpRequest::send): Raise an exception if a sync request results in 
        an error.
        (WebCore::XMLHttpRequest::setRequestHeader): Call canSetRequestHeader().
        * xml/xmlhttprequest.h:
        (WebCore::): Added NETWORK_ERR and a comment about PERMISSION_DENIED.

2007-01-15  Zack Rusin  <zack@kde.org>

        Optimizing rendering on the Qt platform. Mainly
        switching from client side QImage to QPixmap's.
        Also cleaning the the ScrollViewCanvasQt code
        quite a bit.

        * platform/graphics/ImageSource.h: use QPixmap
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContext::clip): clip rects when you can
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * platform/graphics/qt/ImageDecoderQt.h: use QPixmap
        * platform/graphics/qt/ImageQt.cpp: QPixmap instead of QImage
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawTiled):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/qt/ScrollViewCanvasQt.cpp: clean up
        (WebCore::ScrollViewCanvasQt::ScrollViewCanvasQt):
        (WebCore::ScrollViewCanvasQt::updateFrameView):
        (WebCore::ScrollViewCanvasQt::paintEvent):
        (WebCore::ScrollViewCanvasQt::mouseMoveEvent):
        (WebCore::ScrollViewCanvasQt::mousePressEvent):
        (WebCore::ScrollViewCanvasQt::mouseReleaseEvent):
        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
        * platform/qt/ScrollViewCanvasQt.h:
        * platform/qt/ScrollViewQt.cpp: remove hacks
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setParentWidget):
        (WebCore::ScrollView::updateContents):

2007-01-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix weird crashes when running the layout tests. The
        reason was that I used KURL (and thus DeprecatedString)
        in a thread. Unfortunately that class is not threadsafe
        at all.

        * platform/network/qt/ResourceHandleManagerQt.cpp:
        (WebCore::RequestQt::RequestQt):
        (WebCore::RequestQt::setURL):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        (WebCore::ResourceHandleManager::receivedResponse):
        (WebCore::FileLoader::request):
        (WebCore::HostInfo::HostInfo):
        (WebCore::NetworkLoader::request):
        (WebCore::NetworkLoader::cancel):
        * platform/network/qt/ResourceHandleManagerQt.h:
        (WebCore::HostInfo::HostInfo):
        (WebCore::HostInfo::isLocalFile):

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Make isValid check not malloc 3 SVGStringLists for every element.
        
        No test possible, performance fix only.

        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):

2007-01-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        Remove unused member var.

        * ksvg2/svg/SVGStyledElement.h:

2007-01-15  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12069
        Hit detection fails under some viewbox constraints

        Do not take viewBox into account when hit testing svg container.

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

2007-01-15  David Hyatt  <hyatt@apple.com>

        Fix  for 12275, negative margins confuse page breaks.

        Reviewed by Eric

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

2007-01-15  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.
        
        SVG gradients do not notice stop additions
        http://bugs.webkit.org/show_bug.cgi?id=12192

        Test: svg/custom/gradient-add-stops.svg

        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::childrenChanged):
        * ksvg2/svg/SVGGradientElement.h:

2007-01-14  David Hyatt  <hyatt@apple.com>

        Fix for bug 10356, positioning doesn't work with <svg> elements in XHTML.  Change the requiresLayer
        check to use the DOM, since the old check would fail if the parent block had no element.

        Reviewed by Eric

        Added svg/custom/relative-positioning.html (absolute/fixed too)

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::requiresLayer):

2007-01-14  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.
        
        SVG does not correctly handle float: left
        http://bugs.webkit.org/show_bug.cgi?id=12210

        Test: svg/custom/svg-float-border-padding.xml

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

2007-01-14  David Hyatt  <hyatt@apple.com>

        More work to fix 10145, regression where form elements don't break properly.  Make sure to really use
        the parent of the replaced element's whitespace value everywhere.

        Reviewed by olliej

        fast/replaced/three-selects-break.html

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2007-01-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin and then by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12228
        Cleanup assorted CSS classes

        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::CSSBorderImageValue):
        (WebCore::CSSBorderImageValue::cssText):
        * css/CSSBorderImageValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForLength):
        (WebCore::valueForBorderStyle):
        (WebCore::valueForTextAlign):
        (WebCore::valueForShadow):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::cssText):
        (WebCore::primitiveValueFromLength):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyPriority):
        (WebCore::CSSComputedStyleDeclaration::removeProperty):
        (WebCore::CSSComputedStyleDeclaration::setProperty):
        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::CSSComputedStyleDeclaration::item):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        * css/CSSCursorImageValue.h:
        * css/CSSGrammar.y:
        * css/CSSImageValue.cpp:
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.cpp:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.cpp:
        * css/CSSInitialValue.h:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::operator=):
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::get4Values):
        (WebCore::CSSMutableStyleDeclaration::getShorthandValue):
        (WebCore::CSSMutableStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::setChanged):
        (WebCore::CSSMutableStyleDeclaration::getPropertyPriority):
        (WebCore::CSSMutableStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSMutableStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::setImageProperty):
        (WebCore::CSSMutableStyleDeclaration::parseDeclaration):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::setLengthProperty):
        (WebCore::CSSMutableStyleDeclaration::cssText):
        (WebCore::CSSMutableStyleDeclaration::merge):
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        * css/CSSNamespace.h:
        (WebCore::CSSNamespace::CSSNamespace):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isCSSTokenizerIdentifier):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::setFloatValue):
        (WebCore::scaleFactorForConversion):
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::setStringValue):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::parseString):
        (WebCore::CSSPrimitiveValue::getIdent):
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getCounterValue):
        (WebCore::CSSPrimitiveValue::getRectValue):
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        (WebCore::CSSPrimitiveValue::getPairValue):
        (WebCore::CSSPrimitiveValue::getDashboardRegionValue):
        * css/CSSProperty.cpp:
        (WebCore::operator==):
        * css/CSSProperty.h:
        (WebCore::CSSProperty::operator=):
        * css/CSSQuirkPrimitiveValue.h:
        (WebCore::CSSQuirkPrimitiveValue::CSSQuirkPrimitiveValue):
        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::CSSRuleList):
        (WebCore::CSSRuleList::deleteRule):
        (WebCore::CSSRuleList::insertRule):
        * css/CSSRuleList.h:
        (WebCore::CSSRuleList::item):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::print):
        (WebCore::CSSSelector::specificity):
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::operator==):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::append):
        (WebCore::CSSSelector::next):
        (WebCore::CSSSelector::pseudoType):
        (WebCore::CSSSelector::hasTag):
        (WebCore::CSSSelector::hasAttribute):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::propertyID):
        (WebCore::CSSStyleDeclaration::getPropertyPriority):
        (WebCore::CSSStyleDeclaration::getPropertyShorthand):
        (WebCore::CSSStyleDeclaration::isPropertyImplicit):
        (WebCore::CSSStyleDeclaration::setProperty):
        (WebCore::CSSStyleDeclaration::isPropertyName):
        (WebCore::CSSStyleDeclaration::parentRule):
        (WebCore::CSSStyleDeclaration::diff):
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleDeclaration.h:
        * css/Counter.h:
        (WebCore::Counter::Counter):
        (WebCore::Counter::listStyleNumber):
        * css/csshelper.cpp:
        (WebCore::parseURL):
        * css/csshelper.h:
        * css/cssparser.h:
        (WebCore::domString):
        (WebCore::atomicString):
        (WebCore::CSSParser::operator|):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::checkOneSelector):
        (WebCore::CSSRuleSet::addRule):

2007-01-14  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12264
          REGRESSION (r18843): Webkit crashes on 43Folders.com home page

        Test: fast/tokenizer/ignore-tags-in-iframe.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reset): Removed unused inSelect member variable.
        (WebCore::HTMLParser::selectCreateErrorCheck): Ditto.
        (WebCore::HTMLParser::processCloseTag): Ditto.
        * html/HTMLParser.h: Ditto.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Changed not to process <pre>, <listing>,
        <script>, <style>, <title>, <textarea> and <xmp> if the parser is in skip mode
        (waiting for a close tag of an element whose contents are not parsed,
        such as iframe).
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::State::setInStyle): Removed unused bit.
        (WebCore::HTMLTokenizer::State::): Ditto.

2007-01-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12258
        fast/tokenizer/002 test broken

        * loader/FrameLoader.h: Added a flush parameter to write().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::write): Ditto.
        (WebCore::FrameLoader::endIfNotLoading): Instead of poorly duplicating the logic in write(),
        call it directly.

2007-01-14  Adam Roben  <aroben@apple.com>

        Reviewed by Maciej.

        Make sure our whitelisting of the type and language attributes of the
        <script> element is enforced in all HTMLTokenizer/HTMLScriptElement
        code paths.

        All layout tests pass.

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::shouldExecuteAsJavaScript): New method to
        determine whether the script should be executed, given its type and
        language attributes.
        (WebCore::HTMLScriptElement::evaluateScript): Check type/language
        before executing.
        * html/HTMLScriptElement.h: Added new declarations.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::begin): Made scriptSrc a String. 
        (WebCore::HTMLTokenizer::scriptHandler): Check
        shouldExecuteAsJavaScript before executing.
        (WebCore::HTMLTokenizer::notifyFinished): Ditto.
        (WebCore::HTMLTokenizer::parseTag): Moved type/language checking from
        here to HTMLScriptElement::shouldExecuteAsJavaScript.
        * html/HTMLTokenizer.h: Made scriptSrc a String, and removed the
        javascript member.

2007-01-14  David Hyatt  <hyatt@apple.com>

        Make sure floats are avoided if you have non-auto column property values.  Fixes the crazy layout
        on http://weblogs.mozillazine.org/roc.

        Reviewed by mitz

        Added fast/multicol/float-avoidance.html

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

2007-01-14  David Hyatt  <hyatt@apple.com>

        Fix for 10145, regression where line breaks are not being honored between adjacent replaced elements.
        When checking for break opportunities where replaced elements are involved, we ignore their white-space
        values and use their parents' instead.  The assumption/idea behind this change is that because the element
        is replaced, its white-space value is irrelevant except as a means of applying style to its interior.

        The CSS spec does not cover this situation, so we're implementing this based off what other browsers seem to
        do.

        Reviewed by aroben

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::Marquee::Marquee):
        (WebCore::Marquee::start):
        (WebCore::Marquee::updateMarqueePosition):
        (WebCore::Marquee::updateMarqueeStyle):
        (WebCore::Marquee::timerFired):
        * rendering/RenderLayer.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::viewCleared):
        * rendering/RenderStyle.h:
        (WebCore::):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2007-01-13  David Hyatt  <hyatt@apple.com>

        While optimizing form controls and fixing their clipping, I caused this text zoom regression.  The layout
        of text is necessary because it needs to recalc minmaxwidth.  This is still a really unfortunate
        bit of code... since a lot of properties don't apply to text (e.g., borders), we're marking text renderers
        as dirty when we don't have to.

        Reviewed by mitz

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

2007-01-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Alexey

        String::format() was relying on undefined behaviour, which
        happened to work on lots of systems (Mac and 32bit Linux at least)
        but broke badly on 64bit Linux.
        
        * platform/String.cpp:
        (WebCore::String::format):

2007-01-13  Martin Reddy  <reddy@pixar.com>

        Fix for bug 11924: WebCore would crash on any HTML content
        with a non-empty <table> tag in it on a 64-bit machine. The
        size_t (64bit) vs int (32bit) cast is now fixed in ensureRows,
        and the clients of this function have been updated to check
        for a false return code.

        Reviewed by Darin, landed by Lars

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

2007-01-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12165
        REGRESSION: text encoding problem at jn.sapo.pt

        Test: fast/encoding/script-in-head.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        Ignore tags within <script> elements in head, just like we do for <title>.

2007-01-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Don't crash when constructing a GraphicsContext with a 0
        PlatformGraphicsContext and don't do anything if painting
        is disabled.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):

2007-01-13  Eric Seidel  <eric@webkit.org>

        Reviewed by hyatt.

        RichDraw demo does not live-update in Safari
        (SVG elements should ignore CSS position)
        http://bugs.webkit.org/show_bug.cgi?id=10364

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): ignore position for everything but <svg>
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::rebuildRenderer): move path generation into layout()
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::layout): ASSERT kids marked as having completed layout
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout): move path generation into layout()
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): ASSERT kids marked as having completed layout

2007-01-12  David Hyatt  <hyatt@apple.com>

        Add support for column rules.

        Reviewed by bdash

        fast/multicol/column-rules.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumns):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::columnRuleIsTransparent):

2007-01-12  David Hyatt  <hyatt@apple.com>

        Make multicolumn layout work with floats.

        Reviewed by andersca

        Added fast/multicol/float-multicol.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBlock.h:

2007-01-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12239
          REGRESSION (r18816-r18818): Assertion failure in 
          WebCore::Length::Length[in-charge](int, WebCore::LengthType, bool)

        Test: fast/css/line-height.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle): Use a float to create a percent Length.

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Use unsigned long for identifiers instead of Objective-C objects.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::assignIdentifierToInitialRequest):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setIdentifier):
        (WebCore::ResourceLoader::identifier):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::createUniqueIdentifier):
        * page/Page.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveResponse):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFinishLoading):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoading):
        (WebCore::SVGEmptyFrameLoaderClient::incrementProgress):
        (WebCore::SVGEmptyFrameLoaderClient::completeProgress):

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12235
          REGRESSION (r18815): Marquees do not scroll

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Apply the '-webkit-marquee' value
        of 'overflow-x' and 'overflow-y'.

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

        Reviewed by hyatt
        
        <rdar://problem/4875425>
        EBay, GMail, and GoogleDocs RTEs font size popups don't work

        Changed execCommand("FontSize", ...) to match the spec 
        and the behavior of other browsers.  It expects a number, 
        n, which, the spec says can be 1 through 7.  Other browsers 
        perform the font size change by creating a font element 
        wrapper with size="n".  We convert n into one of the absolute 
        size CSS keywords (x-small, medium, etc.).

        * editing/JSEditor.cpp: Call cssValueFromFontSizeNumber.  If
        successful, perform the style change.
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::cssValueFromFontSizeNumber):  Added.
        Moved this code from parsedMappedAttribute so that it could be
        called from the Editor.
        (WebCore::HTMLFontElement::parseMappedAttribute): Moved code into
        cssValueFromFontSizeNumber.
        * html/HTMLFontElement.h:

2007-01-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 11598, implement lightweight control clipping mechanism for
        buttons, list boxes, and dropdown lists.  Make sure list box respects
        scrollLeft/Top/Width/Height as well as clientWidth/Height.

        Fix bugs in RenderStyle::diff.  CursorData was not being compared properly.
        vertical-align had a non-inline display check that was wrong (preventing
        dynamic changes to keyword-based vertical-align from working).

        Reviewed by mitz

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setStyle):
        (WebCore::RenderButton::controlClipRect):
        * rendering/RenderButton.h:
        (WebCore::RenderButton::hasControlClip):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::itemBoundingBoxRect):
        (WebCore::RenderListBox::paintObject):
        (WebCore::RenderListBox::itemHeight):
        (WebCore::RenderListBox::verticalScrollbarWidth):
        (WebCore::RenderListBox::scrollWidth):
        (WebCore::RenderListBox::scrollHeight):
        (WebCore::RenderListBox::scrollLeft):
        (WebCore::RenderListBox::setScrollLeft):
        (WebCore::RenderListBox::scrollTop):
        (WebCore::RenderListBox::setScrollTop):
        (WebCore::RenderListBox::controlClipRect):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::hasControlClip):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle):
        (WebCore::RenderMenuList::controlClipRect):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::hasControlClip):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::verticalScrollbarWidth):
        (WebCore::RenderObject::horizontalScrollbarHeight):
        (WebCore::RenderObject::clientWidth):
        (WebCore::RenderObject::clientHeight):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasControlClip):
        (WebCore::RenderObject::controlClipRect):
        (WebCore::RenderObject::contentWidth):
        (WebCore::RenderObject::contentHeight):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleVisualData::StyleVisualData):
        (WebCore::cursorDataEqvuialent):
        (WebCore::StyleInheritedData::operator==):
        (WebCore::CursorList::operator==):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::LengthBox::operator!=):
        (WebCore::StyleVisualData::operator==):
        (WebCore::CursorData::operator==):
        (WebCore::CursorData::operator!=):
        (WebCore::CursorList::operator!=):
        (WebCore::RenderStyle::setTableLayout):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-01-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 9934, smaller line heights should not be allowed on
        text fields.

        Reviewed by darin

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createInnerTextStyle):

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=12215
          Treat 'overflow' and '-webkit-border-radius' as shorthands when parsing and
          when removing.

        Test: fast/css/remove-shorthand.html (updated)

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::initShorthandMap):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):

2007-01-12  Rob Buis  <buis@kde.org>

        Reviewed by Mitz.

        Do not mix up JSSVGPolygonElement and JSSVGPolylineElement.

        * bindings/js/JSSVGElementWrapperFactory.cpp:

2007-01-12  Kevin Decker <kdecker@apple.com>

        Reviewed by andersca.

        Fixed: <rdar://problem/4701326>21.2 ms launch time regression spent in +[WebPluginDatabase installedPlugins]

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Added a guard clause for text/html which used to be in WebKit before a lot of the 
        loader plumbing was moved to WebCore.  Pinging the plug-in database to ask it if it supports a given mime type has the side 
        effect of reading from disk on first call, therefore such a check should be a last resort.  

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12223
          REGRESSION: Leaks under CSSStyleSelector::applyProperty

        No test possible (no change to functionality).

        * rendering/RenderObject.h: Removed unused forward declaration.
        * rendering/RenderStyle.cpp:
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData):
        Delete shadow data.

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebCore.xcodeproj/project.pbxproj:
        Remove SubresourceLoaderMac.mm.
        
2007-01-12  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin and Anders.

        Make some more of the loader code platform independent.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::createEmptyDocument):
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::referrer):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::load):
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveData):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        (WebCore::SubresourceLoader::stopLoading):
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/SubresourceLoaderMac.mm: Removed.
        * loader/qt/FrameLoaderQt.cpp:

2007-01-12  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Valgrind reported uninitialized variable.

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

2007-01-12  Mitz Pettel  <mitz@webkit.org>

        Reviewed by rwlbuis.

        - add missing null check in new fixed table layout code

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2007-01-12  Lars Knoll <lars@trolltech.com>

        Fix the Qt build after the Authenitcation changes.

        * WebCore.pro:
        * platform/network/ResourceHandleInternal.h:

2007-01-12  David Hyatt  <hyatt@apple.com>

        Fix for bug 9569.  Make sure the selection offset for selection roots excludes border and padding.

        Reviewed by Eric

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::leftSelectionOffset):
        (WebCore::RenderBlock::rightSelectionOffset):

2007-01-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 8705, readonly text fields should not get focus rings.  Add a rule to that effect to
        html4.css and then also add readonly as a special case for style sharing so that we can retain the
        performance boost from sharing styles on inputs.

        Reviewed by bdash

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * css/html4.css:

2007-01-11  David Hyatt  <hyatt@apple.com>

        Fix for bug 11595.  Autoscrolling of layers didn't really work at all unless the layer was coincidentally
        in the root layer's coordinate space.  The event point was an absolute position within the document, but
        the layer's rect was only local coords.  This patch makes sure to use absolute bounds for the layer
        when comparing it with the point.

        This is covered by the scrollRevealButton test case already in the tree... the results change to be more
        correct.

        Reviewed by ggaren

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver

        -Move more HTTP Auth handling towards ResourceHandle, away from ResourceHandleClient
        -Make more of ResourceLoader cross-platform

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::receivedCancellation):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::willCacheResponse):
        * loader/mac/ResourceLoaderMac.mm:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::clearAuthentication):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate cancelAuthenticationChallenge:]):

2007-01-11  David Hyatt  <hyatt@apple.com>

        A hit test is returning a null renderer.  Make sure to null-check it in the autoscroll code.
        This really shouldn't happen, but I'm just going to bullet proof for now given that it's happening
        on the front page of yahoo.com!

        Reviewed by mark

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):

2007-01-11  David Hyatt  <hyatt@apple.com>

        Force column-width to parse in strict mode so that there is no confusion when it is used in the columns
        shorthand (it can be mistaken for column-count otherwise).

        Reviewed by Mark

        fast/multicol/columns-shorthand-parsing.html

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12124
          RenderTable::section{Above,Below}() can return the wrong answer for the {footer,header}

        * rendering/RenderTable.cpp:
        (WebCore::resetSectionPointerIfNotBefore): Added this function to help with
        checking if a section being inserted is the going to be the first of its kind.
        (WebCore::RenderTable::addChild): Changed to maintain the pointers to the
        header, the footer, the caption and the first table body properly when objects
        are inserted in the middle. Also changed to make the first caption win over
        any other captions. This matches Firefox and what already used to happen when a
        section recalc took place.
        (WebCore::RenderTable::layout): Changed to use sectionBelow() for iterating
        over the sections from top to bottom.
        (WebCore::RenderTable::calcBorderLeft): Changed to really find the section
        containing the first row.
        (WebCore::RenderTable::calcBorderRight): Ditto.
        (WebCore::RenderTable::sectionAbove): Fixed a bug when the last section was
        skipped if the input was the footer.
        (WebCore::RenderTable::sectionBelow): Ditto for "first" and "header"
        respectively.

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12115
          RTL text is jumbled on display

        Fixed fixed table layout. Implemented an algorithm that matches the behavior
        of Firefox, up to rounding errors.

        Fixes three existing table tests.

        * rendering/FixedTableLayout.cpp:
        Undid accidental search-and-replace of "width" to "m_width" in the comments.
        Removed an outdated comment, since WebKit no longer honors table-layout:fixed
        for variable-width tables.
        (WebCore::FixedTableLayout::calcWidthArray): Fixed the logic that finds the
        first row. Changed to divide the width specified for a cell that spans multiple
        columns between the columns rather than assign its entire width to each column.
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout): Implemented the behavior observed in
        Firefox.
        * rendering/FixedTableLayout.h:

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8438
          iExploder(#460): Assertion failure in RenderObject::drawBorder()

        Test: fast/block/basic/fieldset-stretch-to-legend.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcWidth): Stretch to the minimum intrinsic
        width if the object requires it.
        (WebCore::RenderBox::calcHorizontalMargins): Some style cleanup.
        (WebCore::RenderBox::calcAbsoluteHorizontal): Stretch to the minimum
        intrinsic width if the object requires it.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToMinIntrinsicWidth): Added. Returns false.
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::calcMinMaxWidth): Overloaded RenderBlock's
        implementation to ensure that the legend's will fit in the fieldset's
        minimum intrinsic width.
        (WebCore::RenderFieldset::findLegend): Made const.
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintBorderMinusLegend): Fixed the behavior when
        the legend does overflow the fieldset. This is the part of the fix that
        prevents the assertion failure. If the legend intersects with a corner of
        the fieldset's border, that corner will not be painted, even if it is not
        completely occluded. This edge case can be improved with clipping in the
        future. Added FIXME to implement border-radius.
        * rendering/RenderFieldset.h:
        (WebCore::RenderFieldset::stretchesToMinIntrinsicWidth): Overloaded to
        return true.

2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Build Fix Karma

        I broke the release build (debug build passed)

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::core):

2007-01-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Rewrites HTTP Authentication setting up a more platform-independent structure

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::didCancel):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::receivedCredential):
        (WebCore::ResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceLoader::receivedCancellation):
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::receivedCredential):
        (WebCore::ResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceLoader::receivedCancellation):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willSendRequest):
        (WebCore::ResourceHandleClient::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandleClient::didCancelAuthenticationChallenge):
        (WebCore::ResourceHandleClient::receivedCredential):
        (WebCore::ResourceHandleClient::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandleClient::receivedCancellation):
        (WebCore::ResourceHandleClient::willCacheResponse):
        * platform/network/ResourceResponse.h:
        (WebCore::operator!=):
        * platform/network/URLAuthenticationChallenge.cpp: Added.
        (WebCore::URLAuthenticationChallenge::URLAuthenticationChallenge):
        (WebCore::URLAuthenticationChallenge::previousFailureCount):
        (WebCore::URLAuthenticationChallenge::proposedCredential):
        (WebCore::URLAuthenticationChallenge::protectionSpace):
        (WebCore::URLAuthenticationChallenge::failureResponse):
        (WebCore::URLAuthenticationChallenge::error):
        (WebCore::URLAuthenticationChallenge::isNull):
        (WebCore::URLAuthenticationChallenge::nullify):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/network/URLAuthenticationChallenge.h: Added.
        (WebCore::URLAuthenticationChallenge::sender):
        (WebCore::URLAuthenticationChallenge::nsURLAuthenticationChallenge):
        * platform/network/URLCredential.cpp: Added.
        (WebCore::URLCredential::URLCredential):
        (WebCore::URLCredential::user):
        (WebCore::URLCredential::password):
        (WebCore::URLCredential::hasPassword):
        (WebCore::URLCredential::persistence):
        (WebCore::operator==):
        * platform/network/URLCredential.h: Added.
        (WebCore::):
        (WebCore::operator!=):
        * platform/network/URLProtectionSpace.cpp: Added.
        (WebCore::URLProtectionSpace::URLProtectionSpace):
        (WebCore::URLProtectionSpace::host):
        (WebCore::URLProtectionSpace::port):
        (WebCore::URLProtectionSpace::serverType):
        (WebCore::URLProtectionSpace::realm):
        (WebCore::URLProtectionSpace::authenticationScheme):
        (WebCore::operator==):
        * platform/network/URLProtectionSpace.h: Added.
        (WebCore::):
        (WebCore::operator!=):
        * platform/network/mac/AuthenticationMac.h: Added.
        * platform/network/mac/AuthenticationMac.mm: Added.
        (WebCore::URLAuthenticationChallenge::URLAuthenticationChallenge):
        (WebCore::mac):
        (WebCore::core):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate cancelAuthenticationChallenge:]):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::operator==):

2007-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Even more cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        Layout tests pass.
        
        Renames:
            findRootObjectForNativeHandleFunction => createRootObject
            FindRootObjectForNativeHandleFunctionPtr => createRootObjectFunction
            rootForView => createRootObject
            getInstanceForView => getPluginInstanceForWidget

        * page/mac/FrameMac.mm:
        (WebCore::FrameMac::getAppletInstanceForWidget): Put the NSView * in a void*
        variable named "nativeHandle" to be more explicit about the fact that JavaScript's
        "nativeHandle" is just an NSView *.

        (WebCore::getPluginInstanceForWidget): This function now does the NSView *
        fetching that its callers used to do.
        (WebCore::FrameMac::getEmbedInstanceForWidget): Updated for rename.
        (WebCore::FrameMac::getObjectInstanceForWidget): ditto

        * page/mac/WebCoreFrameBridge.mm: Killed the WebCoreBridgeInternal category,
        which was really more of a shmategory.
        (createRootObject): Removed rootObjectForView, folding it into its only
        caller, the similarly named rootForView. Renamed the pair to "createRootObject"
        because that's what they do.

        (-[WebCoreFrameBridge init]): Updated for renames

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Fix crash on platforms that don't use the new loader yet.
        
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):

2007-01-11  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11449
          Type-to-select in unopened popups doesn't work with Hebrew

        Test: fast/forms/select-type-ahead-non-latin.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler): Changed locale-specific
        isprint() condition to a Unicode isPrintableChar().

2007-01-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by geoff
        
        <rdar://problem/4889140>
        GMail Editor: List creation fails in new message

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Inserting the list
        into an empty paragraph not held open by a br or a '\n', 
        will invalidate start and end.  Insert a placeholder and 
        then recompute start and end.

2007-01-11  Lars Knoll <lars@trolltech.com>

        Rubberstamped by Anders

        This one is not needed any longer neither.

        * ChangeLog:
        * WebCore.pro:
        * loader/qt/NavigationActionQt.cpp: Removed.

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Anders

        Remove now unused file

        * WebCore.pro:
        * loader/qt/LoaderFunctionsQt.cpp: Removed.

2007-01-11  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (build fix).

        * loader/mac/FrameLoaderMac.mm:  Removed import of LoaderNSURLRequestExtras.h.
        * loader/mac/SubresourceLoaderMac.mm:  Ditto.

2007-01-11  George Staikos  <staikos@kde.org>

        Fix compile.

        * page/qt/FrameQtClient.cpp:

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * dom/XMLTokenizer.cpp:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedImage.cpp:
        * loader/DocLoader.cpp:
        * loader/loader.cpp:
        * xml/XSLTProcessor.cpp:
        * xml/xmlhttprequest.cpp:

2007-01-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Loader cleanup, get rid of unused code.
        
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedResource.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/DocLoader.h:
        * loader/LoaderFunctions.h: Removed.
        * loader/mac/CachedResourceMac.mm: Removed.
        * loader/mac/LoaderFunctionsMac.mm: Removed.
        * loader/mac/LoaderNSURLRequestExtras.h: Removed.
        * loader/mac/LoaderNSURLRequestExtras.m: Removed.
        * loader/mac/SubresourceLoaderMac.mm:
        * page/mac/WebCoreFrameBridge.mm:
        * platform/network/ResourceHandle.cpp:

2007-01-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12135 REGRESSION: 
        <input> and <textarea> not focused on right click (4908884 in 
        Radar)

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent): Since WebcCore now 
        handles the context menu event, we want to ask if we *have* 
        swallowed the event instead of if we *haven't* when deciding to 
        perform a selection. In the past, WebKit handled the event, so 
        swallowEvent was false in the case where we want to pop up a menu. 

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

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12189
          REGRESSION(r18614-18640): Crash in WebCore::SharedBuffer::hasPlatformData()

        * loader/mac/LoaderFunctionsMac.mm: (WebCore::CheckCacheObjectStatus):
        Added null check.

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

        * platform/CharacterNames.h: Oops! horizontalEllipsis != zeroWidthSpace!

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin.

        Start using the loader in the Qt port.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::URL):
        (WebCore::FrameLoader::createEmptyDocument):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::setTitle):
        (WebCore::FrameLoader::originalRequestURL):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * page/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):

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

        Reviewed by Hyatt.

        - removed a couple Mac bridging classes; put the code in WebKit instead

        * WebCore.exp: Updated for new WebKit uses.

        * WebCore.xcodeproj/project.pbxproj: Removed files.
        * bridge/mac/WebCoreEncodings.h: Removed.
        * bridge/mac/WebCoreEncodings.mm: Removed.
        * bridge/mac/WebMimeTypeRegistryBridge.h: Removed.
        * bridge/mac/WebMimeTypeRegistryBridge.mm: Removed.
        * platform/mac/WebNSAttributedStringExtras.h: Removed.
        * platform/mac/WebNSAttributedStringExtras.mm: Removed.

        * platform/mac/PasteboardMac.mm:
        (WebCore::stripAttachmentCharacters): Added. Moved code from
        WebNSAttributedStringExtras.mm, and fixed a garbage collection problem
        (a global with a plain old retain rather than HardRetain).
        (WebCore::Pasteboard::writeSelection): Updated to use stripAttachmentCharacters.

        - removed some DeprecatedCString use

        * loader/FrameLoader.cpp: Changed to use String more to eliminate use of
        DeprecatedCString here in the mailto form support. But maybe we can remove
        this entirely. Do we really care about mailto forms any more?

        * platform/Pasteboard.h: Removed unneeded DeprecatedCString declaration.

        * platform/PlatformString.h: Added replace that takes two strings.
        * platform/StringImpl.h: Ditto.
        * platform/StringImpl.cpp: (WebCore::StringImpl::replace): Ditto.

        * platform/TextStream.h: Remove DeprecatedCString case.
        * platform/TextStream.cpp: Ditto.

        - made a few more files use CharacterNames.h

        * platform/CharacterNames.h: Added some more character names and
        sorted alphabetically.

        * bridge/mac/WebCoreStringTruncator.mm:
        (centerTruncateToBuffer): Use character name from CharacterNames.h.
        (rightTruncateToBuffer): Ditto.
        (truncateString): Ditto.
        * platform/mac/FontMac.mm: (WebCore::addDirectionalOverride): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox): Ditto.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow): Ditto.

2007-01-11  David Hyatt  <hyatt@apple.com>

        Fix two bugs in positionForCoordinates.  (Make it work when you have a margin in between your border and
        your first child block.)

        Rewrite column rebalancing to have two modes: constrained and unconstrained.  In unconstrained mode,
        the system will dynamically rebalance as it loses space to breaks and compute a final intrinsic height
        for the overall block.  In constrained mode, columns flow into the fixed height block, and extra columns
        spill out horizontally in the appropriate direction (RTL/LTR).

        Make columns work properly with both LTR and RTL overflow blocks.

        Initial column test suite coming soon now that the basic layout is right.

        Reviewed by darin

        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::positionForCoordinates):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasColumns):

2007-01-10  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12201
        Fix image dragging issues with http://www.carto.net/papers/svg/gui/scrollbar/index.svg

        Fix calculation of absolute transform so that viewport x,y
        translation is always done, also when viewBox is set.     

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::absoluteTransform):

2007-01-10  David Hyatt  <hyatt@apple.com>

        Rework positionForCoordinates to be more efficient and to handle multi-column content.  This entailed
        adding a new field to HitTestResult called localPoint that cached the mouse coordinate in the coordinate
        space of the renderer.

        positionForCoordinates now takes local coordinates and so no longer needs to waste time recomputing
        absolute positions over and over again.

        Reviewed by darin

        * bridge/mac/WebCoreAXObject.mm:
        (-[WebCoreAXObject value]):
        (-[WebCoreAXObject doAXTextMarkerRangeForLine:]):
        (-[WebCoreAXObject doAXTextMarkerForPosition:]):
        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::contains):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventDoubleClick):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/EventHandler.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::localPoint):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _visiblePositionForPoint:]):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::localPoint):
        (WebCore::HitTestResult::setLocalPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::positionForCoordinates):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::hitTestLines):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForCoordinates):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateHitTestResult):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::nodeAtPoint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForCoordinates):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForCoordinates):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        * rendering/RootInlineBox.h:

2007-01-11  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Fix Qt Build.

        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::getResponseModifiedHeader):

2007-01-10  Pam Greene  <pam@chromium.org>

        Reviewed by Darin.

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

        Set image size to fit alt text when image or input-image element
        has no src attribute, so that those images show their alt text instead
        of showing nothing at all.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:

2007-01-11  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::printing):

2007-01-10  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9284
          Quirksmode (CSS1): Removing inline border styles is impossible

        Test: fast/css/remove-shorthand.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::PropertyLonghand::PropertyLonghand): Added this structure
        containing a pointer to an array if properties and the array's length.
        (WebCore::PropertyLonghand::properties):
        (WebCore::PropertyLonghand::length):
        (WebCore::initShorthandMap): Initialize the mapping from shorthand
        properties to their dependent properties.
        (WebCore::CSSMutableStyleDeclaration::removeProperty): Changed to check
        if the property being removed is a shorthand, and if so, to remove all
        of its dependent properties.
        (WebCore::CSSMutableStyleDeclaration::removePropertiesInSet): Added a
        'notifyChanged' boolean parameter which controls whether this method
        calls setChanged() if it actually removes any property.
        * css/CSSMutableStyleDeclaration.h:

2007-01-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Kevin.

        Removed unnecessary printing state

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge forceLayoutAdjustingViewSize:]):
        (-[WebCoreFrameBridge forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebCoreFrameBridge drawRect:]):
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        (-[WebCoreFrameBridge adjustPageHeightNew:top:bottom:limit:]):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::calcHeight):
        (WebCore::RenderView::calcWidth):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::paint):
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::computeAbsoluteRepaintRect):
        (WebCore::RenderView::printing):
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Get the Refresh header directly from the ResourceResponse.
        
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::getResponseModifiedHeader):

2007-01-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Fix for <rdar://problem/4914258> REGRESSION: Search in Google now 
        operates on the current WebView instead of invoking Safari's 
        service

        * page/ContextMenuClient.h: New call to the client to search in 
        google.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Call 
        into the client instead of forming a new url string and loading it.
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyContextMenuClient::searchWithGoogle): New call.

2007-01-10  Adam Roben  <aroben@apple.com>

        Rubberstamped by Darin.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Pass 0
        instead of an empty Event to FrameLoader::load and
        FrameLoader::urlSelected.

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        Disable assertion (I forgot to do this even though I added the comment!)

2007-01-10  Ross Burton  <ross@burtonini.com>

        Reviewed and landed by Anders.

        Fix case in vcproj file (the GTK+ port uses the vcproj file).

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2007-01-10  Lars Knoll  <lars@trolltech.com>

        Make the Qt build compile again after 
        the ResourceLoader was made platform
        independent. 

        * WebCore.pro:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didFirstLayout):
        * loader/qt/FrameLoaderQt.cpp:
        * loader/qt/MainResourceLoaderQt.cpp: Removed.
        * loader/qt/ResourceLoaderQt.cpp: Removed.
        * page/qt/FrameQtClient.cpp:
        (WebCore::FrameQtClient::openURL):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::setDefersLoading):

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Maciej.
        
        Move most of ResourceLoader and MainResourceLoader into the platform-independent files.
        
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didFinishLoad):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::~MainResourceLoader):
        (WebCore::MainResourceLoader::create):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::interruptionForPolicyChangeError):
        (WebCore::MainResourceLoader::stopLoadingForPolicyChange):
        (WebCore::MainResourceLoader::callContinueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        (WebCore::MainResourceLoader::addData):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::callContinueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::setDefersLoading):
        (WebCore::ResourceLoader::frameLoader):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::clearResourceData):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::response):
        (WebCore::ResourceLoader::cancelledError):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::setRequest):
        * loader/mac/FrameLoaderMac.mm:
        * loader/mac/MainResourceLoaderMac.mm: Removed.
        * loader/mac/ResourceLoaderMac.mm:

2007-01-10  Lars Knoll <lars@trolltech.com>

        Move files to the correct location,
        and remove a few unused methods from 
        LoaderFunctionsQt.cpp

        * WebCore.pro:
        * loader/qt/LoaderFunctionsQt.cpp: Added.
        (WebCore::CheckCacheObjectStatus):
        * page/qt/FrameQt.cpp: Added.
        (WebCore::doScroll):
        (WebCore::FrameQt::FrameQt):
        (WebCore::FrameQt::~FrameQt):
        (WebCore::FrameQt::passMouseDownEventToWidget):
        (WebCore::FrameQt::isLoadTypeReload):
        (WebCore::FrameQt::markedTextRange):
        (WebCore::FrameQt::mimeTypeForFileName):
        (WebCore::FrameQt::unfocusWindow):
        (WebCore::FrameQt::focusWindow):
        (WebCore::FrameQt::getEmbedInstanceForWidget):
        (WebCore::FrameQt::getObjectInstanceForWidget):
        (WebCore::FrameQt::getAppletInstanceForWidget):
        (WebCore::FrameQt::issueCutCommand):
        (WebCore::FrameQt::issueCopyCommand):
        (WebCore::FrameQt::issuePasteCommand):
        (WebCore::FrameQt::issuePasteAndMatchStyleCommand):
        (WebCore::FrameQt::issueTransposeCommand):
        (WebCore::FrameQt::respondToChangedSelection):
        (WebCore::FrameQt::shouldChangeSelection):
        (WebCore::FrameQt::print):
        (WebCore::FrameQt::shouldInterruptJavaScript):
        (WebCore::FrameQt::keyEvent):
        (WebCore::FrameQt::setFrameGeometry):
        (WebCore::FrameQt::client):
        (WebCore::FrameQt::createNewWindow):
        (WebCore::FrameQt::goBackOrForward):
        (WebCore::FrameQt::historyURL):
        (WebCore::FrameQt::runJavaScriptAlert):
        (WebCore::FrameQt::runJavaScriptConfirm):
        (WebCore::FrameQt::runJavaScriptPrompt):
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::addPluginRootObject):
        * page/qt/FrameQt.h: Added.
        (WebCore::QtFrame):
        * page/qt/FrameQtClient.cpp: Added.
        (WebCore::FrameQtClient::FrameQtClient):
        (WebCore::FrameQtClient::~FrameQtClient):
        (WebCore::FrameQtClient::setFrame):
        (WebCore::FrameQtClient::openURL):
        (WebCore::FrameQtClient::submitForm):
        (WebCore::FrameQtClient::didReceiveResponse):
        (WebCore::FrameQtClient::didFinishLoading):
        (WebCore::FrameQtClient::didFail):
        (WebCore::FrameQtClient::didReceiveData):
        (WebCore::FrameQtClient::traverseNextFrameStayWithin):
        (WebCore::numRequests):
        (WebCore::FrameQtClient::numPendingOrLoadingRequests):
        * page/qt/FrameQtClient.h: Added.
        * platform/qt/FrameQt.cpp: Removed.
        * platform/qt/FrameQt.h: Removed.
        * platform/qt/FrameQtClient.cpp: Removed.
        * platform/qt/FrameQtClient.h: Removed.
        * platform/qt/LoaderFunctionsQt.cpp: Removed.

2007-01-10  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Fix: <rdar://problem/4917054> ContextMenuController leaks Events

        No layout tests possible.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Use RefPtr
        to manage the lifetime of Shared objects.

2007-01-10  Rob Buis  <buis@kde.org>

        Reviewed by Sam.

        http://bugs.webkit.org/show_bug.cgi?id=12196
        SVGPatternElement should not be locatable

        Replace SVGStyledLocatableElement derivation with
        SVGStyledElement.

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * ksvg2/svg/SVGPatternElement.h:

2007-01-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Build fix, not reviewed.

        * rendering/RenderSVGText.cpp: Use correct method name.
        (WebCore::RenderSVGText::relativeBBox):

2007-01-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10262 (SVG fails to redraw top 20 pixels)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10263 (SVG seems to repaint way too many times during load)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10404 (Invalidation issues with text skew)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10407 (bad SVG text invalidation issues on mouseover/mouseout)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10806 (failing manual-tests/svg-repaint-group.svg)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10913 (SVG charts from plotkit fail to render unless you scroll them offscreen)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10964 (inclusion of svg into svg leave a ghost invisible rectangle)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11680 (DojoKit SVG test chart fails to render (clipping issue?))
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11883 (SVG Text has updating/repainting issues)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11907 (RenderSVGContainer does not mark itself for repaint after setting viewBox, slice or align) 
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11913 (Invalidation issues in SVG javascript-based animation example)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11979 (SVG text does not respect font-size scaling in bbox calculation)
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11984 (SVG <text> does not calculate the correct absoluteRepaintRect)
        Partly fixes: http://bugs.webkit.org/show_bug.cgi?id=10745 (SVG layout needs to move out of DOM and into rendering tree during layout() call)

        Fixes text redrawing issues seen in svg/carto.net (when actually playing with those files, manually)
        Fixes svg/carto.net/window.svg (moving "Navigation Window" caused artefacts)
        Fixes svg/W3C-SVG-1.1/types-basicDOM-01-b.svg (bbox calculations had one pixel offset)

        Large SVG dynamic update rework/optimization. Also fixes SVG printing.

        Rename updateCanvasItem() to rebuildRenderer(), as this is what it really does.

        Do NOT call rebuildRenderer() in notifyAttributeChange() anymore,
        but override notifyAttributeChange() in SVGPathElement/SVGCircleElement/etc..
        (as only primitives using RenderPath as rendering object need this logic!)

        This should clarify what really happens, as discussed with Eric.

        Remove the invocations of notifyAttributeChange() in SVGLength. It's already
        handled by the JS bindings, and we do double updating work. Fixed.

        Because SVG dynamic updates have been flaky in the past, there was a hack introduced
        in RenderPath causing the updateCanvasItem() function to be called _on every layout_ (!!!).
        Finally this hack is gone. Offer RenderSVGContainer::absoluteRects() function to be able
        to use WebInspector for <g> elements (very handy!).

        Remove the unneeded "m_updateVectorial" bool from SVGStyledElement.
        Remove computeAbsoluteRepaintRect() from RenderSVGContainer/RenderSVGImage/RenderSVGText,
        as dicussed with David (we only need to reimplement getAbsoluteRepaintRect there).

        Make RenderSVGText::absoluteRects just use the getAbsoluteRepaintRect() function, instead of
        code duplication. Remove unneeded RenderSVGImage::layout() function (RenderImage does the same).

        Add new function SVGStyledElement::renderStyleForElement, which centralizes the manual style
        resolving needed for gradient stops.

        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::notifyAttributeChange):
        (WebCore::SVGCircleElement::hasRelativeValues):
        * ksvg2/svg/SVGCircleElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::notifyAttributeChange):
        (WebCore::SVGEllipseElement::hasRelativeValues):
        * ksvg2/svg/SVGEllipseElement.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::notifyAttributeChange):
        * ksvg2/svg/SVGImageElement.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::setValue):
        (WebCore::SVGLength::setValueInSpecifiedUnits):
        * ksvg2/svg/SVGLength.h:
        (WebCore::SVGLength::isRelative):
        * ksvg2/svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::notifyAttributeChange):
        (WebCore::SVGLineElement::hasRelativeValues):
        * ksvg2/svg/SVGLineElement.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getBBox):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::notifyAttributeChange):
        * ksvg2/svg/SVGPathElement.h:
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::rendererIsNeeded):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::notifyAttributeChange):
        (WebCore::SVGRectElement::hasRelativeValues):
        * ksvg2/svg/SVGRectElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::hasRelativeValues):
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::SVGStyledElement):
        (WebCore::SVGStyledElement::createRenderer):
        (WebCore::SVGStyledElement::notifyAttributeChange):
        (WebCore::SVGStyledElement::rebuildRenderer):
        * ksvg2/svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasRelativeValues):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::setLocalTransform):
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::relativeBBox):
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::getAbsoluteRepaintRect):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::nodeAtPoint):
        (WebCore::drawMarkerWithData):
        (WebCore::updateMarkerDataForElement):
        (WebCore::drawStartAndMidMarkers):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        (WebCore::RenderPath::hasRelativeValues):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::calcViewport):
        (WebCore::RenderSVGContainer::setViewBox):
        (WebCore::RenderSVGContainer::setAlign):
        (WebCore::RenderSVGContainer::viewportTransform):
        (WebCore::RenderSVGContainer::getAbsoluteRepaintRect):
        (WebCore::RenderSVGContainer::absoluteRects):
        (WebCore::RenderSVGContainer::fillContains):
        (WebCore::RenderSVGContainer::strokeContains):
        (WebCore::RenderSVGContainer::relativeBBox):
        (WebCore::RenderSVGContainer::setSlice):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        (WebCore::RenderSVGImage::relativeBBox):
        (WebCore::RenderSVGImage::imageChanged):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::getAbsoluteRepaintRect):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::createInlineBox):
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::relativeBBox):
        * rendering/RenderSVGText.h:
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::placePositionedBoxesHorizontally):

2007-01-10  David Hyatt  <hyatt@apple.com>

        Make the selectionRect() method of RenderText better by reusing computeAbsoluteRepaintRect.  This enables
        the method to be multi-column aware and also to understand when the selection is clipped out by overflow.

        Reviewed by bdash

        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRect):

2007-01-10  David Hyatt  <hyatt@apple.com>

        Make the absolutePosition method multi-column aware.  Note that there is now a real problem with the
        absoluteRects method, since an object can split across multiple columns and break into multiple rects.
        absolutePosition just returns the top-left corner of the element's box in the first column in which it
        appears.

        Reviewed by bdash

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustRectForColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::getAbsoluteRepaintRect):

2007-01-09  David Hyatt  <hyatt@apple.com>

        Avoid crashing when repainting multiple columns... make sure to use the current vector's size and
        not the newly-computed column count.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustRepaintRectForColumns):

2007-01-09  David Hyatt  <hyatt@apple.com>

        Break up painting and hit testing of children into helper methods and add multi-column versions for both.
        
        Make incremental repainting able to invalidate the right spot in multiple column layouts so that e.g., link
        hover works.

        Turn off selection gap filling in columns for now until it can be made to work correctly.

        Improve the column balancing heuristic by adding in the block's lineHeight/2 to each column initially to
        account for column break adjustments that shrink the columns slightly.  Avoid clipping of the last column's
        contents by ensuring it gets all the remaining available height.

        Reviewed by mitz

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumns):
        (WebCore::RenderBlock::paintContents):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustRepaintRectForColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::getAbsoluteRepaintRect):

2007-01-09  Remi Zara  <remi_zara@mac.com>

        Reviewed by Darin and Eric.

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

        Don't use memset to set float to 0

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):

2007-01-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Add default constructor to SharedBuffer.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/SharedBuffer.h:

2007-01-09  David Hyatt  <hyatt@apple.com>

        This patch gets rudimentary column layout working.  Normal flow content only gets laid out into
        columns properly and painted correctly initially.  What doesn't work: hit testing, incremental repainting,
        column rule painting, child layers.

        Some work needs to be done on the render tree dumper before column tests will be
        meaningful.

        Also reworked overflow and fixed a bunch of bugs with the computation of overflow.  These include an error
        in the height calculations caused by not adding in the horizontal scrollbar height and other errors caused
        by not checking overflow in lowest/rightmostPosition.  Existing tests improve their rendering to match
        Firefox with this change.

        Fixed a bug where a table cell incorrectly expanded to encompass floats inside an overflow:auto block.
        This should not have happened.  Covered by new test fast/overflow/table-overflow-float.html.

        Reviewed by mitz

        * page/Frame.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintContents):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::avoidsFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasOverhangingFloats):
        (WebCore::RenderBlock::hasColumns):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        * rendering/RenderFlow.h:
        (WebCore::RenderFlow::hasColumns):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::expandsToEncloseOverflow):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::expandsToEncloseOverflow):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):

2007-01-09  Darin Adler  <darin@apple.com>

        - update all 2007 Apple copyrights for the new company name

        * css/cssstyleselector.cpp:
        * html/HTMLLIElement.cpp:
        * platform/CharacterNames.h:
        * platform/TextBreakIterator.h:
        * platform/TextBreakIteratorICU.cpp:
        * platform/graphics/ImageBuffer.h:
        * rendering/CounterNode.cpp:
        * rendering/CounterNode.h:
        * rendering/RenderBox.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderImage.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderStyle.cpp:
        * rendering/RenderStyle.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/break_lines.cpp:

2007-01-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4840662>
        REGRESSION: Mail crash when dragging text into a link
        
        moveParagraphs fails to move content into a display:block 
        anchor because of code in positionAvoidingSpecialElementBoundary,
        and so it infinitely recurs.
        
        * editing/htmlediting.cpp:
        (WebCore::positionAvoidingSpecialElementBoundary): Don't avoid anchors
        that have display:block so that content is inserted in the expected
        paragraph.  This fixes the bug and weird behavior when typing before/after
        anchors with display:block.

2007-01-09  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12145
        Color parsing is too relaxed in strict mode
        http://bugs.webkit.org/show_bug.cgi?id=12166
        REGRESSION (r18480): "336633" is not parsed as a color

        Fix a regression by using String::format return value.
        Also make strict mode more strict for cases where hexcolors
        lack a #.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseColorFromValue):
        * css/cssparser.h:

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed regression where redirects did not have user-agent any more

        Showed up as a failure in one of the http tests, so no new test needed.

        * loader/mac/ResourceLoaderMac.mm: (WebCore::ResourceLoader::willSendRequest):
        Don't use a copy of the ResourceRequest; pass the original so it can be modified.

2007-01-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11078
          Forms Don't Submit (ASP Pages)

        Test: fast/dom/collection-namedItem-via-item.html

        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLCollectionProtoFunc::callAsFunction): Changed item() to fall back
        to namedItem() if its argument does not convert to a number.

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12174
          improve Unicode use (less WTF::Unicode:: prefix, centralized character names)

        - got rid of namespace prefixes from most uses of WTF::Unicode

        - updated for removal of WTF::Unicode::memcmp
        - updated for renaming of WTF::Unicode::strcasecmp to umemcasecmp.

        - unified constants for special Unicode characters in a new
          CharacterNames.h header

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.cpp:
        (WebCore::ParseString::lower):
        * dom/Document.cpp:
        (WebCore::isValidNameStart):
        (WebCore::isValidNamePart):
        * dom/Position.cpp:
        (WebCore::Position::leadingWhitespacePosition):
        (WebCore::Position::trailingWhitespacePosition):
        * editing/CompositeEditCommand.cpp:
        (WebCore::isWhitespace):
        * editing/HTMLInterchange.cpp:
        * editing/TextIterator.cpp:
        (WebCore::CircularSearchBuffer::CircularSearchBuffer):
        (WebCore::CircularSearchBuffer::append):
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace):
        (WebCore::nonBreakingSpaceString):
        * editing/htmlediting.h:
        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSizeNumber):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        * html/HTMLSelectElement.cpp:
        (WebCore::stripLeadingWhiteSpace):
        * platform/Font.cpp:
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::normalizeVoicingMarks):
        * platform/GlyphMap.cpp:
        (WebCore::GlyphMap::locatePage):
        * platform/MimeTypeRegistry.h:
        * platform/StringHash.h:
        * platform/StringImpl.cpp:
        (WebCore::isSpace):
        (WebCore::StringImpl::append):
        (WebCore::StringImpl::insert):
        (WebCore::StringImpl::truncate):
        (WebCore::StringImpl::remove):
        (WebCore::parseLength):
        (WebCore::StringImpl::isLower):
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::upper):
        (WebCore::StringImpl::secure):
        (WebCore::StringImpl::foldCase):
        (WebCore::StringImpl::capitalize):t
        (WebCore::StringImpl::toInt):
        (WebCore::equalIgnoringCase):
        (WebCore::StringImpl::find):
        * platform/TextBoundaries.h:
        * platform/TextCodec.h:
        * platform/TextCodecLatin1.cpp:
        * platform/TextEncoding.h:
        * platform/TextEncodingRegistry.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderListMarker.cpp:
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::isSpaceAccordingToStyle):
        (WebCore::RenderText::setInternalString):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables):
        (WebCore::operator<<):
        * rendering/bidi.cpp:
        (WebCore::BidiState::BidiState):
        (WebCore::BidiContext::BidiContext):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::BidiIterator::direction):
        (WebCore::appendRun):
        (WebCore::embed):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::skipNonBreakingSpace):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h:
        * xml/XPathParser.cpp:
        (WebCore::XPath::charCat):

2007-01-09  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12170
          RenderView holds dangling reference to RenderObjects as selection markers

        This fixes the crash seen on Windows -- the underlying problem
        may still exist.

        * rendering/RenderText.h:
        (WebCore::RenderText::selectionState):
        Change the m_selectionState enum-bitfield to an unsigned-bitfield,
        because enums on Windows are signed, which caused it to become
        negative (whereas the valid values are all positive).

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=12175
          port break_lines.cpp to be platform independent

        * platform/TextBreakIterator.h: Added lineBreakIterator.
        Removed ICU-specific stuff from the header.

        * platform/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Added helper to be shared by the three different
        creation functions.
        (WebCore::characterBreakIterator): Changed to use setUpIterator.
        (WebCore::wordBreakIterator): Ditto.
        (WebCore::lineBreakIterator): Added.

        * platform/qt/TextBreakIteratorQt.cpp:
        (WebCore::lineBreakIterator): Added a stub.

        * rendering/break_lines.cpp:
        (WebCore::isBreakableSpace): Added.
        (WebCore::shouldBreakAfter): Added.
        (WebCore::needsAdvancedBreakAnalysis): Added.
        (WebCore::nextBreakablePosition): Changed to use TextBreakIterator on platforms
        other than Mac.

2007-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - move WebDataProtocol load handling from ResourceLoader to MainResourceLoader
        
        (it's only ever used for main resources)

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setRequest):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):

2007-01-09  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12129
        repaint issue after setting viewBox attribute with ECMAScript

        Make sure RenderSVGContainer updates after setting viewBox from js.

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::setViewBox):

2007-01-09  Lars Knoll <lars@trolltech.com>

        Make the Qt build compile... again!

        * WebCore.pro:
        * loader/qt/FrameLoaderQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::create):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::focusPolicy):

2007-01-09  David Hyatt  <hyatt@apple.com>

        Fix for background: inherit bug where background-color wasn't getting properly overridden.  This was a
        regression from Safari 1.3 to 2.0.

        Reviewed by bdash

        fast/backgrounds/background-color-inherit-bug.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-01-08  Brady Eidson <beidson@apple.com>

        Reviewed by Brian Dash

        <rdar://problem/4895178> 
        WebCore::BackForwardList vector should be backed by a HashSet to remove
        the potential expense in frequently calling BackForwardList::containsItem()

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem): Maintain HashSet as well as Vector
        (WebCore::BackForwardList::setCapacity): Ditto
        (WebCore::BackForwardList::close): Ditto
        (WebCore::BackForwardList::removeItem): Ditto
        (WebCore::BackForwardList::containsItem): Make a hash lookup instead of iterate 
        through the Vector
        * history/BackForwardList.h:

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix a regression where layout is triggering on all recalcStyles, due to a bad comparison
        in the multicol assignment operator.

        * rendering/RenderStyle.cpp:
        (WebCore::StyleMultiColData::operator==):

2007-01-08  Darin Adler  <darin@apple.com>

        - rolled out Beth's RenderFlow::destroy change, which broke 5 editing tests

        * rendering/InlineBox.cpp: (WebCore::InlineBox::root):
        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::destroy):
        Used svn merge to roll the change out.

2007-01-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim H.

        Build fix for 64-bit platforms.

        * platform/graphics/svg/SVGPaintServerGradient.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Move some history related functions off the bridge and into FrameLoader directly.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canGoBackOrForward):
        (WebCore::FrameLoader::getHistoryLength):
        (WebCore::FrameLoader::historyURL):
        * loader/mac/FrameLoaderMac.mm:
        * page/mac/WebCoreFrameBridge.h:

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark.

        Adds outline-color to list of computable styles.

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

2007-01-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for a bug that Adam, Hyatt, and I noticed when debugging 
        another problem.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Added assertion. If we are casting to a 
        root, we should make sure we are root.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::destroy): It is not enough to remove the 
        child boxes for anonymous blocks. We need to be more thorough when 
        cleaning these up. Adam's test case illustrates the problem well.

2007-01-08  John Sullivan  <sullivan@apple.com>

        Tweak to previous checkin

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Adam suggested I should nil-check frame->page()

2007-01-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady and Beth
        
        - fixed <rdar://problem/4912541> GMAIL: With selected text in a rich text message, choosing 
        "Search in Google" displays search results in the message body field

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Visit google URL in main frame rather than in current frame

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix computed style errors for color properties that had invalid colors.
        They should return the value of the 'color' property when their colors
        are not valid.

        Fixed the computed style value for border-top-color (a typo was causing it to
        use border-left-color instead).

        Implement outline-color computed style.

        Reviewed by harrison

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::currentColorOrValidColor):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2007-01-08  Remi Zara  <remi_zara@mac.com>

        Reviewed by Darin and Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12150
        Handle correctly cases where no stops are defined, cases where a
        stop offset value is less than previous stops offset value, and cases
        where a stop offset value is greater than 1.0.
        
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setGradientStops): Don't sort stops
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback): When there are no stops, use a transparent
        fill
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        a stop offset must always be considered at greater or equal to all
        preceding stop offsets, but no more than 1.0

2007-01-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4865325> please re-add auto font activation support in WebKit

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):

2007-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - http://bugs.webkit.org/show_bug.cgi?id=12143
          remove Widget code unneeded now that form elements do not use Widget

        * bindings/objc/DOMHTML.mm: (-[DOMHTMLSelectElement _activateItemAtIndex:]):
        Removed useless implementation that would only work with NSView-based
        <select> elements, and added a FIXME about the fact that this function
        doesn't do anything any more. I think it's used by Safari forms auto-fill.

        * bridge/mac/WebCoreAXObject.mm: (-[WebCoreAXObject rendererForView:]):
        Removed code that depends on elementForView:, since that always returns
        nil now.

        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::~HTMLFormElement):
        Use a formDestroyed() function rather than clearing m_form directly so that
        this class doesn't have to be a friend of HTMLGenericFormElement.

        * html/HTMLGenericFormElement.h: Removed now-unneeded friend declaration
        for HTMLFormElement. Moved definition of supportsFocus into the .cpp file.
        Added a public formDestroyed function for use by HTMLFormElement.
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::attach): Removed widget-specific code.
        (WebCore::HTMLGenericFormElement::isKeyboardFocusable): Ditto.
        (WebCore::HTMLGenericFormElement::isMouseFocusable): Ditto.
        (WebCore::HTMLGenericFormElement::supportsFocus): Added this here; it was
        in the header file before, for no good reason.

        * page/EventHandler.h: Removed unused Mac-specific
        currentEventIsMouseDownInWidget.
        * page/mac/EventHandlerMac.mm: Ditto.

        * page/Frame.cpp: (WebCore::Frame::frameForWidget): Changed to use
        RenderWidget to find the frame rather than the WigetClient element()
        function.

        * page/mac/FrameMac.h: Removed unused bridgeForWidget.
        * page/mac/FrameMac.mm: Ditto.

        * page/mac/WebCoreFrameBridge.h: Removed elementForView.
        * page/mac/WebCoreFrameBridge.mm: Ditto. While the scroll bar still did
        implement WebCoreWidgetHolder, it does not correspond to a DOM element,
        so this method was always returning nil.

        * platform/Widget.h: Moved unused types and functions that are still
        in the platform-specific implementations into a "to be deleted" section:
        FocusPolicy, NoFocus, TabFocus, ClickFocus, StrongFocus, WheelFocus,
        lockDrawingFocus, font, focusPolicy, hasFocus, clearFocus, setFont,
        disableFlushDrawing, enableFlushDrawing, unlockDrawingFocus.
        Removed unused functions that are not in platform-specific implementations:
        sizeHint, baselinePosition, checksDescendantsForFocus.
        * platform/Widget.cpp: Removed functions.

        * platform/WidgetClient.h: Emptied out the class. Soon we can delete it.

        * platform/mac/PlatformScrollBarMac.mm: (-[WebCoreScrollBar mouseDown:]):
        Got rid of unneeded includes, removed use of the WebCoreWidgetHolder
        protocol and the one method in it, and changed the calls to beforeMouseDown
        and afterMouseDown to pass the widget pointer in.

        * platform/mac/WebCoreWidgetHolder.h: Emptied out the file -- to be deleted
        later.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget): Removed code to manage deferredFirstResponder.
        (WebCore::Widget::hasFocus): Removed body of function and replaced with
        an assertion that it's never called. Later we'll remove it.
        (WebCore::Widget::setFocus): Tweaked a bit to work given changes to the
        FrameMac class. Also added a FIXME. Given how this works, it does not
        belong in the platform layer.
        (WebCore::Widget::clearFocus): Removed body of function and replaced with
        an assertion that it's never called. Later we'll remove it.
        (WebCore::Widget::focusPolicy): Ditto.
        (WebCore::Widget::font): Ditto.
        (WebCore::Widget::setFont): Ditto.
        (WebCore::Widget::lockDrawingFocus): Ditto.
        (WebCore::Widget::unlockDrawingFocus): Ditto.
        (WebCore::Widget::disableFlushDrawing): Ditto.
        (WebCore::Widget::enableFlushDrawing): Ditto.
        (WebCore::Widget::paint): Removed obsolete comment.
        (WebCore::Widget::sendConsumedMouseUp): Removed body of function and replaced with
        an assertion that it's never called. Later we'll remove it.
        (WebCore::Widget::setIsSelected): Tweaked a bit to work given changes to the
        FrameMac class. Also added a FIXME. Given how this works, it does not
        belong in the platform layer.
        (WebCore::Widget::beforeMouseDown): Changed to take an explicit Widget parameter.
        (WebCore::Widget::afterMouseDown): Ditto.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::intrinsicWidth): Changed to not call sizeHint() any more.
        I didn't change the values returned by the function, but they make no sense and
        this should probably be fixed later.
        (WebCore::RenderApplet::intrinsicHeight): Ditto.

        * rendering/RenderWidget.h: Removed unneeded WidgetClient.h include. Changed
        RenderWidget to no longer inherit from WidgetClient. Added a find function to find
        a RenderWidget given a Widget. Removed all the virtual functions that override
        WidgetClient hooks.
        * rendering/RenderWidget.cpp: Removed all the WidgetClient functions.
        (WebCore::widgetRendererMap): Added. Map that gives the RenderWidget for each
        Widget that is owned by a RenderWidget.
        (WebCore::RenderWidget::destroy): Removed the setClient call and added a call to
        remove the widget from the widgetRendererMap.
        (WebCore::RenderWidget::setWidget): Ditto.
        (WebCore::RenderWidget::setStyle): Removed the call to Widget::setFont.
        (WebCore::RenderWidget::find): Added. Returns the RenderWidget for a Widget, if any.

        - other changes

        * dom/Node.cpp:
        (WebCore::Node::dump): Removed unnecessary use of DeprecatedString.
        (WebCore::appendAttributeDesc): Ditto.
        (WebCore::Node::showNode): Ditto.
        (WebCore::Node::formatForDebugger): Ditto.

        * loader/CachedImage.cpp: (WebCore::CachedImage::createImage): Cleaned up
        conditional compilation so adding more MIME types here doesn't make the
        function more and more difficult to read.

        * page/Frame.h: Removed unneeded includes and declarations.
        Tweaked formatting.
        * page/Page.h: Removed unneeded declarations.
        * platform/ScrollView.h: Removed unneeded includes.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::renderName): Tweaked formatting.

2007-01-08  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12162
          The inheritableProperties array is duplicated

        No test possible (no change to functionality).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::removeComputedInheritablePropertiesFrom): Added.
        Removes the inheritable properties that CSSComputedStyleDeclaration knows how to compute
        from the given mutable declaration.
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSMutableStyleDeclaration.cpp: Removed one copy of the inheritableProperties array.
        * css/CSSMutableStyleDeclaration.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Changed to call
        CSSComputedStyleDeclaration::removeComputedInheritablePropertiesFrom.

2007-01-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12099
        XMLHttpRequest shouldn't honor a charset specified via setRequestHeader

        Test: http/tests/xmlhttprequest/request-encoding.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send): Don't try to get the charset from Content-Type. Keep checking 
        for unknown charsets, because that will be needed again when we start using document.xmlEncoding.

2007-01-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=7640
        Menu items are displayed as "undefined"

        * bindings/js/kjs_dom.cpp:
        (KJS::DOMNodeProtoFunc::callAsFunction):
        * bindings/js/kjs_domnode.h:
        (KJS::DOMNode::):
        Removed Node::item. No idea why it was there in the first place.

        * bindings/js/kjs_html.cpp:
        (KJS::HTMLElementFunction::callAsFunction):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        Added HTMLSelectElement::item. It is not in DOM2 IDL, but the spec seems to mentions it anyway:
        "The contained options can be directly accessed through the select element as a collection."

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::namedItem):
        (WebCore::HTMLSelectElement::item):
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.idl:
        Added this method to DOM and IDL, too. Made namedItem() non-virtual.

2007-01-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4912254> REGRESSION: After copying text to 
        the clipboard, the paste contextual remains dimmed when it should
        be active

        No layout test for context menu problems.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Remove check to see 
        if the content is richly editable; it only has to be regular 
        editable and the call to canPaste() takes care of that.

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Attempt to fix build for buildbots.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::columnGap):
        (WebCore::RenderBlock::calcColumnWidth):

2007-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3232
          CSS2: Web Kit does not support all list style types

        Test case showed problems in cjk-ideographic and hebrew
        Test: fast/lists/w3-list-styles.html

        * rendering/RenderListMarker.cpp:
        (WebCore::toCJKIdeographic): Fix the algorithm so it doesn't include leading zeroes.
        I had misread the part that says you start with the decimal form of the number.
        Fix an assertion that was too stringent. Fix the code to collapse consecutive zeroes
        so that it doesn't get confused by intervening "noChar" characters.
        (WebCore::RenderListMarker::paint): Reverse the text before painting if the first character's
        direction is right to left.

2007-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - http://bugs.webkit.org/show_bug.cgi?id=12142
          render tree dump for test results should include the value of list markers

        * rendering/RenderTreeAsText.cpp:
        (WebCore::getTagName): Changed to use String instead of DeprecatedString.
        (WebCore::quoteAndEscapeNonPrintables): Ditto. Also moved up so it can be used
        in the operator below.
        (WebCore::operator<<): Added clause for RenderListMarker that dumps the value
        of the list marker's text.
        (WebCore::nodePosition): Changed to use String instead of DeprecatedString.
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::TextStreamSeparator::TextStreamSeparator): Changed to use String
        instead of DeprecatedString.
        (WebCore::getTagName): Ditto.
        (WebCore::write): Ditto.

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by ap and the rubber stamp of Maciej.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12164
        Cleanup Tokenizers

        - Moves Tokenizer class into its own file.
        - Move XMLTokenizer declaration from XMLTokenizer.cpp to XMLTokenizer.h
        - Fixup #includes.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::createTokenizer):
        * dom/Tokenizer.h: Added.
        (WebCore::Tokenizer::Tokenizer):
        (WebCore::Tokenizer::~Tokenizer):
        (WebCore::Tokenizer::stopParsing):
        (WebCore::Tokenizer::processingData):
        (WebCore::Tokenizer::executingScript):
        (WebCore::Tokenizer::wantsRawData):
        (WebCore::Tokenizer::writeRawData):
        (WebCore::Tokenizer::inViewSourceMode):
        (WebCore::Tokenizer::setInViewSourceMode):
        (WebCore::Tokenizer::wellFormed):
        (WebCore::Tokenizer::lineNumber):
        (WebCore::Tokenizer::columnNumber):
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        (WebCore::XMLTokenizer::):
        (WebCore::XMLTokenizer::setIsXHTMLDocument):
        (WebCore::XMLTokenizer::isXHTMLDocument):
        (WebCore::XMLTokenizer::wellFormed):
        * html/HTMLElement.cpp:
        * html/HTMLTokenizer.h:
        (WebCore::Token::reset):
        (WebCore::HTMLTokenizer::checkBuffer):
        (WebCore::HTMLTokenizer::checkScriptBuffer):
        (WebCore::HTMLTokenizer::State::State):
        (WebCore::HTMLTokenizer::State::setBit):
        * xml/XSLTProcessor.cpp:

2007-01-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim H.

        Adds -webkit-box-shadow to list of computable styles.

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

2007-01-08  Rob Buis  <buis@kde.org>

        Reviewed by bdash.

        Initialize the member vars, fixes testcases
        pointer-events-path.svg and pointer-events-text.svg
        on the PPC build.

        * ksvg2/misc/PointerEventsHitRules.cpp:
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):

2007-01-08  David Hyatt  <hyatt@apple.com>

        This patch computes the correct column width and column count.  It ensures that content lays out constrained
        to the column width in one long strip.  It does not yet balance the long strip into multiple columns.

        Reviewed by Mark

        * rendering/RenderBlock.cpp:
        (WebCore:::RenderFlow):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::rightOffset):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::columnGap):
        (WebCore::RenderBlock::calcColumnWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::setColumnWidth):

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix column-count so that it supports auto just like column-width does.

        Add a new function, availableWidth(), that will be used to return the width available to content placed inside
        a block.  For now it still returns contentWidth(), so no behavioral change has occurred yet.

        Subclass calcWidth() in RenderBlock, but don't change anything yet.  This is where RenderBlock will calc the
        correct column width.

        Reviewed by mark

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::calcWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidth):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlockWidth):
        (WebCore::RenderObject::paddingTop):
        (WebCore::RenderObject::paddingBottom):
        (WebCore::RenderObject::paddingLeft):
        (WebCore::RenderObject::paddingRight):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::availableWidth):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::hasAutoColumnCount):
        (WebCore::RenderStyle::setColumnCount):
        (WebCore::RenderStyle::setHasAutoColumnCount):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):

2007-01-08  David Hyatt  <hyatt@apple.com>

        Fix z-index:inherit so that it works properly when inheriting from z-index:auto.

        Reviewed by eric

        fast/layers/zindex-inherit.html

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2007-01-08  David Hyatt  <hyatt@apple.com>

        Add support for all of the CSS3 multi-column properties in preparation for implementing the
        feature.

        Reviewed by eric

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::diff):
        * rendering/RenderStyle.h:
        (WebCore::StyleMultiColData::operator!=):
        (WebCore::StyleMultiColData::ruleWidth):
        (WebCore::RenderStyle::columnWidth):
        (WebCore::RenderStyle::hasAutoColumnWidth):
        (WebCore::RenderStyle::columnCount):
        (WebCore::RenderStyle::columnGap):
        (WebCore::RenderStyle::hasAutoColumnGap):
        (WebCore::RenderStyle::columnRuleColor):
        (WebCore::RenderStyle::columnRuleStyle):
        (WebCore::RenderStyle::columnRuleWidth):
        (WebCore::RenderStyle::columnBreakBefore):
        (WebCore::RenderStyle::columnBreakInside):
        (WebCore::RenderStyle::columnBreakAfter):
        (WebCore::RenderStyle::setColumnWidth):
        (WebCore::RenderStyle::setHasAutoColumnWidth):
        (WebCore::RenderStyle::setColumnCount):
        (WebCore::RenderStyle::setColumnGap):
        (WebCore::RenderStyle::setHasAutoColumnGap):
        (WebCore::RenderStyle::setColumnRuleColor):
        (WebCore::RenderStyle::setColumnRuleStyle):
        (WebCore::RenderStyle::setColumnRuleWidth):
        (WebCore::RenderStyle::resetColumnRule):
        (WebCore::RenderStyle::setColumnBreakBefore):
        (WebCore::RenderStyle::setColumnBreakInside):
        (WebCore::RenderStyle::setColumnBreakAfter):
        (WebCore::RenderStyle::initialColumnCount):
        (WebCore::RenderStyle::initialColumnWidth):

2007-01-07  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=10587
        pointer-events is not implemented for RenderSVGImage or RenderSVGText

        Implement pointer-events for raster images and svg text.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/PointerEventsHitRules.cpp: Added.
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):
        * ksvg2/misc/PointerEventsHitRules.h: Added.
        (WebCore::PointerEventsHitRules::):
        * 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:

2007-01-07  David Hyatt  <hyatt@apple.com>

        Fix a regression where border-radius was not clipping the background when border was set to none.
        Fix multi-line inline flow painting to properly apply border-radius to the background only at the
        beginning of the first line and end of the last line.

        Reviewed by eric

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderBox.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::paintBackgroundExtended):

2007-01-07  David Hyatt  <hyatt@apple.com>

        Add support for the CSS3 box-shadow property.

        Reviewed by olliej

        fast/box-shadow/ contains the tests for this feature.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipOutRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::shouldDrawTextDecoration):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        * rendering/InlineRunBox.h:
        (WebCore::InlineRunBox::paintBoxDecorations):
        (WebCore::InlineRunBox::paintTextDecorations):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBoxShadow):
        (WebCore::RenderObject::dump):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasBoxDecorations):
        (WebCore::RenderObject::setHasBoxDecorations):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::setStyle):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2007-01-07  Rob Buis  <buis@kde.org>

        Reviewed by weinig.

        http://bugs.webkit.org/show_bug.cgi?id=10362
        SVG needs to support SVGError events and some form of "error state"

        Report SVG warnings and errors on (JS) console.
        Expose line and column number getters in Tokenizer in
        order to display them with the error message.

        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizer.h:
        (WebCore::Tokenizer::lineNumber):
        (WebCore::Tokenizer::columnNumber):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::lineNumber):
        (WebCore::HTMLTokenizer::columnNumber):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseMappedAttribute):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGParserUtilities.cpp:
        (WebCore::SVGPolyParser::parsePoints):
        * ksvg2/svg/SVGParserUtilities.h:
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute):
        * ksvg2/svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseMappedAttribute):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseMappedAttribute):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseMappedAttribute):

2007-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Sam.

        Cleanup code & fix InlineBox positioning when text-anchor is used.

        * rendering/RenderSVGText.cpp: Cleanup code.
        (WebCore::RenderSVGText::nodeAtPoint):
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::paint):
        * rendering/RenderText.cpp: Remove unused function posOfChar()
        * rendering/RenderText.h: Ditto.
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::translateBox):
        (WebCore::placePositionedBoxesHorizontally):

2007-01-06  George Staikos  <staikos@kde.org>

        Reviewed by Brady.

        Make the Qt build work.... again.

        * WebCore.pro:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFromDelegate):
        * loader/qt/DocumentLoaderQt.cpp:
        * loader/qt/FrameLoaderQt.cpp:
        * loader/qt/MainResourceLoaderQt.cpp: Added.
        (WebCore::MainResourceLoader::create):
        * loader/qt/ResourceLoaderQt.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::cancel):
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::addData):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/qt/LoaderFunctionsQt.cpp:
        * platform/qt/TemporaryLinkStubs.cpp: implemented some functions
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2007-01-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11133

        Test: fast/forms/listbox-clip.html

        * platform/mac/PlatformScrollBarMac.mm:
        (-[WebCoreScrollBar initWithPlatformScrollbar:]): Get the correct scrollbar
        width/height based on control size.
        * rendering/RenderListBox.cpp:
        Renamed optionsSpacingLeft to optionsSpacingHorizontal since it is applied
        on both sides.
        (WebCore::RenderListBox::calcMinMaxWidth): Account for optionsSpacingHorizontal.
        Not including the spacing before went unnoticed since the scrollbar was lying
        about its width by exactly the same amount.
        (WebCore::RenderListBox::paintObject): Clip out the scrollbar.
        (WebCore::RenderListBox::paintItemForeground): Changed for the rename.

2007-01-07  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11935
          REGRESSION: Changing the overflow style dynamically does not force repaint

        Test: fast/repaint/erase-overflow.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle): Added a repaint before changing hasOverflowClip
        to true, to ensure that the current overflow is erased.

2007-01-07  Graham Dennis  <graham.dennis@gmail.com>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12106
        Changed URL from WebResourceLoadDelegate's webView:resource:willSendRequest:... is ignored

        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest): Use m_originalURL instead of request().url()
        as m_request is not set until the end of ResourceLoader::willSendRequest. Also, ensure that
        the request is updated if the frame's client changes it, and that the SubresourceLoader's client
        gets the new request and not the old one. 

2007-01-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=10313
        xsl:import doesn't work in stylesheets loaded via XMLHttpRequest

        This is a partial fix that makes a couple more steps towards fixing the problem.

        Test: fast/xsl/transform-xhr-doc.xhtml

        * xml/XSLTProcessor.cpp:
        (WebCore::xsltStylesheetPointer): Pass an URL for the stylesheet. I'm not sure why this constructor even needs it, 
        given that it has a Node, but this is a small modifications that makes XSLImportRule try to load from a correct URL.
        (WebCore::XSLTProcessor::transformToString): Fix the crash for real this time.

2007-01-06  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12125
        overflow attribute of the symbol element not respected

        Copy the attribute map to the cloned node so the overflow on
        the symbol is respected.

        * ksvg2/svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::closeRenderer):

2007-01-06  Eric Seidel  <eric@webkit.org>

        Reviewed and significantly tweaked by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12103
          LEAK: Fix the leaking ImageBuffer buffers on TOT

        * ksvg2/svg/SVGMaskElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        Changed to return auto_ptr since it returns a newly-created ImageBuffer.

        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        Changed to use auto_ptr since ImageBuffer::create now returns one.

        * platform/graphics/GraphicsContext.h: Removed the include of ImageBuffer.h,
        which was never needed, and the declaration of createImageBuffer, which is
        now a class member function of ImageBuffer.

        * platform/graphics/ImageBuffer.h: Replaced the constructor with a create
        function. Added a comment about the need to move renderSubtreeToImage
        elsewhere. Added an m_data member to store the data so it can be deleted
        when the object is done, made the m_size member non-platform-specific.
        Added a private constructor for use to create the CG version.

        * platform/graphics/cg/GraphicsContextCG.cpp: Removed
        GraphicsContext::createImageBuffer.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::create): Added. Replaces the old
        GraphicsContext::createImageBuffer function.
        (WebCore::ImageBuffer::ImageBuffer): Added m_data and m_context.
        (WebCore::ImageBuffer::~ImageBuffer): Added a fastFree of the data and got
        rid of the unneeded null check before calling CGImageRelease.

        * platform/graphics/svg/SVGPaintServerGradient.h: Removed the include of
        ImageBuffer.h and declared the ImageBuffer class instead.

        * platform/graphics/svg/SVGPaintServerPattern.h: Removed the include of
        ImageBuffer.h and declared the ImageBuffer class instead, and changed setTile
        to take an auto_ptr since it takes ownership of the ImageBuffer.
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setTile): Ditto.

        * platform/graphics/svg/SVGResourceMasker.h: Removed the include of
        ImageBuffer.h and declared the ImageBuffer class instead, and changed setMask
        to take an auto_ptr since it takes ownership of the ImageBuffer.
        * platform/graphics/svg/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::setMask): Ditto.

        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::SVGPaintServerGradient::setup): Updated to use auto_ptr.

        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp: Updated includes.

        * platform/graphics/svg/cg/SVGResourceMaskerCg.mm:
        (WebCore::SVGResourceMasker::applyMask): Updated to use auto_ptr.

        - other changes

        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleStartCondition):
        Remove unused variables.

2007-01-06  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12136
          REGRESSION: Counters-related leaks

        * rendering/RenderCounter.cpp:
        (WebCore::destroyCounterNodeChildren): Delete the child counter nodes.

2007-01-05  Adele Peterson  <adele@apple.com>

        Release build fix.

        * rendering/RenderListItem.cpp: (WebCore::RenderListItem::explicitValueChanged): Initialize listRenderer.

2007-01-05  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - eliminated use of DeprecatedString for list item markers
        - eliminated use of DeprecatedValueList for border style collapsing
        - made many members private instead of protected or public

        - reworked counter implementation to fix most of the CSS 2.1 counter tests;
            made CounterNode be a simple non-polymorphic class, moved most counter-
            specific code out of RenderObject into RenderCounter, changed the data
            structure in RenderStyle to be more speed-efficient but less space-
            efficient for nodes with counter styles
        - fixed http://bugs.webkit.org/show_bug.cgi?id=11557

        Tests: css2.1

        - fixed a bug where counter text did not have text transform or text security
          applied to it

        Test: fast/css/counters/counter-text-security.html
        Test: fast/css/counters/counter-text-transform.html

        - improved handling of CSS content property values with data of the wrong
          type; this probably needs a bit more refinement

        Test: fast/css-generated-content/reset-content-to-initial-expected.txt

        - fixed a bug where removing the value attribute from an HTMLLIElement would
          set the list item's value to 0 instead of restoring it to normal

        Test: fast/lists/li-values.html

        - fixed a bug where changing the text security style from one style to another
          would not change the displayed text

        Test: fast/css/text-security.html

        - fixed some problems handling long sequences of counter-related styles;
          still needs more work and some super-large test cases to check if
          recursive algorithms for these that will overflow stack remain

        - added support for list styles decimal-leading-zero, hiragana, hirigana-iroha,
          katakana, katakana-iroha, cjk-ideographic, armenian, and georgian

        Test: fast/lists/decimal-leading-zero.html

        - minor tweaks and bug fixes for other list styles, including range checking

        * WebCore.exp: Updated for RenderListItem change.

        * bridge/mac/WebCoreAXObject.mm: (-[WebCoreAXObject value]): Updated to use
        String instead of DeprecatedString.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Removed
        implementation for counter styles for now. We should probably restore it
        later, but we need to make sure the returned list is separate from the
        original list in the DOM -- modifying the list should not change the element
        it was computed from.

        * css/Counter.h: Removed unneeded empty constructor and destructor.

        * css/cssstyleselector.cpp:
        (WebCore::applyCounterList): Added. Stores counter directives in hash tables
        that should allow us to efficiently implement dynamic counter changes. Full
        support will have to wait for a future check-in.
        (WebCore::CSSStyleSelector::applyProperty): Changed counter properties to
        call applyCounterList. Reformatted the code to parse the content property for
        changes to RenderStyle and to handle the case where some the items in the
        content list don't generate any content.

        * editing/visible_units.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlow.cpp:
        * rendering/RenderSlider.cpp:
        Added includes needed because of header changes.

        * html/HTMLLIElement.H: Removed unneeded m_isValued.
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseMappedAttribute): To match test results seen
        in WinIE, ignore values that are 0 or negative, and use new functions in
        RenderListItem to communicate the lack of a valid value.
        (WebCore::HTMLLIElement::attach): More of the same.

        * rendering/CounterNode.h: Made CounterNode be a non-polymorphic class,
        removing all the subclasses. Merged in CounterResetNode. Removed
        m_total from CounterResetNode, because it isn't needed for any of
        the styles (decimal-leading-zero always uses two digits). Removed
        m_hasSeparator and m_willNeedLayout since they aren't needed any more.
        Renamed m_count to m_countInParent for clarify, and named the list
        links the same as their associated functions. Removed many functions
        as well.
        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode): Added new fields.
        (WebCore::CounterNode::computeCountInParent): Added. Used by recount.
        (WebCore::CounterNode::recount): Simplified by removing unused parameter and the
        "get next" idiom. Changed to be iterative instead of recursive so we can handle
        arbitrarily long lists.
        (WebCore::CounterNode::insertAfter): Moved here from CounterResetNode. Updated
        for field name changes. Corrected rule for when to recount.
        (WebCore::CounterNode::removeChild): Moved here from CounterResetNode. Changed
        to only work on nodes without children. Corrected rule for when to recount.
        (WebCore::nextInPreOrderAfterChildren): Added. For debugging only.
        (WebCore::nextInPreOrder): Ditto.
        (WebCore::showTreeAndMark): Ditto.
        (showTree): Ditto.

        * rendering/CounterListItem.h:
        * rendering/CounterResetNode.h:
        * rendering/CounterResetNode.cpp:
        Marked ready to remove. I'll do the remove in a separate patch, since I have
        to update a lot of different make files when I do.

        * rendering/ListMarkerBox.cpp: (WebCore::ListMarkerBox::isText): Changed for the
        change to RenderListMarker.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToFlow): Changed to use functions instead of
        direct field access so the fields can be private and we don't need to be friends.
        (WebCore::RenderBlock::getBaselineOfFirstLineBox): Ditto.
        (WebCore::RenderBlock::getBaselineOfLastLineBox): Ditto.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::initMaxMarginValues): Ditto.
        (WebCore::RenderBlock::firstRootBox): Ditto.
        (WebCore::RenderBlock::lastRootBox): Ditto.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setWidth): Ditto.
        (WebCore::RenderBox::setHeight): Ditto.
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild): Ditto.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::determineStartPosition): Ditto.

        * rendering/RenderContainer.h: Renamed m_first and m_last to m_firstChild
        and m_lastChild. Made them private instead of proected. Removed the
        setFirstChild and setLastChild functions.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::RenderContainer): Updated for field name change.
        Changed all calls to get at fields directly instead of using functions.
        (WebCore::RenderContainer::destroyLeftoverChildren): Ditto.
        (WebCore::updateListMarkerNumbers): Updated for RenderListItem change.
        (WebCore::RenderContainer::addChild): Changed to get at fields directly
        instead of using functions. Also used release() since RenderText::setText
        now takes PassRefPtr.
        (WebCore::RenderContainer::removeChildNode): Changed to get at fields directly
        instead of using functions.
        (WebCore::RenderContainer::updatePseudoChildForObject): Create the anonymous
        box only if at least one of of the items in the content list actually
        generates content. Since a RenderCounter is a RenderText, don't bother making
        a new style for it -- it just shares the style with its parent. Changed code
        to use RenderImage::setCachedImage() instead of of setContentObject().
        Added a call to setIsAnonymousImage() here, which was the only special thing
        that setContentObject() used to do. Pass a reference to the counter to the
        RenderCounter rather than a pointer. Pass document() as the node instead of
        passing the element to RenderCounter, which makes it anonymous automatically,
        and removed the setIsAnonymous call.
        (WebCore::RenderContainer::appendChildNode): Chagned to get at fields directly
        instead of using functions.
        (WebCore::RenderContainer::insertChildNode): Ditto.
        (WebCore::RenderContainer::layout): Ditto.
        (WebCore::RenderContainer::removeLeftoverAnonymousBoxes): Ditto.
        (WebCore::RenderContainer::positionForCoordinates): Ditto.
        (WebCore::RenderContainer::addLineBoxRects): Ditto.

        * rendering/RenderCounter.h: Removed unneeded layout override, never called on a
        text node. Added override of originalString. Replaced CounterData* with a copy of
        the CounterContent -- it's two atomic strings and an integer so it's efficient
        enough to store all three in the render object, and this eliminates the lifetime
        problems we could have if we used a pointer.
        * rendering/RenderCounter.cpp: Removed duplicate copy of list marker code.
        (WebCore::counterMaps): Moved these maps here from RenderObject.
        (WebCore::previousSiblingOrParent): Added.
        (WebCore::lastDescendant): Added.
        (WebCore::previousInPreOrder): Added.
        (WebCore::planCounter): Added.
        (WebCore::findPlaceForCounter): Added.
        (WebCore::counter): New name of function that was named RenderObject::findCounter.
        Also uses a new algorithm that passes all the CSS 2.1 tests.
        (WebCore::RenderCounter::RenderCounter): Changed to take a Document* instead of a
        Node*, since at the moment counters are always anonymous.
        (WebCore::RenderCounter::originalString): Added. This overrides the originalString
        in the RenderText base class so that any text transforms will use the counter's
        value. This code was previously in calcMinMaxWidth.
        (WebCore::RenderCounter::calcMinMaxWidth): Changed to call setInternalString and
        pass originalString -- this uses the counter's value from the counter tree.
        (WebCore::destroyCounterNodeChildren): Added.
        (WebCore::RenderCounter::destroyCounterNodes): Added. Called as needed from
        RenderObject::destroy for objects that have counter nodes.

        * rendering/RenderFlow.h: Made m_continuation private instead of protected.

        * rendering/RenderImage.h: Removed unneeded includes, and unnecessary element()
        function that casts to HTMLElement*. Made image() protected, and made the two
        calcAspectRatio functions private. Removed setContentObject(). Renamed the
        errorOccured() function to isErrorImage() and made it private.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Removed initialization of removed
        m_selectionState field.
        (WebCore::RenderImage::setCachedImage): Rearrange code so it won't try to
        call isErrorImage() on a null image.
        (WebCore::RenderImage::paint): Updated for name change.

        * rendering/RenderListBox.h: Removed unneeded forward declarations.

        * rendering/RenderListItem.h:
        Renamed markerStringValue() to markerText() and made it return a String instead of
        a DeprecatedString. Renamed m_prededfVal to m_explicitValue. Added booleans named
        m_hasExplicitValue and m_isValueUpToDate and marked m_value mutable so it can be
        computed in const member functions.
        (WebCore::RenderListItem::value): Changed to update value on demand at the time
        you ask for it.
        (WebCore::RenderListItem::hasExplicitValue): Added. Use instead of magic -1 value
        to indicate that the item does or does not have an explicit value.
        (WebCore::RenderListItem::explicitValue): Added.
        (WebCore::RenderListItem::setExplicitValue): Added.
        (WebCore::RenderListItem::clearExplicitValue): Added.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem): Updated to not use magic -1 values.
        (WebCore::RenderListItem::setStyle): Removed call to RenderListMarker::setListItem
        since it's not needed any more, and instead pass the list item to the constructor.
        (WebCore::previousListItem): Made parameter const.
        (WebCore::RenderListItem::calcValue): Restructed the function a bit.
        (WebCore::RenderListItem::updateValueNow): Added. Calls calcValue.
        (WebCore::RenderListItem::updateValue): Added. New name for resetValue(). Unlike
        the old version, this no longer calculates the value until it's asked-for later.
        (WebCore::RenderListItem::markerText): Changed to return String rather than a
        DeprecatedString and to return a null string rather than empty string when there
        is no marker.

        * rendering/RenderListMarker.h: Added listMarkerText function -- common code shared
        with anyone who needs to convert a value into text given a list style.
        Changed constructor to take a RenderListItem and figure out the document from that.
        Added isImage() and isText() functions and removed listImage() function. Changed the
        type of the text() function from DeprecatedString to String. Removed the listItem()
        and seListeItem() functions. Made the getRelativeMarkerRect() function private.
        Renamed m_item to m_text and chagned it from DeprecatedString to String. Renamed
        m_listImage to m_image.
        * rendering/RenderListMarker.cpp:
        (WebCore::toRoman): Added range checking to fix buffer overrun for large or negative
        numbers. Rewrote to use a local UChar array and String rather than prepending to a
        DeprecatedString.
        (WebCore::toAlphabetic): Replaces toLetterString, and is more flexible since it takes
        an alphabet array. Changed to match CSS 3 specification by using decimal numbering for
        0 and negative numbers. Rewrote to use a local UChar array and String rather than
        prepending to a DeprecatedString.
        (WebCore::toHebrewUnder1000): Added. Helper function for Hebrew numbers so we can
        handle numbers up to a million.
        (WebCore::toHebrew): Changed to use toHebrewUnder1000, added a special case for
        zero, negative, and too-large numbers.
        (WebCore::toArmenianUnder10000): Added. Used by toArmenian.
        (WebCore::toArmenian): Added.
        (WebCore::toGeorgian): Added.
        (WebCore::toCJKIdeographic): Added.
        (WebCore::listMarkerText): Added. Moved the code here from calcMinMaxWidth, but added
        support for text for the styles disc, circle, square, decimal-leading-zero, hiragana,
        hirigana-iroha, katakana, katakana-iroha, cjk-ideographic, armenian, and georgian.
        Also changed some of the styles to share the new toAlphabetic function.
        (WebCore::RenderListMarker::RenderListMarker): Updated for name changes and list
        item parameter.
        (WebCore::RenderListMarker::~RenderListMarker): Updated for name changes.
        (WebCore::RenderListMarker::setStyle): Updated for name changes.
        (WebCore::RenderListMarker::isImage): Added. Useful helper that unifies the check
        for no image and the error image.
        (WebCore::RenderListMarker::paint): Updated for name changes to to use isImage()
        and rearranged the code a bit.
        (WebCore::RenderListMarker::imageChanged): Updated for name change
        (WebCore::RenderListMarker::calcMinMaxWidth): Updated for name change, fixed a bug
        where we'd leave the old text around if we were using an image-based marker. Also
        changed the code to use isImage() instead of checking m_listImage.
        (WebCore::RenderListMarker::calcWidth): Changed to use isImage().
        (WebCore::RenderListMarker::lineHeight): Changed to use isImage().
        (WebCore::RenderListMarker::baselinePosition): Changed to use isImage().
        (WebCore::RenderListMarker::getRelativeMarkerRect): Changed to use isImage(),
        restructured the code a little.

        * rendering/RenderObject.h: Removed now-uneeded includes. Removed collectBorders()
        and isFormElement(). Made remove() function and m_hasCounterNodeMap public so
        we could remove friend declarations for RenderListItem and RenderView.
        Moved findCounter() to become a private function inside RenderCounter.cpp.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): Fix bug where a contentData() with
        CONTENT_NONE is treated as image content -- only look at the content property
        if it has exactly one entry which is a CONTENT_OBJECT.
        (WebCore::RenderObject::selectionStartEnd): Add const.
        (WebCore::RenderObject::destroy): Moved counter-specific code to
        RenderCounter::destroyCounterNodes.
        (WebCore::RenderObject::recalcMinMaxWidths): Changed code to set m_recalcMinMax
        near the top of the function -- the old code would potentially reset it after it
        was set by the calcMinMaxWidths functions, and possibly skip a future needed
        recalc. That came up in counter test cases. Removed unneeded boolean check right
        after an assertion.

        * rendering/RenderPart.h: Marked two virtual functions virtual for clarity.

        * rendering/RenderReplaced.h: Made shouldPaint be protected, and made
        m_intrinsicWidth, m_intrinsicHeight, and m_selectionState be private.
        Also marked isSelected() const.
        * rendering/RenderReplaced.cpp: Added newly-needed include.
        (WebCore::RenderReplaced::RenderReplaced): Use constructor syntax.
        (WebCore::RenderReplaced::isSelected): Made const and changed to call the
        selectionStartEnd function in the straightforward way.

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects): Use functions instead of direct field
        access so the fields can be private.
        (WebCore::RenderSVGText::relativeBBox): Ditto.

        * rendering/RenderStyle.h: Tweaked formatting. Changed names of CSS3 holders
        to say "rare" instead, since it's not all CSS 3. Renamed CounterData to
        CounterContent, since it's used inside ContentData. Changed names of fields in
        ContentData to have m prefix. Moved content and counter fields into the rare
        non-inherited data object. Removed unneeded assignment operator from a class
        that already inherits from Shared which makes it start out noncopyable.
        * rendering/RenderStyle.cpp: Name changes, plus:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        Updated for added fields (content, counter-reset, counter-increment).
        (WebCore::StyleRareNonInheritedData::~StyleRareNonInheritedData): Ditto.
        (WebCore::StyleRareNonInheritedData::operator==): Reformatted and sorted so it's
        easy to see if any fields are missing.
        (WebCore::operator!=): Added. Compares two CounterContent objects.
        (WebCore::RenderStyle::arenaDelete): Removed code to handle content, which is
        now in the rareNonInheritedData structure.
        (WebCore::RenderStyle::RenderStyle): Ditto.
        (WebCore::RenderStyle::inheritFrom): Ditto.
        (WebCore::RenderStyle::operator==): Ditto.
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::contentDataEquivalent): Added case for counter,
        which previously would be ignored when determining if content is equivalent.
        (WebCore::RenderStyle::clearContent): Added.
        (WebCore::RenderStyle::setContent): Updated for change in content location.
        (WebCore::ContentData::clear): Changed algorithm so that it's not recursive
        and thus can handle a very long list of ContentData.
        (WebCore::operator==): Added. Compares two CounterDirective objects.
        (WebCore::RenderStyle::counterDirectives): Added.
        (WebCore::RenderStyle::accessCounterDirectives): Added.

        * rendering/RenderTable.h: Made m_currentBorder const to better reflect the
        paint algorithm.
        * rendering/RenderTable.cpp: (WebCore::RenderTable::paint): Changed to use
        Vector instead of DeprecatedValueList for the border styles, and to sort
        rather than inserting in sorted order as we go. Put the code to loop through
        the nodes and collect border styles here instead of in a RenderObject virtual
        function. Also set m_currentBorder to 0 after the loop for greater clarity.

        * rendering/RenderTableCell.h: Added a typedef for a vector of border values.
        Removed the virtual collectBorders and replaced with the non-virtual named
        collectBorderStyles. Also added a static member function named sortBorderStyles.
        * rendering/RenderTableCell.cpp:
        (WebCore::CollapsedBorders::CollapsedBorders): Removed unneeded constructor
        parameter.
        (WebCore::addBorderStyle): Changed to use a vector instead of a
        DeprecatedValueList. Wrote out a loop since Vector doesn't have a contains
        member function. Removed the code to insert the border at a sorted location;
        instead we have a separate call to sort the border styles
        (WebCore::RenderTableCell::collectBorderStyles): Renamed, and changed the
        parameter type.
        (WebCore::compareBorderStylesForQSort): Added.
        (WebCore::RenderTableCell::sortBorderStyles): Added.

        * rendering/RenderText.h: Changed StringImpl parameters in setText functions
        to be PassRefPtr; added a new setInternalString function. Made a bunch of the
        member functions private and made all the data members private instead of
        protected.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setStyle): Restructure a bit for clarity. Fix case where
        the old style has a different security than the new style. Use release() since
        RenderText::setText now takes PassRefPtr. Always call cacheWidths here.
        (WebCore::RenderText::setTextWithOffset): Changed to take the string as a
        PassRefPtr instead of a raw pointer.
        (WebCore::isInlineFlowOrEmptyText): Added.
        (WebCore::RenderText::setInternalString): Refactored core of setText into a
        separate protected member function that can be used RenderCounter. Changed
        the text security square character to match what's used in list markers.
        Changed the text transform switch statement so that gcc will warn us if we add
        a new value and don't add a case for it.
        (WebCore::RenderText::setText): Refactored most of the function into
        setInternalString. Removed the call to cacheWidths -- that's now done in the
        setStyle function only.

        * rendering/RenderView.h:
        * rendering/RenderView.cpp: (WebCore::RenderView::selectionStartEnd): Now const.

        * rendering/RenderWidget.cpp: Added newly-needed include.
        (WebCore::RenderWidget::setSelectionState): Don't bother setting m_selectionState
        here since RenderReplaced::setSelectionState already does that.

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Rubber stamped by Adam.
        
        Move even more code to .cpp files.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::canLoad):
        (WebCore::FrameLoader::initialRequest):
        (WebCore::FrameLoader::receivedData):
        (WebCore::FrameLoader::setRequest):
        (WebCore::FrameLoader::setResponse):
        (WebCore::FrameLoader::willUseArchive):
        (WebCore::FrameLoader::handleUnimplementablePolicy):
        (WebCore::FrameLoader::cannotShowMIMEType):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        (WebCore::FrameLoader::checkNavigationPolicy):
        (WebCore::FrameLoader::checkContentPolicy):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadAllowingStaleData):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::finishedLoading):
        (WebCore::FrameLoader::continueAfterWillSubmitForm):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::post):
        (WebCore::FrameLoader::isReloading):
        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::startLoadingMainResource):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::cancelMainResourceLoad):
        (WebCore::FrameLoader::identifierForInitialRequest):
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::originalRequest):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::callContinueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::checkNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::callContinueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::applyUserAgent):
        (WebCore::PolicyCheck::PolicyCheck):
        (WebCore::PolicyCheck::clear):
        (WebCore::PolicyCheck::set):
        (WebCore::PolicyCheck::call):
        (WebCore::PolicyCheck::clearRequest):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setIdentifier):
        (WebCore::ResourceLoader::identifier):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        (WebCore::FrameLoader::didChangeTitle):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchCreatePage):

2007-01-05  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12079
          Nested tables don't repaint properly when a certain row is added

        Tests: fast/repaint/table-section-repaint.html
               fast/repaint/table-section-overflow.html

        Fixed repainting when table sections move during layout.

        Made table cells' overflows propagate to table sections and gave tables
        overflows.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): Added computation of horizontal and vertical overflows
        based on the caption's and the table sections' overflows.
        Added checks for table sections that change position during layout. When that happens,
        we assume all sections below the first section that moved also moved, and repaint
        everything downwards from there.
        Added calls to repaintDuringLayoutIfMoved() for the caption.
        Changed the way table sections are iterated over and added a FIXME to change it again
        once bug 12124 is fixed.
        (WebCore::RenderTable::paint): Changed to paint overflow.
        (WebCore::RenderTable::outerBorderBottom):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows): Added code to compute the section's overflow
        and a flag saying whether any cells in this section overflow.
        (WebCore::RenderTableSection::paint): Changed to paint overflow. If any cell
        in the section has overflow, then all cells are given a chance to paint. This is needed
        because there can be internal overflow, and external overflow can be coming from any
        cell inside.
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::overflowWidth):
        (WebCore::RenderTableSection::overflowLeft):

2007-01-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/4863434> Wrong contextual menu appears for 
        textarea and input elements at http://www.apple.com/feedback/
        ical.html

        No test cases added since context menus are not in DRT.

        * page/ContextMenuController.cpp: 
        (WebCore::ContextMenuController::handleContextMenuEvent): Call 
        EventHandler's hitTestResultAtPoint() instead of just hit testing 
        the layer.

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Rubber-stamped by Adam.
        
        Move a bunch of platform independent code over to DocumentLoader.cpp

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::canonicalizedTitle):
        (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::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::setMainDocumentError):
        (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::setFrame):
        (WebCore::DocumentLoader::attachToFrame):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::prepareForLoadStart):
        (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/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::committedLoad):
        (WebCore::FrameLoader::setMainDocumentError):
        (WebCore::FrameLoader::mainReceivedCompleteError):
        (WebCore::FrameLoader::mainReceivedError):
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::fileDoesNotExistError):
        (WebCore::FrameLoader::mainResourceData):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::unreachableURL):
        * loader/mac/FrameLoaderMac.mm:

2007-01-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Seidel

        http://bugs.webkit.org/show_bug.cgi?id=12117
        Fixes null deref when opening links from a gmail account

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Null check m_currentHistoryItem
        (WebCore::FrameLoader::updateHistoryForClientRedirect): Ditto

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Move some now cross platform functions over to ResourceLoader.cpp in an attempt to fix the non Mac builds.
        
        * loader/CachedResource.h:
        (WebCore::CachedResource::setAllData):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::resourceData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/mac/LoaderFunctionsMac.mm:
        * loader/mac/ResourceLoaderMac.mm:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::platformDataSize):
        * platform/network/ResourceHandle.h:

2007-01-05  David Hyatt  <hyatt@apple.com>

        Back out fix for 12114.  I missed rule #5 in the float positioning part of the CSS2.1 spec.  Keep all
        the code cleanup though.

        Reviewed by mitz

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

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        Add a shared buffer class which is backed by either a vector or an NSData object. This object can also
        be held in a custom NSData subclass. Use this in the loader wherever NSData was used.
        
        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedResource.h:
        (WebCore::CachedResource::allData):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didFail):
        * loader/loader.cpp:
        (WebCore::Loader::didFinishLoading):
        * loader/loader.h:
        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::setMainResourceData):
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::mainResourceData):
        * loader/mac/ImageDocumentMac.mm:
        (WebCore::finishImageLoad):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        (WebCore::CachedResource::setAllData):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::clearResourceData):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * platform/KURL.h:
        * platform/SharedBuffer.cpp: Added.
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::size):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::clearPlatformData):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        * platform/SharedBuffer.h: Added.
        * platform/mac/SharedBufferMac.mm: Added.
        (-[SharedBufferData dealloc]):
        (-[SharedBufferData finalize]):
        (-[SharedBufferData initWithSharedBuffer:]):
        (-[SharedBufferData length]):
        (-[SharedBufferData bytes]):
        (WebCore::SharedBuffer::wrapNSData):
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createNSData):
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        (WebCore::SharedBuffer::platformDataSize):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::clearPlatformData):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::bufferedData):

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=12120
        REGRESSION(r18605): Safari snippet editor no longer works
        
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        Put back the code change in r18607.
        
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):
        Convert nil NSURLs to null KURLs.

2007-01-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=7296
        Disable JavaScript exceptions when dynamically changing CSS properties.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put): Removed the Dashboard quirk logic.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Don't raise an exception if parsing fails.

2007-01-05  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by hyatt.
        
        http://bugs.webkit.org/show_bug.cgi?id=12109
        
        Fix layer visibility in some cases with nested layers.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus):

2007-01-05  Lars Knoll <lars@trolltech.com>

        Make it compile with gcc 4.1

        * rendering/RenderTableSection.h:

2007-01-04  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff, cheered by others.

        Dead code elimination.

        All layout tests pass.

        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:

2007-01-04  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Fix: <rdar://4800335> REGRESSION: shift-tabbing from location field
        goes to first field rather than last (businessweek.com)

        Fix: <rdar://4800373> REGRESSION: tabbing from last control focuses
        nothing visible (busniessweek.com)

        Handle tabbing into/out of subframes in WebCore instead of letting
        AppKit do the dirty work. This change also fixes a number of bugs and
        changes some behavior to match other browsers:
          - No frames receive a focus event when the page is first loaded.
          - When a frame is clicked or focused with the keyboard, it receives
            a focus event and all other frames receive a blur event.
          - tabindex values are clamped to the range of a signed short, rather
            than overflowing within an unsigned short.
          - tabindex is respected on frame owner elements, even though HTML4
            says it shouldn't be.
          - Subframes will be focused when tabbing if they don't contain any
            focusable elements within them (it would be nice to only focus the
            frame if it has scrollbars).

        Renamed SelectionDirection to FocusDirection and put it in its own file.

        * page/FocusDirection.h: Added.
        (WebCore::):
        * page/mac/WebCoreFrameBridge.mm: Updated for renames.
        (-[WebCoreFrameBridge nextKeyView]):
        (-[WebCoreFrameBridge previousKeyView]):
        (-[WebCoreFrameBridge nextKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge previousKeyViewInsideWebFrameViews]):

        Moved advanceFocus from EventHandler to FocusController and added
        support for moving into/out of subframes..

        * page/EventHandler.cpp: Moved advanceFocus to FocusController.
        * page/EventHandler.h: Ditto.
        * page/FocusController.cpp:
        (WebCore::deepFocusableNode): Static helper function to find focusable
        nodes nested within frames.
        (WebCore::FocusController::advanceFocus): Moved from EventHandler and
        rewritten to handle subframes.
        * page/FocusController.h: Added advanceFocus declaration.
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Updated for the move
        of advanceFocus to FocusController.
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::isFrameOwnerElement): New method.
        (WebCore::HTMLFrameOwnerElement::isKeyboardFocusable): New virtual
        implementation used to trick Document::nextFocusableNode so that we
        can focus frames.

        Rewrote/renamed
        Document::nextFocusableNode/Document::previousFocusableNode.

        * dom/Document.cpp:
        (WebCore::nextNodeWithExactTabIndex): New static helper
        function.
        (WebCore::previousNodeWithExactTabIndex): Ditto.
        (WebCore::nextNodeWithGreaterTabIndex): Ditto.
        (WebCore::previousNodeWithLowerTabIndex): Ditto.
        (WebCore::Document::nextFocusableNode): Renamed from nextFocusedNode,
        and rewritten with much simpler logic.
        (WebCore::Document::previousFocusableNode): Ditto.
        * dom/Document.h: Updated declarations for renames.
        * page/mac/EventHandlerMac.mm: Updated for rename of SelectionDirection
        to FocusDirection.
        (WebCore::EventHandler::nextKeyViewInFrame): Updated for renames.
        (WebCore::EventHandler::nextKeyViewInFrameHierarchy): Ditto.
        (WebCore::EventHandler::nextKeyView): Ditto.
        (WebCore::EventHandler::focusDocumentView): Added call to
        setFocusedFrame when focusing the document view.
        (WebCore::EventHandler::passMouseDownEventToWidget): Removed LOG_ERROR
        when a nil NSView is returned from AppKit, as this is a fairly common
        occurrence when a RenderWidget has a border.
        (WebCore::EventHandler::passWheelEventToWidget): Added a nil-check of
        the hit-tested NSView.

        Changed storage of tabIndex to a signed short, and added clamping of
        tabindex attribute values to match Firefox's behavior.

        * dom/Node.h: Use a signed short to store m_tabIndex.
        (WebCore::Node::isFrameOwnerElement): New method.
        (WebCore::Node::tabIndex): Updated for signedness.
        (WebCore::Node::setTabIndex): Ditto.
        * html/HTMLAnchorElement.cpp: Remove implementation of tabIndex() so
        that Node::tabIndex() will be called instead and return the clamped
        value (which matches Firefox's behavior).
        * html/HTMLAnchorElement.h: Ditto.
        * html/HTMLAreaElement.cpp: Ditto.
        * html/HTMLAreaElement.h: Ditto.
        * html/HTMLGenericFormElement.cpp: Ditto.
        * html/HTMLGenericFormElement.h: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLObjectElement.h: Ditto.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Clamp tabIndex to the
        range of a signed short to match Firefox.

        Added two new Chrome methods for transferring focus out of the
        WebView.

        * page/Chrome.cpp:
        (WebCore::Chrome::canTakeFocus):
        (WebCore::Chrome::takeFocus):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/graphics/svg/SVGImageEmptyClients.h: Fixed typo "CromeClient" -> "ChromeClient".
        (WebCore::SVGEmptyChromeClient::~SVGEmptyChromeClient):
        (WebCore::SVGEmptyChromeClient::canTakeFocus):
        (WebCore::SVGEmptyChromeClient::takeFocus):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData): Fixed typo.

        Miscellaneous:

        * WebCore.exp: Updated/sorted symbols.
        * WebCore.xcodeproj/project.pbxproj: Made FocusController.h Private so
        WebKit can access it.

2007-01-04  Brady Eidson  <beidson@apple.com>

        Reverted Anders' change to fix the world

        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):

2007-01-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig.

        - http://bugs.webkit.org/show_bug.cgi?id=12078
          Clean up RenderTable*

        - Coding style cleanup.
        - Canceled AutoTableLayout and FixedTableLayout being friend classes of
          RenderTable. Instead, added public accessors to RenderTable for what
          the table layout classes need and changed TableLayout::calcMinMaxWidth()
          to take references to the caller's min and max widths.
        - Made RenderTableSection's grid protected and moved code that accessed it
          from RenderTable into RenderTableSection.

        No test possible (no change to functionality).

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout):
        * rendering/FixedTableLayout.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::~RenderTable):
        (WebCore::RenderTable::setStyle):
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::setCellWidths):
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::calcMinMaxWidth):
        (WebCore::RenderTable::splitColumn): Factored out the section work
        to RenderTableSection::splitColumn().
        (WebCore::RenderTable::appendColumn): Factored out the section work
        to RenderTableSection::appendColumn().
        (WebCore::RenderTable::colElement):
        (WebCore::RenderTable::recalcSections):
        (WebCore::RenderTable::removeChildNode):
        (WebCore::RenderTable::calcBorderLeft):
        (WebCore::RenderTable::calcBorderRight):
        (WebCore::RenderTable::outerBorderTop):
        (WebCore::RenderTable::outerBorderBottom):
        (WebCore::RenderTable::outerBorderLeft):
        (WebCore::RenderTable::outerBorderRight):
        (WebCore::RenderTable::sectionAbove):
        (WebCore::RenderTable::sectionBelow):
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        (WebCore::RenderTable::getOverflowClipRect):
        (WebCore::RenderTable::dump):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::getColumnPos):
        (WebCore::RenderTable::hBorderSpacing):
        (WebCore::RenderTable::vBorderSpacing):
        (WebCore::RenderTable::getRules):
        (WebCore::RenderTable::cellPadding):
        (WebCore::RenderTable::setCellPadding):
        (WebCore::RenderTable::ColumnStruct::ColumnStruct):
        (WebCore::RenderTable::columns): Added this accessor.
        (WebCore::RenderTable::columnPositions): Added this accessor.
        (WebCore::RenderTable::header):
        (WebCore::RenderTable::footer):
        (WebCore::RenderTable::firstBody):
        (WebCore::RenderTable::numEffCols):
        (WebCore::RenderTable::spanOfEffCol):
        (WebCore::RenderTable::colToEffCol):
        (WebCore::RenderTable::effColToCol):
        (WebCore::RenderTable::bordersPaddingAndSpacing):
        (WebCore::RenderTable::needsSectionRecalc):
        (WebCore::RenderTable::setNeedsSectionRecalc): Renamed setNeedSectionRecalc()
        to this.
        (WebCore::RenderTable::hasSections):
        (WebCore::RenderTable::recalcSectionsIfNeeded):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::destroy):
        (WebCore::RenderTableCell::updateFromElement):
        (WebCore::RenderTableCell::styleOrColWidth):
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect):
        (WebCore::RenderTableCell::absolutePosition):
        (WebCore::RenderTableCell::baselinePosition):
        (WebCore::RenderTableCell::setStyle):
        (WebCore::compareBorders):
        (WebCore::RenderTableCell::collapsedTopBorder):
        (WebCore::RenderTableCell::paint):
        (WebCore::collapsedBorderStyle):
        (WebCore::CollapsedBorder::CollapsedBorder):
        (WebCore::CollapsedBorders::CollapsedBorders):
        (WebCore::CollapsedBorders::addBorder):
        (WebCore::CollapsedBorders::nextBorder):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::dump):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::colSpan):
        (WebCore::RenderTableCell::setColSpan):
        (WebCore::RenderTableCell::rowSpan):
        (WebCore::RenderTableCell::setRowSpan):
        (WebCore::RenderTableCell::col):
        (WebCore::RenderTableCell::setCol):
        (WebCore::RenderTableCell::row):
        (WebCore::RenderTableCell::setRow):
        (WebCore::RenderTableCell::section):
        (WebCore::RenderTableCell::table):
        (WebCore::RenderTableCell::yPos):
        (WebCore::RenderTableCell::setCellTopExtra):
        (WebCore::RenderTableCell::setCellBottomExtra):
        (WebCore::RenderTableCell::borderTopExtra):
        (WebCore::RenderTableCell::borderBottomExtra):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::destroy):
        (WebCore::RenderTableRow::setStyle):
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::layout):
        (WebCore::RenderTableRow::getAbsoluteRepaintRect):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::section):
        (WebCore::RenderTableRow::table):
        (WebCore::RenderTableRow::lineHeight):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::destroy):
        (WebCore::RenderTableSection::setStyle):
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        (WebCore::RenderTableSection::calcOuterBorderTop):
        (WebCore::RenderTableSection::calcOuterBorderBottom):
        (WebCore::RenderTableSection::calcOuterBorderLeft):
        (WebCore::RenderTableSection::calcOuterBorderRight):
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::recalcCells):
        (WebCore::RenderTableSection::clearGrid):
        (WebCore::RenderTableSection::numColumns):
        (WebCore::RenderTableSection::appendColumn): Added. Moved code from
        RenderTable::appendColumn() into here.
        (WebCore::RenderTableSection::splitColumn): Added. Moved code from
        RenderTable::splitColumn() into here.
        (WebCore::RenderTableSection::removeChildNode):
        (WebCore::RenderTableSection::dump):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::renderName):
        (WebCore::RenderTableSection::isTableSection):
        (WebCore::RenderTableSection::lineHeight):
        (WebCore::RenderTableSection::table):
        (WebCore::RenderTableSection::cellAt):
        (WebCore::RenderTableSection::numRows):
        (WebCore::RenderTableSection::recalcCellsIfNeeded):
        (WebCore::RenderTableSection::needsCellRecalc):
        (WebCore::RenderTableSection::setNeedsCellRecalc):
        (WebCore::RenderTableSection::getBaseline):
        * rendering/TableLayout.h:

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=12120
        REGRESSION(r18605): Safari snippet editor no longer works
        
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        Fix logic so applewebdata: URLs no longer cause the underlying URL to be fetched .

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Move all remaining instances of NSURLRequest over to ResourceRequest (well, pretty much all).

        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::startLoadingMainResource):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::load):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::load):
        (WebCore::SubresourceLoader::create):
        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Move more NSURLRequests over to ResourceRequests.
        
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::request):
        * loader/SubresourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::cancelledError):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        * platform/network/ResourceRequest.cpp:
        (WebCore::ResourceRequest::isNull):
        * platform/network/ResourceRequest.h:

2007-01-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        http://bugs.webkit.org/show_bug.cgi?id=12119
        Changing the behavior of HistoryItem::pageCache() this morning also necessitated
        changing the behavior of HistoryItem::hasPageCache()

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::hasPageCache): Add the same pendingRelease check pageCache() has

2007-01-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12043
          Another assertion failure in WebCore::RenderObject::drawBorder

        Test: fast/borders/border-radius-huge-assert.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip): Fixed the check for border radii
        that do not fit in the given width or height to work with radii that sum up to
        more than MAX_INT.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorder): Ditto.

2007-01-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        <rdar://problem/4861080>
        GMail Editor: Crash when dropping content into certain list items
        
        A rendering bug (4907469) creates unwanted space at the top of a 
        list item when its contents are wrapped in span.  Dropping content 
        inside that space causes a crash because positionForCoordinates 
        fails there and the code that creates drag carets can't handle it.

        * page/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _visiblePositionForPoint:]): Added the
        that's inside click handling for the case where 
        positionForCoordinates returns null.  We should also fix 
        positionForCoordinates but that's less important: now its only side 
        effect is that a no-op drop is performed instead of a snap back 
        when you drop the contents of one of these list items its own 
        unwanted space.

2007-01-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12118 REGRESSION 
        (Context menus): No context menu displayed when clicking outside a 
        short document

        No test case added since we do not currently have a way to automate 
        context menus. 

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): If the 
        hit test does not find a node, use the document node.

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Convert NSURLRequest to ResourceRequest in a few places

        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::identifierForInitialRequest):
        (WebCore::FrameLoader::willUseArchive):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::download):
        (WebCore::SVGEmptyFrameLoaderClient::willUseArchive):

2007-01-04  David Hyatt  <hyatt@apple.com>

        Bug 12114 fix, make sure left/right floats are allowed to go above
        other floats of opposite alignment.

        Reviewed by aroben

        fast/block/float/independent-align-positioning.html

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

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=12116
        REGRESSION: ASSERTION FAILED: URL in +[WebDataProtocol _webIsDataProtocolURL:]
        
        <rdar://problem/4908910> 
        REGRESSION: After switching to Bookmarks view, the browser window is completely empty (no bookmarks are displayed)
        
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        Initialize m_isNull

2007-01-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Turn on WebCore context menus.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::defaultEventHandler): Turn on WebCore 
        menus.
        * page/ContextMenuClient.h: Name change and have the 
        former getCustomMenuFromDefaultItems function return the 
        PlatformMenuDescription since it feels funny to have the client set 
        the new platform description.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::handleContextMenuEvent): Above 
        name change.
        (WebCore::ContextMenuController::contextMenuItemSelected): Use 
        local variable.
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendSpeechSubMenu): Fix silly mistake -- make 
        "Stop speaking" actually stop speaking.
        * platform/graphics/svg/SVGImageEmptyClients.h: Name change and 
        have the former getCustomMenuFromDefaultItems function return the 
        PlatformMenuDescription since it feels funny to have the client set 
        the new platform description.
       (WebCore::SVGEmptyContextMenuClient::getCustomMenuFromDefaultItems):

2007-01-04  Mitz Pettel  <mitz@webkit.org>

        Reviewed and landed by Brady

        - fix http://bugs.webkit.org/show_bug.cgi?id=12087
          REGRESSION: Reproducible crash going back in Back/Forward history

        Allow a PageCache that is pending release to be resurrected by its
        HistoryItem instead of creating a new PageCache. This avoids the
        the condition of having two PageCaches for the same HistoryItem, one
        current and one pending release but not yet released, which was causing
        this and other bugs before.
        
        Replaced the vector of PageCaches pending release with a set of
        HistoryItems that are pending release of their PageCache.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::setHasPageCache): Check for an existing PageCache
        pending release, and if found, resurrect it by canceling the release.
        (WebCore::HistoryItem::pageCache): Return 0 if the PageCache is pending
        release.
        (WebCore::itemsWithPendingPageCacheToRelease): Renamed pendingPageCacheToRelease
        to this. This method now returns a HashSet of HistoryItems that have scheduled
        their PageCaches for release.
        (WebCore::HistoryItem::releasePageCachesOrReschedule): Renamed releasePageCache
        to this.
        (WebCore::HistoryItem::releasePageCache): Added. Actually closes and releases
        the PageCache.
        (WebCore::HistoryItem::releaseAllPendingPageCaches): Rolled closeObjectsInPendingPageCaches
        into this method.
        (WebCore::HistoryItem::scheduleRelease):
        (WebCore::HistoryItem::cancelRelease): Added.
        * history/HistoryItem.h: Removed unused declaration of scheduleReleaseTimer()
        * history/HistoryItemTimer.cpp:
        (WebCore::HistoryItemTimer::HistoryItemTimer):
        (WebCore::HistoryItemTimer::callReleasePageCachesOrReschedule):
        * history/HistoryItemTimer.h:

2007-01-04  David Hyatt  <hyatt@apple.com>

        Just make the synthetic bold offset always be 1.0.  This fixes bug
        9534, synthetic bold looks doubled.

        Reviewed by olliej

        * platform/mac/FontDataMac.mm:
        (WebCore::FontData::platformInit):

2007-01-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Convert almost all occurrences of NSURLResponse to ResourceResponse.

        * WebCore.exp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/loader.h:
        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/mac/LoaderFunctionsMac.mm:
        (WebCore::CheckCacheObjectStatus):
        * loader/mac/MainResourceLoaderMac.mm:
        (WebCore::MainResourceLoader::isPostOrRedirectAfterPost):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::loadNow):
        * loader/mac/NetscapePlugInStreamLoaderMac.mm:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::response):
        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::download):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchWillSendRequest):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidReceiveResponse):
        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::SVGEmptyFrameLoaderClient::incrementProgress):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceResponse.cpp:
        (WebCore::ResourceResponse::isHTTP):
        * platform/network/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::isNull):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):

2007-01-03  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fix for <rdar://problem/4887422>
        http://bugs.webkit.org/show_bug.cgi?id=11848
        REGRESSION (SearchField): Search field on developer.apple.com not drawn with top/bottom borders (11848)

        Test: fast/forms/searchfield-heights.html

        Override the border and the height for search fields that use -webkit-appearance: searchfield.

        * css/html4.css: Use box-sizing: border-box for search fields.  We don't need to have the border-box quirk
          that we use for the other text fields for this control.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::searchFieldSizes): Added.
        (WebCore::RenderThemeMac::setSearchFieldSize): Added.
        (WebCore::RenderThemeMac::adjustSearchFieldStyle): Override the border and the height of the search field.

2007-01-04  Lars Knoll <lars@trolltech.com>

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::inputElementAltText):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
            Added missing stubs.

2007-01-04  Peter Kasting  <pkasting@google.com>

        Reviewed by Alexey.

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

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        * platform/graphics/Image.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::adjustLineToPixelBoundaries):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawTiled):
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::Image::loadPlatformResource):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::userIdleTime):
        (WebCore::BitmapImage::drawTiled):
        (WebCore::BitmapImage::getHBITMAP):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):
        (WebCore::DocumentLoader::originalRequest):
        (WebCore::DocumentLoader::request):
        (WebCore::DocumentLoader::unreachableURL):
        (WebCore::DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (WebCore::DocumentLoader::replaceRequestURLForAnchorScroll):
        (WebCore::DocumentLoader::setCommitted):
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::prepareForLoadStart):
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::title):
        (WebCore::DocumentLoader::urlForHistory):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::referrer):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::applyUserAgent):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::PageCache::close):
        (WebCore::ResourceHandle::willLoadFromCache):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::SearchPopupMenu):

2007-01-04  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11611
        REGRESSION: No http referer header sent on XMLHttpRequest

        Test: http/tests/xmlhttprequest/referer.html

        * loader/FrameLoader.h: Removed FrameLoader::addExtraFieldsToRequest(NSMutableURLRequest*, bool, bool),
        which is no longer used.
        * loader/mac/FrameLoaderMac.mm: Ditto.
        * WebCore.exp: Do not export this method (WebKit doesn't use it).

        * loader/mac/SubresourceLoaderMac.mm:
        (WebCore::SubresourceLoader::create): Rewrote to create the request with ResourceRequest::nsURLRequest.

        * platform/PlatformString.h:
        (WebCore::operator!): Added. Previously, attempts to use operator! on a String would result 
        with an NSString* conversion, which never returns nil. This was causing a problem in SubresourceLoader::create().

2007-01-04  Lars Knoll <lars@trolltech.com>


        Make the Qt build compile again.

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

2007-01-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5164
          Non-integer percentages are incorrectly rounded down in Safari

        Test: fast/css/percentage-non-integer.html

        Added floating point constructor and accessors to Length for use with
        Percent lengths only. The raw value of a percent length is the integer
        part of a constant multiple of the original double value. The constant
        is percentScaleFactor, which is currently 128.
        
        Added assertions that the correct constructors and accessors are used
        depending on the type: the double-based percent(), setValue() and Length()
        for the Percent type, and the integer-based value(), setValue() and Length()
        for all other types.
        
        calcValue() and calcMinValue() work the same as before, regardless of the
        type.

        Added helpers for testing if the value is 0, positive, negative or undefined
        without having to check the type first.
        
        Added raw value accessors. These are useful for doing integer math and
        comparisons with scaled percent values or doing Length type-agnostic math.

        Changed the rest of the code to use the appropriate accessors and helpers.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForLength):
        (WebCore::primitiveValueFromLength):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundSize):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        * platform/StringImpl.cpp:
        (WebCore::parseLength):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        (WebCore::AutoTableLayout::calcPercentages):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::layout):
        * rendering/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::value):
        (WebCore::Length::rawValue):
        (WebCore::Length::percent):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::isUndefined):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        * rendering/RenderBox.cpp:
        (WebCore::cacluateBackgroundSize):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcReplacedWidth):
        (WebCore::RenderBox::calcReplacedHeight):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteVertical):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::lineHeight):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::Marquee::direction):
        (WebCore::Marquee::start):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::lineHeight):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Added FIXMEs.
        * rendering/RenderStyle.h:
        (WebCore::LengthBox::nonZero):
        (WebCore::RenderStyle::initialLineHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::layoutRows):

2007-01-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11744
          Setting the 'content' property dynamically has no effect

        Test: fast/css/content-dynamic.html

        * dom/Node.cpp:
        (WebCore::Node::diff): Changed to return 'Detach' if the styles' content
        data are not equivalent.

2007-01-03  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12082
          REGRESSION (r18333): Crash in RenderFrameSet::layOutAxis()

        Test: fast/frames/negative-remaining-length-crash.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis): Treat negative availableLength
        as zero.

2007-01-03  John Sullivan  <sullivan@apple.com>

        Written by Darin over my shoulder; reviewed by me

        - fixed <rdar://problem/4907437> Find doesn't work if invoked when a form field is focused

        * page/Frame.cpp:
        (WebCore::isInShadowTree):
        new helper function used by findString
        (WebCore::Frame::findString):
        when deciding whether to start from the selection, ignore selections that are in
        a shadow tree (i.e. in a form control)

2007-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateHistoryForCommit): Null check the documentLoader

2007-01-03  David Hyatt  <hyatt@apple.com>

        Relax the display type restriction a little bit for generated content inside
        inlines.  We still don't allow block display types like we should (since this
        will cause a crash), but we at least handle inline-table and inline-block now.

        Reviewed by beth

        fast/css-generated-content/inline-display-types.html

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::updatePseudoChildForObject):

2007-01-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john
        
        <rdar://problem/4663571> Spell checking won't cross boundary of individual To-Do item
        
        No layout tests because advanceToNextMisspelling isn't yet exposed to automated tests.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::advanceToNextMisspelling): Confine spell checking to
        the highest editable root, instead of the lowest.  Use firstEditablePosition...
        to look for an editable position.

2007-01-03  Beth Dakin  <bdakin@apple.com>

        Fixing silly mistake. 

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Called wrong string 
        function.

2007-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        http://bugs.webkit.org/show_bug.cgi?id=12093 - Assertion in certain SVG layout tests
        I can't really think of a cleaner way to fix this then to help these SVG cases avoid
        the ASSERT - hopefully we can clean up the svg-as-image situation as the loader stabilizes 
        and we find better ways to handle it...

        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::urlForHistory): empty-check the url before passing it to the
        ASSERTing method

2007-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - removed some obsolete source files

        * CMakeLists.txt: Removed obsolete files.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * html/HTMLGenericFormElement.h: Removed reference to RenderFormElement.

        * platform/qt/ComboBoxQt.cpp: Removed.
        * platform/qt/LineEditQt.cpp: Removed.
        * platform/qt/ListBoxQt.cpp: Removed.
        * platform/qt/TextEditQt.cpp: Removed.
        * rendering/RenderFormElement.cpp: Removed.
        * rendering/RenderFormElement.h: Removed.
        * rendering/RenderLabel.cpp: Removed.
        * rendering/RenderLabel.h: Removed.

2007-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix bug where :after content appears backwards

        Test: fast/css-generated-content/after-order.html

        * rendering/RenderBlock.cpp:
        (WebCore::isAfterContent): Added.
        (WebCore::RenderBlock::addChildToFlow): Use isAfterContent.
        * rendering/RenderInline.cpp:
        (WebCore::isAfterContent): Added.
        (WebCore::RenderInline::addChildToFlow): Use isAfterContent.

2007-01-03  David Hyatt  <hyatt@apple.com>

        Implement box-shadow parsing... getting it all into the RenderStyle.

        Reviewed by beth

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPropertyNames.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCSS3NonInheritedData::StyleCSS3NonInheritedData):
        (WebCore::StyleCSS3NonInheritedData::operator==):
        (WebCore::StyleCSS3NonInheritedData::shadowDataEquivalent):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/RenderStyle.h:
        (WebCore::RenderStyle::boxShadow):

2007-01-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Call into WebKit to get localized strings for all of the context 
        menu item titles.

        * page/mac/WebCoreViewFactory.h:
        * platform/ContextMenu.cpp:
        (WebCore::createAndAppendFontSubMenu):
        (WebCore::createAndAppendSpellingAndGrammarSubMenu):
        (WebCore::createAndAppendSpellingSubMenu):
        (WebCore::createAndAppendSpeechSubMenu):
        (WebCore::createAndAppendWritingDirectionSubMenu):
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchInSpotlight):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagShowFonts):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagStyles):
        (WebCore::contextMenuItemTagShowColors):
        (WebCore::contextMenuItemTagSpeechMenu):
        (WebCore::contextMenuItemTagStartSpeaking):
        (WebCore::contextMenuItemTagStopSpeaking):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):

2007-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin and Geoff

        http://bugs.webkit.org/show_bug.cgi?id=12105 - Crash visiting Acid2 test page
        -Replace lost "free nil checking" in the WebKit->WebCore conversion of the BackForwardList
        -Changed ::createItem and ::createItemTree to ::createHistoryItem and ::createHistoryItemTree

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::createHistoryItem):
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        (WebCore::FrameLoader::createHistoryItemTree):
        (WebCore::FrameLoader::updateHistoryForInternalLoad):
        * loader/FrameLoader.h:

2007-01-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.
        
        Allow plugin elements to handle off events to their widgets.
        
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * html/HTMLPlugInElement.h:
        * platform/Widget.h:
        (WebCore::Widget::handleEvent):

2007-01-03  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCore.pro:
        * history/qt/PageCacheQt.cpp: Added.
        (WebCore::PageCache::close):
        * loader/qt/DocumentLoaderQt.cpp:
        (WebCore::DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (WebCore::DocumentLoader::urlForHistory):
        * loader/qt/FrameLoaderQt.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::applyUserAgent):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadsBlocked):
        (WebCore::ResourceHandle::willLoadFromCache):

2007-01-02  Brady Eidson  <beidson@apple.com>

        Reviewed extensively and repeatedly by Darin

        <rdar://problem/4887137> - WebCore Back/Forward Cache

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:

        * bridge/mac/WebCorePageState.h: Removed.
        * bridge/mac/WebCorePageState.mm: Removed.

        * history/BackForwardList.cpp: Added - This largely emulates the design of WebBackForwardList
        (WebCore::BackForwardList::BackForwardList):
        (WebCore::BackForwardList::~BackForwardList):
        (WebCore::BackForwardList::addItem):
        (WebCore::BackForwardList::goBack):
        (WebCore::BackForwardList::goForward):
        (WebCore::BackForwardList::goToItem):
        (WebCore::BackForwardList::backItem):
        (WebCore::BackForwardList::currentItem):
        (WebCore::BackForwardList::forwardItem):
        (WebCore::BackForwardList::backListWithLimit):
        (WebCore::BackForwardList::forwardListWithLimit):
        (WebCore::BackForwardList::capacity):
        (WebCore::BackForwardList::setCapacity):
        (WebCore::BackForwardList::setPageCacheSize):
        (WebCore::BackForwardList::pageCacheSize):
        (WebCore::BackForwardList::clearPageCache):
        (WebCore::BackForwardList::usesPageCache):
        (WebCore::BackForwardList::backListCount):
        (WebCore::BackForwardList::forwardListCount):
        (WebCore::BackForwardList::itemAtIndex):
        (WebCore::BackForwardList::entries):
        (WebCore::BackForwardList::close):
        (WebCore::BackForwardList::closed):
        (WebCore::BackForwardList::removeItem):
        (WebCore::BackForwardList::containsItem):
        (WebCore::BackForwardList::setDefaultPageCacheSize):
        (WebCore::BackForwardList::defaultPageCacheSize):
        * history/BackForwardList.h: Added.

        * history/HistoryItem.cpp: Added - This largely emulates the design of WebBackForwardList
        (WebCore::defaultNotifyHistoryItemChanged):
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::copy):
        (WebCore::HistoryItem::setHasPageCache):
        (WebCore::HistoryItem::retainIconInDatabase):
        (WebCore::HistoryItem::urlString):
        (WebCore::HistoryItem::originalURLString):
        (WebCore::HistoryItem::title):
        (WebCore::HistoryItem::alternateTitle):
        (WebCore::HistoryItem::icon):
        (WebCore::HistoryItem::lastVisitedTime):
        (WebCore::HistoryItem::url):
        (WebCore::HistoryItem::originalURL):
        (WebCore::HistoryItem::target):
        (WebCore::HistoryItem::parent):
        (WebCore::HistoryItem::setAlternateTitle):
        (WebCore::HistoryItem::setURLString):
        (WebCore::HistoryItem::setURL):
        (WebCore::HistoryItem::setOriginalURLString):
        (WebCore::HistoryItem::setTitle):
        (WebCore::HistoryItem::setTarget):
        (WebCore::HistoryItem::setParent):
        (WebCore::HistoryItem::setLastVisitedTime):
        (WebCore::HistoryItem::visitCount):
        (WebCore::HistoryItem::setVisitCount):
        (WebCore::HistoryItem::scrollPoint):
        (WebCore::HistoryItem::setScrollPoint):
        (WebCore::HistoryItem::clearScrollPoint):
        (WebCore::HistoryItem::setDocumentState):
        (WebCore::HistoryItem::documentState):
        (WebCore::HistoryItem::clearDocumentState):
        (WebCore::HistoryItem::isTargetItem):
        (WebCore::HistoryItem::setIsTargetItem):
        (WebCore::HistoryItem::alwaysAttemptToUsePageCache):
        (WebCore::HistoryItem::setAlwaysAttemptToUsePageCache):
        (WebCore::HistoryItem::addChildItem):
        (WebCore::HistoryItem::childItemWithName):
        (WebCore::HistoryItem::recurseToFindTargetItem):
        (WebCore::HistoryItem::targetItem):
        (WebCore::HistoryItem::pageCache):
        (WebCore::HistoryItem::children):
        (WebCore::HistoryItem::hasChildren):
        (WebCore::HistoryItem::formContentType):
        (WebCore::HistoryItem::formReferrer):
        (WebCore::HistoryItem::rssFeedReferrer):
        (WebCore::HistoryItem::setRSSFeedReferrer):
        (WebCore::HistoryItem::setFormInfoFromRequest):
        (WebCore::HistoryItem::formData):
        (WebCore::HistoryItem::mergeAutoCompleteHints):
        (WebCore::HistoryItem::hasPageCache):
        (WebCore::timer): Function to manage the global release timer
        (WebCore::pendingPageCacheToRelease): Function to manage the global queue of caches to be released
        (WebCore::HistoryItem::releasePageCache):
        (WebCore::closeObjectsInPendingPageCaches):
        (WebCore::HistoryItem::releaseAllPendingPageCaches):
        (WebCore::HistoryItem::scheduleRelease):
        (WebCore::HistoryItem::print):
        * history/HistoryItem.h: Added.
        * history/mac/HistoryItemMac.mm: Added.
        (WebCore::HistoryItem::viewState): In the future we need a platform agnostic way to manage the view state
        (WebCore::HistoryItem::setViewState):
        (WebCore::HistoryItem::getTransientProperty): Transient properties are, for now, only a Mac concept
        (WebCore::HistoryItem::setTransientProperty):

        * history/HistoryItemTimer.cpp: Added
        (WebCore::HistoryItemTimer::HistoryItemTimer): We need a specific class to be the history item timer because
        WebCore::Timers only work when you have an instance of an object, but the caches pending release is a static concept
        (WebCore::HistoryItemTimer::isActive):
        (WebCore::HistoryItemTimer::schedule):
        (WebCore::HistoryItemTimer::invalidate):
        (WebCore::HistoryItemTimer::callReleasePageCache):
        * history/HistoryItemTimer.h: Added.

        * history/PageCache.cpp Added - This is a class that contains the fields that used to be in an NSDictionary in WebKit
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::setPageState):
        (WebCore::PageCache::~PageCache):
        (WebCore::PageCache::pageState):
        (WebCore::PageCache::setDocumentLoader):
        (WebCore::PageCache::documentLoader):
        (WebCore::PageCache::setTimeStamp):
        (WebCore::PageCache::setTimeStampToNow):
        (WebCore::PageCache::timeStamp):
        * history/PageCache.h: Added.
        * history/mac/PageCacheMac.mm: Added.
        (WebCore::PageCache::close):
        (WebCore::PageCache::setDocumentView): In the future we need a platform agnostic way to manage the documentView
        (WebCore::PageCache::documentView):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadFromPageCache):
        (WebCore::DocumentLoader::setLoadingFromPageCache): 
        (WebCore::DocumentLoader::isLoadingFromPageCache):
        (WebCore::DocumentLoader::originalURL):
        (WebCore::DocumentLoader::requestURL):
        (WebCore::DocumentLoader::responseURL):
        (WebCore::DocumentLoader::responseMIMEType):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp: Responsibilities previously scattered in WebKit but concentrated in WebView and WebFrame 
          are now here, where they should be.
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::goBackOrForward):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::canCachePage):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoader::dispatchDidFinishLoadToClient):
        (WebCore::FrameLoader::updateGlobalHistoryForStandardLoad): Marked for usage in future GlobalHistory (uses client for now)
        (WebCore::FrameLoader::updateGlobalHistoryForReload): Ditto
        (WebCore::FrameLoader::shouldGoToHistoryItem):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoader::loadProvisionalItemFromPageCache):
        (WebCore::FrameLoader::createPageCache):
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoader::createItem):
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        (WebCore::FrameLoader::createItemTree):
        (WebCore::FrameLoader::saveScrollPositionAndViewStateToItem):
        (WebCore::FrameLoader::restoreScrollPositionAndViewState):
        (WebCore::FrameLoader::purgePageCache):
        (WebCore::FrameLoader::invalidateCurrentItemPageCache):
        (WebCore::FrameLoader::saveDocumentState):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::urlsMatchItem):
        (WebCore::FrameLoader::goToItem):
        (WebCore::FrameLoader::recursiveGoToItem):
        (WebCore::FrameLoader::childFramesMatchItem):
        (WebCore::FrameLoader::updateHistoryForStandardLoad):
        (WebCore::FrameLoader::updateHistoryForClientRedirect):
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation):
        (WebCore::FrameLoader::updateHistoryForReload):
        (WebCore::FrameLoader::updateHistoryForInternalLoad):
        (WebCore::FrameLoader::updateHistoryForCommit):
        (WebCore::FrameLoader::saveDocumentAndScrollState):
        (WebCore::FrameLoader::currentHistoryItem):
        (WebCore::FrameLoader::previousHistoryItem):
        (WebCore::FrameLoader::provisionalHistoryItem):
        (WebCore::FrameLoader::setCurrentHistoryItem):
        (WebCore::FrameLoader::setPreviousHistoryItem):
        (WebCore::FrameLoader::setProvisionalHistoryItem):
        * loader/FrameLoader.h:

        * loader/FrameLoaderClient.h:

        * loader/mac/DocumentLoaderMac.mm:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::getResponseRefreshAndModifiedHeaders):
        (WebCore::DocumentLoader::commitIfReady):
        (WebCore::DocumentLoader::urlForHistory):

        * loader/mac/FrameLoaderMac.mm:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::startLoading):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::opened):
        (WebCore::FrameLoader::dataURLBaseFromRequest):
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

        * page/FrameTree.cpp:
        (WebCore::FrameTree::removeChild):

        * page/Page.cpp: Transfered a handful of concepts from WebView
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::backForwardList):
        (WebCore::Page::goBack):
        (WebCore::Page::goForward):
        (WebCore::Page::goToItem):
        * page/Page.h:

        * page/PageState.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:

        * platform/KURL.cpp:
        (WebCore::KURL::print):  Added debug only method for debugging convenience
        * platform/KURL.h:

        * platform/Logging.cpp:
        (WebCore::): Added some logging channels
        * platform/Logging.h:

        * platform/PlatformString.h:
        (WebCore::nsStringNilIfEmpty): Added for WebKit use

        * platform/SystemTime.h: Added userIdleTime()

        * platform/graphics/svg/SVGImage.cpp:
        * platform/graphics/svg/SVGImageEmptyClients.h: Updated for new FrameLoaderClient methods
        (WebCore::SVGEmptyFrameLoaderClient::setDocumentViewFromPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::updateGlobalHistoryForStandardLoad):
        (WebCore::SVGEmptyFrameLoaderClient::updateGlobalHistoryForReload):
        (WebCore::SVGEmptyFrameLoaderClient::shouldGoToHistoryItem):
        (WebCore::SVGEmptyFrameLoaderClient::saveScrollPositionAndViewStateToItem):
        (WebCore::SVGEmptyFrameLoaderClient::saveDocumentViewToPageCache):
        (WebCore::SVGEmptyFrameLoaderClient::canCachePage):
        (WebCore::SVGEmptyEditorClient::~SVGEmptyEditorClient):

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

        * platform/mac/SystemTimeMac.cpp:
        (WebCore::userIdleTime):

        * platform/mac/WebCoreSystemInterface.h: Added wkSecondsSinceLastInput for use in userIdleTime
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        (WebCore::FormData::copy):
        * platform/network/FormData.h:

        * platform/network/ResourceHandle.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willLoadFromCache): For "are you sure you want to resubmit?" nag

        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::userIdleTime):
        * rendering/RenderPart.h:

2007-01-02  Darin Adler  <darin@apple.com>

        Rubber stamped by Mitz.

        Rename isRenderSVGContainer to isSVGContainer.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGContainer):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::viewportTransform):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::isSVGContainer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2007-01-03  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Rename isKCanvasContainer to isRenderSVGContainer.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::renderSubtreeToImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderSVGContainer):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::viewportTransform):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::isRenderSVGContainer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2007-01-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix assertion failure with WebCore context menus by getting "Copy 
        Image" item added in.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Check if the image url is a local 
        file or if we have an image in the cache.

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12072
        select with align attribute should not affect contained text

        Don't map align for select elements.

        Test: fast/forms/select-align.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=12071
        button with align attribute should not affect contained text

        Don't map align for button elements.

        Test: fast/forms/button-align.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Mitz and Anders.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=7075
        textarea with align=right should not cause contained text to 
        be right-justified

        Don't map align for textarea elements.

        Test: fast/forms/textarea-align.html

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

2007-01-02  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        Implement SVGSVGElement::deselectAll()

        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::updateLastValueWithCurrent): add comment
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::deselectAll): implement
        (WebCore::SVGSVGElement::setCurrentTime): add comment about bug
        * ksvg2/svg/SVGSVGElement.idl: remove unnecessary comment

2007-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=3360
        align="right" on a text input aligns the input field to the right

        Don't map align if input type is not 'image'.

        Test: fast/forms/input-align-image.html
        Test: fast/forms/input-align.html

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::mapToEntry):
        (WebCore::HTMLInputElement::parseMappedAttribute):

2007-01-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12013
        Fixes: http://bugs.webkit.org/show_bug.cgi?id=11980
        Partly fixes: http://bugs.webkit.org/show_bug.cgi?id=6000 (pattern/gradient recursion works now)

        Fixed testcases:
        coords-units-01-b.svg (<pattern> in objectBoundingBoxMode were broken.)
        pattern-in-defs.svg (clip pattern size against target size, to avoid excessive mallocs)
        js-update-pattern.svg (live updating really works now!)
        js-late-gradient-and-object-creation.svg (objectBoundingBoxMode gradients-on-text work now)
        js-late-gradient-creation.svg (same)

        Added testcases:
        js-late-pattern-and-object-creation.svg (objectBoundingBoxMode patterns-on-text work now)
        js-late-pattern-creation.svg (same)
        gradient-cycle-detection.svg (tests that cyclic gradients are ignored)
        gradient-deep-referencing.svg
        pattern-cycle-detection.svg (tests that cyclic patterns are ignored)
        pattern-deep-referencing.svg

        Rewrite gradient & pattern code, fixing all known bugs & regressions.

        -> Remove SVGResourceListener completly (the ugly resourceNotification() hack is gone now)

        -> Make patterns operate in all possible combinations of patternUnits / patternContentunits
           The SVGPaintServerPattern now asks the SVGPatternElement to build the pattern tile, passing
           the target object's bbox rectangle -> objectBoundingBox calculations can be done, so SVGPaintServerPattern
           itself doesn't need to know anything about "bounding box mode". Same could be done for gradients.

        -> SVGLength::valueAsPercentage() returns again fractional values, saves some "/ 100.0" statements.

        -> Deep references (gradientA -> gradientB -> gradientC...) work now. Previously only one reference worked.
           Adding GradientAttributes.h / PatternAttributes.h helper structures for the property collection.
           Cycle detection is implemented and won't kill us anymore :-)

        JS updates on gradients/patterns only cause one repaint of the client's now. Gradient drawing
        does not cause the target object to be redrawn immediately afterwards anymore.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/GradientAttributes.h: Added.
        (WebCore::GradientAttributes::GradientAttributes):
        (WebCore::GradientAttributes::spreadMethod):
        (WebCore::GradientAttributes::boundingBoxMode):
        (WebCore::GradientAttributes::gradientTransform):
        (WebCore::GradientAttributes::stops):
        (WebCore::GradientAttributes::setSpreadMethod):
        (WebCore::GradientAttributes::setBoundingBoxMode):
        (WebCore::GradientAttributes::setGradientTransform):
        (WebCore::GradientAttributes::setStops):
        (WebCore::GradientAttributes::hasSpreadMethod):
        (WebCore::GradientAttributes::hasBoundingBoxMode):
        (WebCore::GradientAttributes::hasGradientTransform):
        (WebCore::GradientAttributes::hasStops):
        * ksvg2/svg/LinearGradientAttributes.h: Added.
        (WebCore::LinearGradientAttributes::LinearGradientAttributes):
        (WebCore::LinearGradientAttributes::x1):
        (WebCore::LinearGradientAttributes::y1):
        (WebCore::LinearGradientAttributes::x2):
        (WebCore::LinearGradientAttributes::y2):
        (WebCore::LinearGradientAttributes::setX1):
        (WebCore::LinearGradientAttributes::setY1):
        (WebCore::LinearGradientAttributes::setX2):
        (WebCore::LinearGradientAttributes::setY2):
        (WebCore::LinearGradientAttributes::hasX1):
        (WebCore::LinearGradientAttributes::hasY1):
        (WebCore::LinearGradientAttributes::hasX2):
        (WebCore::LinearGradientAttributes::hasY2):
        * ksvg2/svg/PatternAttributes.h: Added.
        (WebCore::PatternAttributes::PatternAttributes):
        (WebCore::PatternAttributes::x):
        (WebCore::PatternAttributes::y):
        (WebCore::PatternAttributes::width):
        (WebCore::PatternAttributes::height):
        (WebCore::PatternAttributes::boundingBoxMode):
        (WebCore::PatternAttributes::boundingBoxModeContent):
        (WebCore::PatternAttributes::patternTransform):
        (WebCore::PatternAttributes::patternContentElement):
        (WebCore::PatternAttributes::setX):
        (WebCore::PatternAttributes::setY):
        (WebCore::PatternAttributes::setWidth):
        (WebCore::PatternAttributes::setHeight):
        (WebCore::PatternAttributes::setBoundingBoxMode):
        (WebCore::PatternAttributes::setBoundingBoxModeContent):
        (WebCore::PatternAttributes::setPatternTransform):
        (WebCore::PatternAttributes::setPatternContentElement):
        (WebCore::PatternAttributes::hasX):
        (WebCore::PatternAttributes::hasY):
        (WebCore::PatternAttributes::hasWidth):
        (WebCore::PatternAttributes::hasHeight):
        (WebCore::PatternAttributes::hasBoundingBoxMode):
        (WebCore::PatternAttributes::hasBoundingBoxModeContent):
        (WebCore::PatternAttributes::hasPatternTransform):
        (WebCore::PatternAttributes::hasPatternContentElement):
        * ksvg2/svg/RadialGradientAttributes.h: Added.
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        (WebCore::RadialGradientAttributes::cx):
        (WebCore::RadialGradientAttributes::cy):
        (WebCore::RadialGradientAttributes::r):
        (WebCore::RadialGradientAttributes::fx):
        (WebCore::RadialGradientAttributes::fy):
        (WebCore::RadialGradientAttributes::setCx):
        (WebCore::RadialGradientAttributes::setCy):
        (WebCore::RadialGradientAttributes::setR):
        (WebCore::RadialGradientAttributes::setFx):
        (WebCore::RadialGradientAttributes::setFy):
        (WebCore::RadialGradientAttributes::hasCx):
        (WebCore::RadialGradientAttributes::hasCy):
        (WebCore::RadialGradientAttributes::hasR):
        (WebCore::RadialGradientAttributes::hasFx):
        (WebCore::RadialGradientAttributes::hasFy):
        * ksvg2/svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::notifyAttributeChange):
        (WebCore::SVGGradientElement::canvasResource):
        (WebCore::SVGGradientElement::buildStops):
        (WebCore::SVGGradientElement::insertedIntoDocument):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGLength.cpp:
        (WebCore::SVGLength::valueAsPercentage):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGLinearGradientElement.h:
        * ksvg2/svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getScreenCTM):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::buildPattern):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::canvasResource):
        (WebCore::SVGPatternElement::insertedIntoDocument):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):
        * ksvg2/svg/SVGRadialGradientElement.h:
        * platform/graphics/svg/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::SVGPaintServerGradient):
        (WebCore::SVGPaintServerGradient::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerGradient.h:
        (WebCore::):
        * platform/graphics/svg/SVGPaintServerLinearGradient.cpp:
        (WebCore::SVGPaintServerLinearGradient::SVGPaintServerLinearGradient):
        * platform/graphics/svg/SVGPaintServerLinearGradient.h:
        * platform/graphics/svg/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::SVGPaintServerPattern):
        (WebCore::SVGPaintServerPattern::patternBoundaries):
        (WebCore::SVGPaintServerPattern::setPatternBoundaries):
        (WebCore::SVGPaintServerPattern::setTile):
        (WebCore::SVGPaintServerPattern::externalRepresentation):
        * platform/graphics/svg/SVGPaintServerPattern.h:
        * platform/graphics/svg/SVGPaintServerRadialGradient.cpp:
        (WebCore::SVGPaintServerRadialGradient::SVGPaintServerRadialGradient):
        * platform/graphics/svg/SVGPaintServerRadialGradient.h:
        * platform/graphics/svg/SVGResource.cpp:
        (WebCore::SVGResource::invalidate):
        (WebCore::SVGResource::repaintClients):
        * platform/graphics/svg/SVGResource.h:
        * platform/graphics/svg/SVGResourceListener.h:
        * platform/graphics/svg/cg/SVGPaintServerGradientCg.cpp:
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientStopsCache):
        (WebCore::SVGPaintServerGradient::updateQuartzGradientCache):
        (WebCore::SVGPaintServerGradient::teardown):
        (WebCore::SVGPaintServerGradient::renderPath):
        (WebCore::SVGPaintServerGradient::handleBoundingBoxModeAndGradientTransformation):
        (WebCore::SVGPaintServerGradient::setup):
        (WebCore::SVGPaintServerGradient::invalidate):
        * platform/graphics/svg/cg/SVGPaintServerPatternCg.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        (WebCore::SVGPaintServerPattern::teardown):
        * platform/graphics/svg/qt/SVGPaintServerLinearGradientQt.cpp:
        (WebCore::SVGPaintServerLinearGradient::setup):
        * platform/graphics/svg/qt/SVGPaintServerPatternQt.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * platform/graphics/svg/qt/SVGPaintServerRadialGradientQt.cpp:
        (WebCore::SVGPaintServerRadialGradient::setup):

2007-01-02  Zack Rusin  <zack@kde.org>

        Compilation fix. File names are case-sensitive.

        * ksvg2/svg/SVGPathSegList.cpp:

2007-01-02  Zack Rusin  <zack@kde.org>

        Compilation fixes for the Qt port.

        * WebCore.pro:
        * platform/qt/FrameQt.cpp:
        (WebCore::FrameQt::bindingRootObject):
        (WebCore::FrameQt::addPluginRootObject):

2007-01-02  Eric Seidel  <eric@webkit.org>

        Reviewed by rwlbuis.

        Refactor more animation code for better sharing between SVGAnimate*Element classes.
        - replace handleEndCondition with resetValues() and updateLastValueWithCurrent()
        - move initialTransform() function down into SVGTimer (eventually to AnimationCompositor)
        Add non-functional (only parses) SVGAnimateMotionElement
        Improve precision of getPointAtLength calculations and add support for "getNormalAtLength" functionality (needed for rotate='auto' support in animateMotion)
        Move add getSegmentAtLength functionality to SVGPathSegList, move toPathData into SVGPathSegList as well.
        Add SVGAnimationElement::hasValidTarget() for future better/simpler ASSERT checking
        change transformMatrix() to currentTransform() to match AffineTransform class name

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement):
        (WebCore::baseValueTransformList):
        (WebCore::SVGTimer::applyAnimations):
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::updateLastValueWithCurrent):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateMotionElement.cpp: Added.
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::~SVGAnimateMotionElement):
        (WebCore::SVGAnimateMotionElement::hasValidTarget): added.
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        (WebCore::SVGAnimateMotionElement::animationPath): fetch path from <mpath> or d attribute
        (WebCore::SVGAnimateMotionElement::updateCurrentValue):
        (WebCore::SVGAnimateMotionElement::handleStartCondition):
        (WebCore::SVGAnimateMotionElement::applyAnimationToValue):
        * ksvg2/svg/SVGAnimateMotionElement.h: Added.
        (WebCore::SVGAnimateMotionElement::contextElement):
        (WebCore::SVGAnimateMotionElement::):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidTarget): added.
        (WebCore::SVGAnimateTransformElement::storeInitialValue):
        (WebCore::SVGAnimateTransformElement::updateCurrentValue):
        (WebCore::SVGAnimateTransformElement::updateLastValueWithCurrent):
        (WebCore::SVGAnimateTransformElement::applyAnimationToValue):
        (WebCore::SVGAnimateTransformElement::currentTransform):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::hasValidTarget): added.
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::isAdditive):
        (WebCore::SVGAnimationElement::isAccumulated):
        (WebCore::SVGAnimationElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::updateLastValueWithCurrent):
        (WebCore::SVGAnimationElement::resetValues):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (WebCore::SVGPathElement::parseMappedAttribute):
        (WebCore::SVGPathElement::toPathData):
        * ksvg2/svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength): added.
        (WebCore::SVGPathSegList::toPathData): added.
        * ksvg2/svg/SVGPathSegList.h:
        * ksvg2/svg/svgtags.in: add animateMotion
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction): add support for TraversalNormalAngleAtLength
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::curveLength): support higher precision pointAtLength calculations, and add normalAtLength support
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo):
        * platform/graphics/PathTraversalState.h:
        (WebCore::PathTraversalState::): add TraversalNormalAngleAtLength mode

2007-01-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - WebCore changes for http://bugs.webkit.org/show_bug.cgi?id=11849
          REGRESSION (r18182): Google Calendar is broken (a regular expression containing a null character is not parsed correctly)

        * platform/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::compile): Changed to not null-terminate
        the pattern string and instead pass its length to pcre_compile.

2007-01-01  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/RenderTable.h:
        Added needsSectionRecalc() accessor.
        * 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:

2007-01-01  David Kilzer  <ddkilzer@webkit.org>

        WebCore.vcproj change reviewed by Darin.  Additional build files updated by ddkilzer.

        * CMakeLists.txt: Removed RenderLineEdit.cpp.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed RenderLineEdit.cpp and RenderLineEdit.h.
        * WebCoreSources.bkl: Removed RenderLineEdit.cpp.

2007-01-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12042
          Assertion failure in WebCore::RenderObject::drawBorder

        Test: fast/borders/outline-offset-min-assert.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline): Bail out if the width or height is
        smaller than twice the outline inset.
        
2007-01-01  Mark Rowe  <bdash@webkit.org>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=12061
        Bug 12061: Crash in WebCore::Shared<WebCore::StringImpl>::deref

        * rendering/RenderStyle.cpp:
        (WebCore::ContentData::clearContent): Reset _contentType to CONTENT_NONE to ensure repeated calls to clearContent
        do not result in derefing deallocated members.

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Begin pushing code down into SVGAnimateElement

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleStartCondition):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::updateCurrentValue):
        (WebCore::SVGAnimateElement::handleStartCondition):
        (WebCore::SVGAnimateElement::handleEndCondition):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleStartCondition):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::updateCurrentValue):
        (WebCore::SVGSetElement::handleStartCondition):
        (WebCore::SVGSetElement::handleEndCondition):
        * ksvg2/svg/SVGSetElement.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Add static function SVGColor::colorFromRGBColorString to allow parsing Colors from SVG color strings w/o creating an SVGColor object.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::storeInitialValue): use colorFromRGBColorString
        (WebCore::SVGAnimateColorElement::startIfNecessary): use colorFromRGBColorString
        * ksvg2/svg/SVGColor.cpp:
        (WebCore::SVGColor::setRGBColor): use colorFromRGBColorString
        (WebCore::parseNumberOrPercent): new color parsing helper
        (WebCore::SVGColor::colorFromRGBColorString): cleaned up version of setRGBColor parsing logic
        * ksvg2/svg/SVGColor.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        Split handleTimerEvent logic into separate functions in preparation for moving down into SVGAnimationElement

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::storeInitialValue):
        (WebCore::SVGAnimateColorElement::resetValues):
        (WebCore::SVGAnimateColorElement::updateCurrentValue):
        (WebCore::SVGAnimateColorElement::startIfNecessary):
        (WebCore::SVGAnimateColorElement::handleEndCondition):
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::storeInitialValue):
        (WebCore::SVGAnimateTransformElement::resetValues):
        (WebCore::SVGAnimateTransformElement::updateCurrentValue):
        (WebCore::SVGAnimateTransformElement::startIfNecessary):
        (WebCore::SVGAnimateTransformElement::handleEndCondition):
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.h:

2007-01-01  Rob Buis  <buis@kde.org>

        Reviewed by Eric.

        Simple cleanups, removing unused color table, copyright and include guard fixes.

        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGColor.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by andersca.

        More animation code cleanup.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::connectedToTimer):
        (WebCore::SVGAnimationElement::connectTimer):
        (WebCore::SVGAnimationElement::disconnectTimer):
        (WebCore::SVGAnimationElement::updateForElapsedSeconds):
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::handleTimerEvent):
        * ksvg2/svg/SVGSetElement.h:

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by mitz.

        More clean-up to animation code.

        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        (WebCore::SVGAnimateTransformElement::calculateRotationFromMatrix):

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Begin pushing more animation logic out of SVGTimer and into the SVGAnimate* classes.
        
        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement): add comment
        (WebCore::SVGTimer::notifyAll): push logic into SVGAnimte* classes
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::applyAnimationToValue): added.
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimateElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyAnimationToValue): added.
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::calculateTimePercentage): logic moved from SVGTimer
        (WebCore::SVGAnimationElement::updateForElapsedSeconds): logic moved from SVGTimer
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGTransformList.cpp:
        (SVGTransformList::concatenate): fixed spacing

2007-01-01  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        Split out animationsByElement() logic in preparation for adding AnimationCompositor class
        Add addColorsAndClamp helper (since adding and clamping is the common case)

        * ksvg2/misc/SVGTimer.cpp:
        (WebCore::SVGTimer::animationsByElement): split out from notifyAll
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGTimer.h:
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::addColorsAndClamp): added.
        * ksvg2/svg/SVGAnimateColorElement.h:

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

        Reviewed by olliej.

        Split KSVGTimeScheduler into SVGTimer and TimeScheduler.
        (Basic clean-up before re-working animation system)

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/misc/KSVGTimeScheduler.cpp: Removed.
        * ksvg2/misc/KSVGTimeScheduler.h: Removed.
        * ksvg2/misc/SVGTimer.cpp: Added.
        (WebCore::SVGTimer::SVGTimer):
        (WebCore::SVGTimer::calculateTimePercentage):
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGTimer.h: Added.
        * ksvg2/misc/TimeScheduler.cpp: Added.
        (WebCore::TimeScheduler::TimeScheduler):

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

        Reviewed by olliej.

        Re-enable animateTransform (now that SVGList is fixed)
        (Things are only "less broken" not totally fixed yet.)

        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):

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

        Reviewed by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=12049
          RenderBlock::calcMinMaxWidth() should not examine children of fixed-width blocks

        No test possible (no change to functionality).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcMinMaxWidth): Call calc{Inline,Block}MinMaxWidth()
        only if their result is needed.

== Rolled over to ChangeLog-2006-12-31 ==
