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:WebCore::]):
        (-[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 ==
