Reviewed by John
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
index 986aa32..6bc843b 100644 (file)
@@ -1,3 +1,445 @@
+2004-12-06  Ken Kocienda  <kocienda@apple.com>
+        Reviewed by John
+        
+        * khtml/dom/dom_string.cpp:
+        (DOM::DOMString::substring): Expose method already on DOMStrimgImpl.
+        * khtml/dom/dom_string.h: Ditto.
+        * khtml/editing/htmlediting.cpp:
+        (khtml::CompositeEditCommand::rebalanceWhitespace): New helper to create and execute a
+        RebalanceWhitespaceCommand instance.
+        (khtml::DeleteSelectionCommand::doApply): Call rebalanceWhitespace() after running command.
+        (khtml::InsertLineBreakCommand::doApply): Ditto.
+        (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
+        (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
+        (khtml::InsertTextCommand::input): Ditto.
+        (khtml::RebalanceWhitespaceCommand::RebalanceWhitespaceCommand): New command.
+        (khtml::RebalanceWhitespaceCommand::~RebalanceWhitespaceCommand): Ditto.
+        (khtml::RebalanceWhitespaceCommand::doApply): Ditto.
+        (khtml::RebalanceWhitespaceCommand::doUnapply): Ditto.
+        (khtml::RebalanceWhitespaceCommand::preservesTypingStyle): Ditto.
+        (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
+        * khtml/editing/htmlediting.h: Ditto.
+        (khtml::RebalanceWhitespaceCommand::): Ditto.
+
+2004-12-05  Darin Adler  <darin@apple.com>
+
+        - fixed small problem in my check-in from yesterday
+
+        * kwq/KWQEvent.mm:
+        (positionForEvent): Get location from event without raising exception if it's the wrong type.
+        (clickCountForEvent): Same, for clickCount.
+        (QMouseEvent::QMouseEvent): Use the new helper functions so this can be constructed even with
+        the wrong type of NSEvent. Required for cases where a keyboard event causes a "click" and we need
+        to synthesize a QMouseEvent for KHTML internal use, using the key down NSEvent.
+
+2004-12-04  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3878329> REGRESSION (169-170): colors are wrong for my.yahoo.com due to CSS background parsing changes
+
+        * khtml/css/cssparser.cpp: (CSSParser::parseBackgroundShorthand): Changed function so it doesn't rely on the position
+        attribute being at the end of the array and then moved position attribute before color attribute so it takes precedence.
+        Since "0" can be both the X coordinate of a position and a legal color (meaning black), we need to do position first.
+
+        - fixed <rdar://problem/3760869> click events for input type=button or type=checkbox don't have flags like shiftKey set
+
+        * khtml/rendering/render_form.h: Remove unused RenderFormElement fields.
+        * khtml/rendering/render_form.cpp:
+        (RenderFormElement::RenderFormElement): Take out code to set a bunch of unused fields.
+        (RenderFormElement::slotClicked): Change to create the QMouseEvent from the actual mouse event rather than
+        creating it with all the flags set to 0, using the new QMouseEvent constructor that does so.
+
+        * kwq/KWQEvent.h: Added constructor that takes no parameters which uses the current event from AppKit.
+        Made the click count getter const and added an isDoubleClick that matches the logic used elsewhere.
+        Added a fixState helper method so the constructors can save code.
+        * kwq/KWQEvent.mm:
+        (QMouseEvent::QMouseEvent): Factored out the state-fixing code that was in the two existing constructors
+        and added a third constructor that uses the "current event" from AppKit (used above).
+        (QMouseEvent::fixState): Compute state and click count based on event type.
+
+        - fixed first symptom of <rdar://problem/3830936> REGRESSION (125-165): crash due to null font family, hang at changeforamerica.com
+
+        * kwq/KWQFontFamily.mm: (KWQFontFamily::getNSFamily): Handle empty strings specially so we don't run into trouble when
+        the family name is a null string. This prevents the crash, but there are still other problems that may have the same
+        underlying cause in CSS.
+
+        - fixed <rdar://problem/3829808> Safari crashes when adding a DOM node that was removed from an XMLHTTP request result
+
+        * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::insertedIntoDocument):
+        Added nil check before calling scheduleRelayout. This is new code so the nil-dereference is a recent regression.
+
+2004-12-03  Chris Blumenberg  <cblu@apple.com>
+
+       New fixes for:
+       <rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
+       <rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)
+       <rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
+       <rdar://problem/3902749> REGRESSION (Tiger): missing image symbol does not appear
+
+        Reviewed by darin, rjw, kocienda.
+
+        * khtml/misc/loader.cpp:
+        (CachedObject::~CachedObject):
+        (CachedCSSStyleSheet::checkNotify):
+        (Loader::servePendingRequests):
+        (Loader::slotFinished):
+        (Loader::slotReceivedResponse):
+        (Cache::requestImage):
+        (Cache::requestScript):
+        * khtml/misc/loader.h:
+        (khtml::CachedObject::CachedObject):
+        (khtml::CachedObject::response):
+        (khtml::CachedObject::allData):
+        * kwq/KWQKJobClasses.h:
+        * kwq/KWQKJobClasses.mm:
+        (KIO::TransferJobPrivate::TransferJobPrivate):
+        (KIO::TransferJobPrivate::~TransferJobPrivate):
+        (KIO::TransferJob::TransferJob):
+        (KIO::TransferJob::assembleResponseHeaders):
+        (KIO::TransferJob::retrieveCharset):
+        (KIO::TransferJob::emitResult):
+        (KIO::TransferJob::emitReceivedResponse):
+        * kwq/KWQLoader.h:
+        * kwq/KWQLoader.mm:
+        (KWQHeaderStringFromDictionary):
+        (KWQCheckCacheObjectStatus):
+        (KWQIsResponseURLEqualToURL):
+        (KWQResponseURL):
+        (KWQResponseMIMEType):
+        (KWQCacheObjectExpiresTime):
+        (khtml::CachedObject::setResponse):
+        (khtml::CachedObject::setAllData):
+        * kwq/KWQPixmap.h:
+        * kwq/KWQPixmap.mm:
+        (QPixmap::QPixmap):
+        * kwq/KWQResourceLoader.mm:
+        (-[KWQResourceLoader finishJobAndHandle:]):
+        (-[KWQResourceLoader cancel]):
+        (-[KWQResourceLoader reportError]):
+        (-[KWQResourceLoader finishWithData:]):
+        * kwq/KWQSignal.h:
+        * kwq/KWQSignal.mm:
+        (KWQSignal::call):
+        * kwq/KWQSlot.h:
+        * kwq/KWQSlot.mm:
+        (KWQSlot::KWQSlot):
+        (KWQSlot::call):
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreResourceLoader.h:
+
+2004-12-04  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3876093> REGRESSION (166-167): Setting slider control's value from JavaScript has no effect (breaks RSS)
+
+        * khtml/rendering/render_form.cpp:
+        (RenderSlider::updateFromElement): Call setValue to update the value of the DOM element rather than
+        modifying the m_value data member directly. We don't use m_value at all for sliders now, and in fact
+        the code relies on the fact that m_value is null. Setting m_value to a non-null value was causing the bug.
+        (RenderSlider::slotSliderValueChanged): Ditto.
+
+2004-12-03  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Ken.
+        
+        - fixed <rdar://problem/3889411> REGRESSION (125-172): repro crash in 
+        khtml::BackgroundLayer::cullEmptyLayers
+
+        * khtml/rendering/render_style.cpp:
+        (BackgroundLayer::cullEmptyLayers):
+        added missing nil check
+
+=== Safari-173 ===
+
+2004-12-03  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by me
+
+        Roll out some recent changes by Chris that caused a performance regression.
+        Fix is in hand, but it is a little risky this close to a submission. So,
+        we have decided to roll back the change with the regression and roll in
+        the new code after we submit.
+
+        * khtml/css/cssproperties.c:
+        (hash_prop):
+        (findProp):
+        * khtml/css/cssvalues.c:
+        (hash_val):
+        (findValue):
+        * khtml/misc/htmlattrs.c:
+        (hash_attr):
+        (findAttr):
+        * khtml/misc/htmltags.c:
+        (hash_tag):
+        (findTag):
+        * khtml/misc/loader.cpp:
+        (CachedObject::~CachedObject):
+        (CachedObject::setResponse):
+        (CachedCSSStyleSheet::checkNotify):
+        (Loader::servePendingRequests):
+        (Loader::slotFinished):
+        (Loader::slotReceivedResponse):
+        (Cache::requestImage):
+        (Cache::requestScript):
+        * khtml/misc/loader.h:
+        (khtml::CachedObject::CachedObject):
+        (khtml::CachedObject::response):
+        * kwq/KWQKJobClasses.h:
+        * kwq/KWQKJobClasses.mm:
+        (KIO::TransferJobPrivate::TransferJobPrivate):
+        (KIO::TransferJobPrivate::~TransferJobPrivate):
+        (KIO::TransferJob::TransferJob):
+        (KIO::TransferJob::assembleResponseHeaders):
+        (KIO::TransferJob::retrieveCharset):
+        (KIO::TransferJob::emitResult):
+        (KIO::TransferJob::emitReceivedResponse):
+        * kwq/KWQLoader.h:
+        * kwq/KWQLoader.mm:
+        (KWQHeaderStringFromDictionary):
+        (KWQCheckCacheObjectStatus):
+        (KWQRetainResponse):
+        (KWQReleaseResponse):
+        (KWQIsResponseURLEqualToURL):
+        (KWQResponseURL):
+        (KWQResponseMIMEType):
+        (KWQResponseTextEncodingName):
+        (KWQResponseHeaderString):
+        (KWQCacheObjectExpiresTime):
+        (KWQLoader::KWQLoader):
+        * kwq/KWQPixmap.h:
+        * kwq/KWQPixmap.mm:
+        (QPixmap::QPixmap):
+        * kwq/KWQResourceLoader.mm:
+        (-[KWQResourceLoader finishJobAndHandle]):
+        (-[KWQResourceLoader cancel]):
+        (-[KWQResourceLoader reportError]):
+        (-[KWQResourceLoader finish]):
+        * kwq/KWQSignal.h:
+        * kwq/KWQSignal.mm:
+        (KWQSignal::call):
+        * kwq/KWQSlot.h:
+        * kwq/KWQSlot.mm:
+        (KWQSlot::KWQSlot):
+        (KWQSlot::call):
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreResourceLoader.h:
+
+2004-12-03  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Chris.
+        
+        - fixed <rdar://problem/3903990> can't tab to all items on www.google.com any more (other pages too?)
+
+        * kwq/KWQKHTMLPart.mm:
+        (KWQKHTMLPart::nextKeyViewInFrameHierarchy):
+        when checking whether we moved the focus to another view, make sure we didn't "move" it to
+        our documentView, because that's no move at all.
+
+2004-12-03  Darin Adler  <darin@apple.com>
+
+        Reviewed by Vicki.
+
+        - fixed <rdar://problem/3901109> REGRESSION (171-172): repro crash in DOM::NodeImpl::setChanged at chick-fil-a.com
+
+        * khtml/css/css_valueimpl.cpp: (DOM::CSSMutableStyleDeclarationImpl::CSSMutableStyleDeclarationImpl):
+        Added missing initialization for base class and node pointer.
+
+        - fixed a few places that could leave dangling node pointers
+
+        * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::~HTMLBodyElementImpl):
+        Clear out the node pointer when the node is destroyed.
+        * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::~HTMLElementImpl): Ditto.
+
+2004-12-03  Chris Blumenberg  <cblu@apple.com>
+
+       Fix for performance regression. My original patch added a signal for passing the data of a resource to its WebCore cache object. This patch passes the data with the preexisting "finished" symbol so we make less calls. 
+       Fixed: <rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
+
+        Reviewed by rjw.
+
+        * khtml/misc/loader.cpp:
+        (Loader::servePendingRequests): pass data param to slotFinished, removed allData signal
+        (Loader::slotFinished): take data param
+        * khtml/misc/loader.h:
+        * kwq/KWQKJobClasses.h:
+        * kwq/KWQKJobClasses.mm:
+        (KIO::TransferJob::TransferJob): have m_result take a data param, removed m_allData
+        (KIO::TransferJob::emitResult): take data param and pass it
+        * kwq/KWQResourceLoader.mm:
+        (-[KWQResourceLoader finishJobAndHandle:]): take data param and pass it
+        (-[KWQResourceLoader cancel]): pass nil for data
+        (-[KWQResourceLoader reportError]): ditto
+        (-[KWQResourceLoader finishWithData:]): pass data
+        * kwq/KWQSlot.mm:
+        (KWQSlot::KWQSlot): pass data param to slotFinished
+        (KWQSlot::call): added support for slotFinished_Loader, removed slotAllData
+
+2004-12-03  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        Did some clean up in the Position class as a result of trying to write some new layout
+        tests and discovering a bug along the way.
+
+        I removed these three functions from the Position class:
+        
+        1. bool isFirstRenderedPositionOnLine() const;
+        2. bool isLastRenderedPositionOnLine() const;
+        3. static bool renderersOnDifferentLine(RenderObject *r1, long o1, RenderObject *r2, long o2);
+        4. bool inFirstEditableInRootEditableElement() const;
+
+        The first two have replacements in the VisiblePosition class, and some code has been
+        moved to use these new variants. The third function was a helper used only by these
+        first two function, and can be removed as well. The fourth function was not used by anyone.
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::InsertTextCommand::input): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
+        * khtml/editing/visible_position.cpp:
+        (khtml::visiblePositionsOnDifferentLines): Added an additional check for blocks to this function.
+        Incorrect results were being returned when asking about positions at the starts of blocks.
+        * khtml/xml/dom_position.cpp:
+        (DOM::Position::previousCharacterPosition): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
+        (DOM::Position::nextCharacterPosition): Change over to use VisiblePosition isLastVisiblePositionOnLine().
+        (DOM::Position::rendersInDifferentPosition): Removed use of #3 helper in a log message. We can live without it.
+        * khtml/xml/dom_position.h: Update header for deletions.
+
+2004-12-03  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        Terminology change in execCommand command identifiers. Specifically, the name of 
+        "InsertNewline" command has been changed to "InsertLineBreak". This matches the 
+        terminology used by AppKit. It is also more accurate, since the insertion of a
+        "br" element is what the command does. The inspiration for this change is so the 
+        -insertNewline AppKit method can be mapped to insert a new "div" element in 
+        a document and avoid ambiguity with what the javascript editing command does.
+        
+        * khtml/editing/jsediting.cpp
+        * layout-tests/editing/deleting/delete-tab-004.html
+        * layout-tests/editing/editing.js
+        * layout-tests/editing/inserting/insert-3654864-fix.html
+        * layout-tests/editing/inserting/insert-3659587-fix.html
+        * layout-tests/editing/inserting/insert-3775316-fix.html
+        * layout-tests/editing/inserting/insert-3800346-fix.html
+        * layout-tests/editing/inserting/insert-br-001.html
+        * layout-tests/editing/inserting/insert-br-002.html
+        * layout-tests/editing/inserting/insert-br-003.html
+        * layout-tests/editing/inserting/insert-br-004.html
+        * layout-tests/editing/inserting/insert-br-005.html
+        * layout-tests/editing/inserting/insert-br-006.html
+        * layout-tests/editing/inserting/insert-br-007.html
+        * layout-tests/editing/inserting/insert-br-008.html
+        * layout-tests/editing/inserting/insert-tab-004.html
+        * layout-tests/editing/inserting/insert-text-with-newlines.html
+        * layout-tests/editing/pasteboard/paste-text-010.html
+
+2004-12-02  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        Fix for this bug:
+        
+        <rdar://problem/3786362> REGRESSION (Mail): pasted text loses one newline
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::InsertLineBreakCommand::doApply): Added check for strict mode before adding an extra br element
+        at the end of a block. This is only necessary in quirks mode. Also, lower-case "br" used to make element.
+        (khtml::ReplaceSelectionCommand::doApply): If the replacement adds a br element as the last element
+        in a block and the document is in quirks mode, add an additional br to make the one in the 
+        replacement content show up. This turns out to be much the same logic as is done in InsertLineBreakCommand.
+        * layout-tests/editing/inserting/insert-3786362-fix-expected.txt: Added.
+        * layout-tests/editing/inserting/insert-3786362-fix.html: Added.
+
+2004-12-02  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/3841332> REGRESSION (125.9-167u): repro crash in -[KWQPageState invalidate] involving .Mac images
+
+       Ensure that the document is cleared when leaving a non-HTML page.  This ensures that
+       the b/f cache won't incorrectly trash the previous state when restoring.
+
+        Reviewed by John.
+
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
+        (-[WebCoreBridge canCachePage]):
+        (-[WebCoreBridge clear]):
+
+2004-12-02  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Richard
+
+        Fix for this bug:
+        
+        <rdar://problem/3857775> 8A293: Mail.app crashes converting copy-pasted text into plain text
+
+        * khtml/xml/dom2_rangeimpl.cpp:
+        (DOM::RangeImpl::commonAncestorContainer): Return the document element if no common ancestor container
+        was found. This can happen in cases where the DOM was built from malformed markup (as in the case
+        of this bug where there is content after the body tag). Did a little code clean up as well.
+        (DOM::RangeImpl::compareBoundaryPoints): Made code more robust by adding some null checks.
+
+2004-12-02  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Chris
+
+        Fix for this bug:
+        
+        <rdar://problem/3668157> REGRESSION (Mail): shift-click deselects when selection was created right-to-left
+
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::handleMousePressEventSingleClick): Use RangeImpl::compareBoundaryPoints
+        to figure out which end of the selection to extend.
+
+2004-12-02  David Harrison  <harrison@apple.com>
+
+        Reviewed by Ken Kocienda.
+
+               <rdar://problem/3834917> REGRESSION (Mail): double-clicking blank line selects end of previous line
+               Fixed originally reported bug plus the case of double-clicking whitespace at the beginning of a line, which has a similar result.
+
+        * khtml/editing/visible_text.cpp:
+        (khtml::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
+        (khtml::SimplifiedBackwardsTextIterator::handleTextNode):
+        (khtml::SimplifiedBackwardsTextIterator::handleReplacedElement):
+        (khtml::SimplifiedBackwardsTextIterator::handleNonTextNode):
+        (khtml::SimplifiedBackwardsTextIterator::emitCharacter):
+        Distinguish BR from whitespace.
+        * khtml/editing/visible_text.h:
+        Distinguish BR from whitespace.
+        * khtml/editing/visible_units.cpp:
+        (khtml::previousWordBoundary):
+        Use UPSTREAM visible position now that SimplifiedBackwardsTextIterator distinguishes BR from whitespace.  Otherwise, double-clicking at end of line would result in caret selection at start of next line. 
+
+2004-12-02  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        Fix for this bug:
+        
+        <rdar://problem/3900996> Crash dragging past end of contentEditable DIV, at DOM::RangeImpl::pastEndNode() const + 24
+
+        * khtml/xml/dom_position.cpp:
+        (DOM::Position::equivalentRangeCompliantPosition): Fixed this function so that it constrains the offset
+        of the position to be >= 0 and <= number of kids of its node. Not doing this constraining led to a DOM
+        exception trying to use a Position returned from this function to set the boundary point of a Range (which
+        eventually led to the crash). Since this crash happened, it seems like this function was failing in its
+        contract to return a range-compliant position, hence the need for this fix.
+
+2004-12-01  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by me
+
+        Moving code only.
+
+        * khtml/editing/htmlediting.cpp: Move ReplaceSelectionCommand into alphabetical order with
+        regard to other editing commands. The class had a name change ages ago, and it was never
+        moved.
+        * khtml/editing/htmlediting.h: Ditto.
+
 2004-12-01  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Hyatt
 
         * khtml/rendering/bidi.cpp:
         (khtml::RenderBlock::findNextLineBreak): I did not get my fix for 3848343 and 3848224
-           yesterday quite right: words that should have been placed on the next line were instead
+        yesterday quite right: words that should have been placed on the next line were instead
         appearing on the line before, beyond the right margin. This was a one-word only error
         based on moving the line break object when it should have stayed put. Here is the rule:
         The line break object only moves to after the whitespace on the end of a line if that