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

        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  <zerodpx@gmail.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  <zerodpx@gmail.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  <zerodpx@gmail.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 <zerodpx@gmail.org>

        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  <zerodpx@gmail.org>

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

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

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

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

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

        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  Ian Eng <ian.eng.webkit@gmail.com>

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

        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  Ian Eng  <ian.eng.webkit@gmail.com>

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

        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 Ian Eng (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  Don Gibson  <dgibson77@gmail.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  Dex Deacon  <occupant4@gmail.com>

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

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

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

        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  Don Gibson  <dgibson77@gmail.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 ==
