Reviewed by John and Kevin.
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
1 2005-01-03  Maciej Stachowiak  <mjs@apple.com>
2
3         Reviewed by John and Kevin.
4
5         <rdar://problem/3870317> REGRESSION(125.9-125.11) broken behavior at test.profoundlearning.com - used to
6         
7         * khtml/ecma/kjs_window.cpp:
8         (Window::get): Look up frame names before buitin window properties
9         to match other browsers. This regressed because we added a builtin
10         "toolbar" property but this site had a frame with that name.
11
12 2004-12-21  Maciej Stachowiak  <mjs@apple.com>
13
14         Reviewed by Darin.
15
16         <rdar://problem/3888931> frame naming allows malicious site to bring up a window when you click on a link in another
17         
18         Added opener bridge method to help WebKit implement security check
19         for named frame visibility.
20         
21         * khtml/khtml_part.h:
22         * kwq/WebCoreBridge.h:
23         * kwq/WebCoreBridge.mm:
24         (-[WebCoreBridge opener]):
25
26 2005-01-03  Ken Kocienda  <kocienda@apple.com>
27
28         Reviewed by John
29
30         Fix for this bug:
31         
32         <rdar://problem/3933926> Tiger8A341: Mail crashes while forwarding embedded HTML message in -[WebCoreBridge ensureSelectionVisible]
33
34         * kwq/WebCoreBridge.mm:
35         (-[WebCoreBridge ensureSelectionVisible]): Put in some null checks to prevent crash experienced in bug.
36
37 2005-01-03  David Hyatt  <hyatt@apple.com>
38
39         Reviewed by NOBODY (OOPS!).
40
41         * khtml/rendering/render_block.cpp:
42         (khtml::RenderBlock::layoutPositionedObjects):
43
44 2005-01-03  Ken Kocienda  <kocienda@apple.com>
45
46         Reviewed by Harrison
47         
48         Fix for this bug:
49         
50         <rdar://problem/3928250> REGRESSION (Mail): Typing style lost after hitting return key
51
52         * khtml/editing/htmlediting.cpp:
53         (khtml::InsertLineBreakCommand::preservesTypingStyle): Now implemented, returning yes for this command.
54         (khtml::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): Initialize new typing style member variable.
55         (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand): Deref new typing style member variable.
56         (khtml::InsertParagraphSeparatorCommand::preservesTypingStyle): Now implemented, returning yes for this command.
57         (khtml::InsertParagraphSeparatorCommand::setFullTypingStyleBeforeInsertion): New function to set the typing style
58         (khtml::InsertParagraphSeparatorCommand::calculateAndSetTypingStyleAfterInsertion): Function called after the <p>
59         insertion is done. This function diffs the style created in setFullTypingStyleBeforeInsertion() with the style
60         of the new <p> and only sets those styles needed to preserve the style in effect before the insertion.
61         (khtml::InsertParagraphSeparatorCommand::doApply): Call new functions.
62         (khtml::TypingCommand::preservesTypingStyle): Now yes for inserting line breaks and paragraphs.
63          * khtml/editing/htmlediting.h: Declare new functions.
64
65 2004-12-25  Kevin Decker  <kdecker@apple.com>
66
67         Reviewed by Hyatt.
68
69         Fixed: <rdar://problem/3505072> hang in KHTMLParser::parseToken (consulting.soroos.net)
70         
71         * khtml/html/dtd.cpp: <label> needed a much higher priority such that it will close block elements.  Malformed HTML (ugh) is the only reason why we need to do this. 
72
73 2004-12-23  Darin Adler  <darin@apple.com>
74
75         Reviewed by Ken.
76
77         - re-fixed <rdar://problem/3760910> Request to include support for custom tag names in HTML (they already work in XML)
78
79         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector): Changed
80         some code that used ID_LAST_TAG in a slightly wrong, but harmless, way.
81
82         * khtml/editing/htmlediting.cpp:
83         (khtml::debugPosition): Use nodeName rather than getTagName, since the latter works for
84         per-document tags and is just better all around for things like the document.
85         (khtml::debugNode): Ditto.
86         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Ditto.
87         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
88         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Ditto.
89         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
90
91         * khtml/html/dtd.cpp: (DOM::checkChild): Use ID_LAST_TAG rather than 1000 for the check that allows
92         non-HTML elements to be nested as desired.
93
94         * khtml/html/htmlparser.h: Change forbidden tag array to be allocated in the object rather than on
95         the heap. Also use ID_LAST_TAG for the array size; the old code used ID_CLOSE_TAG which is now a
96         much larger number.
97         * khtml/html/htmlparser.cpp:
98         (KHTMLParser::KHTMLParser): Remove code that creates the forbidden tag array on the heap; makes more
99         sense to just have the array be a member so we don't have to use new and delete on it. Also needed
100         to eliminate code that used ID_CLOSE_TAG for an array size.
101         (KHTMLParser::~KHTMLParser): Remove code that deletes the forbidden tag array. Also changed the code
102         that manages isindex to use deref instead of delete.
103         (KHTMLParser::reset): Use safer sizeof for clearing the forbidden tag array. Old code had the
104         mistake of using ID_CLOSE_TAG for the array size too.
105         (KHTMLParser::parseToken): Removed code that checks for bogus tags; it's not clear why it was ever
106         there and it would prevent custom tags from working. Added range check before using the forbidden
107         tag array with the token ID since custom tags will use index values past the end of the array.
108         (KHTMLParser::getElement): Removed most of the code that makes an element by ID; now the work is done
109         inside the DocumentImpl createHTMLElement. Any code that needs to be different than a dynamic
110         createElement call is still here. Last time I left out a few form element types from this switch;
111         fixed now.
112         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): Call the tagId function in the
113         document if getTagID fails; this creates a unique per-document ID.
114
115         * khtml/misc/htmlhashes.h: Changed return types to unsigned short.
116         * khtml/misc/htmlhashes.cpp:
117         (khtml::getTagID): Changed return type to unsigned short.
118         (khtml::getAttrID): Ditto.
119
120         * khtml/misc/htmltags.c: Regenerated.
121         * khtml/misc/htmltags.h: Regenerated.
122
123         * khtml/misc/maketags: Changed the generated constants to use "const unsigned short" instead of "#define".
124         Changed ID_CLOSE_TAG to be a fixed value of 32000 rather than being just past the IDs of the HTML tags.
125         Also rewrote getTagName to work with the new scheme.
126
127         * khtml/xml/dom_docimpl.h: Added overload of createHTMLElement, made it non-virtual since it's not overriden.
128         * khtml/xml/dom_docimpl.cpp:
129         (DocumentImpl::createHTMLElement): Refactored into two separate functions, one that takes the tag ID.
130         Also updated for a few tags that the parser handled but this did not.
131
132         * kwq/KWQRenderTreeDebug.cpp:
133         (getTagName): Added. Works for custom nodes, because it calls nodeName rather than using getTagName on
134         the tag ID directly, which only works for standard nodes.
135         (operator<<): Update to call getTagName.
136         (nodePositionRelativeToRoot): Ditto.
137         (writeSelection): Ditto.
138
139 === Safari-177 ===
140
141 2004-12-22  Darin Adler  <darin@apple.com>
142
143         - rolled out my custom tag name change -- it broke amazon.com
144
145         * khtml/css/cssstyleselector.cpp:
146         * khtml/editing/htmlediting.cpp:
147         * khtml/editing/selection.cpp:
148         * khtml/editing/visible_position.cpp:
149         * khtml/html/dtd.cpp:
150         * khtml/html/htmlparser.cpp:
151         * khtml/html/htmlparser.h:
152         * khtml/html/htmltokenizer.cpp:
153         * khtml/misc/htmlhashes.cpp:
154         * khtml/misc/htmlhashes.h:
155         * khtml/misc/htmltags.c:
156         * khtml/misc/htmltags.h:
157         * khtml/misc/maketags:
158         * khtml/xml/dom_docimpl.cpp:
159         * khtml/xml/dom_docimpl.h:
160         * khtml/xml/dom_nodeimpl.cpp:
161         * khtml/xml/dom_position.cpp:
162         * kwq/KWQRenderTreeDebug.cpp:
163
164 2004-12-22  David Harrison  <harrison@apple.com>
165
166         Reviewed by Darin Adler.
167
168         * khtml/editing/selection.cpp:
169         (khtml::Selection::validate):
170         The selecting/deselecting bad behavior is because the Selection code that expands by words
171         had an inaccurate test for being at the end of the document (where double-clicking needs
172         to select the last word).  Fixed that check.
173
174 2004-12-22  Adele Amchan  <adele@apple.com>
175
176         Reviewed by Chris.
177
178         Fix for <rdar://problem/3911650> tabs at safeway.com stop working after a while
179
180         * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::scrollToAnchor): removed call to cancelRedirection 
181           so that we match Firefox and WinIE behavior.
182
183 2004-12-22  Darin Adler  <darin@apple.com>
184
185         Reviewed by Ken.
186
187         - fixed <rdar://problem/3760910> Request to include support for custom tag names in HTML (they already work in XML)
188
189         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector): Changed
190         some code that used ID_LAST_TAG in a slightly wrong, but harmless, way.
191
192         * khtml/editing/htmlediting.cpp:
193         (khtml::debugPosition): Use nodeName rather than getTagName, since the latter works for
194         per-document tags and is just better all around for things like the document.
195         (khtml::debugNode): Ditto.
196         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Ditto.
197         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
198         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Ditto.
199         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
200
201         * khtml/html/dtd.cpp: (DOM::checkChild): Use ID_LAST_TAG rather than 1000 for the check that allows
202         non-HTML elements to be nested as desired.
203
204         * khtml/html/htmlparser.h: Change forbidden tag array to be allocated in the object rather than on
205         the heap. Also use ID_LAST_TAG for the array size; the old code used ID_CLOSE_TAG which is now a
206         much larger number.
207         * khtml/html/htmlparser.cpp:
208         (KHTMLParser::KHTMLParser): Remove code that creates the forbidden tag array on the heap; makes more
209         sense to just have the array be a member so we don't have to use new and delete on it. Also needed
210         to eliminate code that used ID_CLOSE_TAG for an array size.
211         (KHTMLParser::~KHTMLParser): Remove code that deletes the forbidden tag array. Also changed the code
212         that manages isindex to use deref instead of delete.
213         (KHTMLParser::reset): Use safer sizeof for clearing the forbidden tag array. Old code had the
214         mistake of using ID_CLOSE_TAG for the array size too.
215         (KHTMLParser::parseToken): Removed code that checks for bogus tags; it's not clear why it was ever
216         there and it would prevent custom tags from working. Added range check before using the forbidden
217         tag array with the token ID since custom tags will use index values past the end of the array.
218         (KHTMLParser::getElement): Removed most of the code that makes an element by ID; now the work is done
219         inside the DocumentImpl createHTMLElement. Any code that needs to be different than a dynamic
220         createElement call is still here.
221         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): Call the tagId function in the
222         document if getTagID fails; this creates a unique per-document ID.
223
224         * khtml/misc/htmlhashes.h: Changed return types to unsigned short.
225         * khtml/misc/htmlhashes.cpp:
226         (khtml::getTagID): Changed return type to unsigned short.
227         (khtml::getAttrID): Ditto.
228
229         * khtml/misc/htmltags.c: Regenerated.
230         * khtml/misc/htmltags.h: Regenerated.
231
232         * khtml/misc/maketags: Changed the generated constants to use "const unsigned short" instead of "#define".
233         Changed ID_CLOSE_TAG to be a fixed value of 32000 rather than being just past the IDs of the HTML tags.
234         Also rewrote getTagName to work with the new scheme.
235
236         * khtml/xml/dom_docimpl.h: Added overload of createHTMLElement, made it non-virtual since it's not overriden.
237         * khtml/xml/dom_docimpl.cpp:
238         (DocumentImpl::createHTMLElement): Refactored into two separate functions, one that takes the tag ID.
239         Also updated for a few tags that the parser handled but this did not.
240
241         * kwq/KWQRenderTreeDebug.cpp:
242         (getTagName): Added. Works for custom nodes, because it calls nodeName rather than using getTagName on
243         the tag ID directly, which only works for standard nodes.
244         (operator<<): Update to call getTagName.
245         (nodePositionRelativeToRoot): Ditto.
246         (writeSelection): Ditto.
247
248 2004-12-21  David Harrison  <harrison@apple.com>
249
250         Reviewed by Ken Kocienda.
251
252         <rdar://problem/3924934> REGRESSION: double click at end of line selects start of next line
253
254         Problem was the TextIterator was not handling exitNode() from a P block properly.
255         
256         * khtml/editing/visible_text.cpp:
257         (khtml::TextIterator::TextIterator):
258         Add new param that specifies whether the iterator is for content or for searching.
259         Search iterators do not prevent newlines at the beginning.
260         (khtml::TextIterator::advance):
261         Added some comments.
262         (khtml::TextIterator::handleTextNode):
263         Added some comments.
264         (khtml::TextIterator::exitNode):
265         Emit newline for P (and other) blocks with position following the block, instead of the m_lastTextNode.
266         (khtml::TextIterator::emitCharacter):
267         Added some comments.
268         (khtml::TextIterator::range):
269         Added some comments.
270         (khtml::CharacterIterator::CharacterIterator):
271         Specify search type TextIterator.
272         (khtml::CharacterIterator::advance):
273         * khtml/editing/visible_text.h:
274         (khtml::):
275         Add new TextIterator::TextIterator param that specifies whether the iterator is for content or for searching.
276         * khtml/editing/visible_units.cpp:
277         (khtml::nextWordBoundary):
278         Specify search type TextIterator.
279
280 2004-12-21  David Harrison  <harrison@apple.com>
281
282         Reviewed by Ken Kocienda.
283
284         <rdar://problem/3924695> REGRESSION (Mail): double-clicking past end of line shows no selection, should select to EOL
285         
286         Problem was that RenderText::setSelectionState did not handle the SelectionStart case where start and end are the end of the line.
287         Fixed by pretending the start == end-1 in that situation, as long as end > 0.
288         
289         * khtml/rendering/render_text.cpp:
290         (RenderText::setSelectionState)
291
292 2004-12-21  Maciej Stachowiak  <mjs@apple.com>
293
294         Reviewed by John.
295
296         <rdar://problem/3929187> WebKit needs to restrict access to certain window operations by domain
297         
298         * khtml/ecma/kjs_window.cpp:
299         (Window::get): Change most window functions to be restricted by
300         XSS domain check.
301
302 2004-12-21  Ken Kocienda  <kocienda@apple.com>
303
304         Reviewed by John
305
306         Fix for this bug:
307         
308         <rdar://problem/3928305> selecting an entire line and typing over causes new inserted text at top of document
309
310         * khtml/editing/htmlediting.cpp:
311         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent): New function to detect case
312         formerly undetected and unhandled. This is the crux of the bug fix.
313         (khtml::DeleteSelectionCommand::doApply): Call insertPlaceholderForAncestorBlockContent() during
314         execution of command.
315         * khtml/editing/htmlediting.h: Declare new function.
316         * layout-tests/editing/deleting/delete-3928305-fix-expected.txt: Added.
317         * layout-tests/editing/deleting/delete-3928305-fix.html: Added.
318
319 2004-12-21  Ken Kocienda  <kocienda@apple.com>
320
321         Reviewed by me
322
323         * khtml/editing/htmlediting.cpp:
324         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Note to self: Must compile code before
325         checking in (aka must return false from function returning bool).
326
327 2004-12-21  Ken Kocienda  <kocienda@apple.com>
328
329         Reviewed by John
330         
331         Fix for this bug:
332         
333         <rdar://problem/3927752> Crash in khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded(DOM::NodeImpl*)
334
335         * khtml/editing/htmlediting.cpp:
336         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Added some null checks.
337         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Ditto.
338
339 2004-12-21  Ken Kocienda  <kocienda@apple.com>
340
341         Reviewed by Darin
342
343         * khtml/editing/htmlediting.cpp:
344         (khtml::ReplacementFragment::mergeStartNode): Refine concept of how this node is found based on
345         further experiements.
346         (khtml::ReplaceSelectionCommand::doApply): Add a special case for determining merges that need to
347         be done if the insertion point is in an empty block.
348         * layout-tests/editing/pasteboard/paste-text-012-expected.txt: Added.
349         * layout-tests/editing/pasteboard/paste-text-012.html: Added.
350         * layout-tests/editing/pasteboard/paste-text-013-expected.txt: Added.
351         * layout-tests/editing/pasteboard/paste-text-013.html: Added.
352         * layout-tests/editing/pasteboard/paste-text-014-expected.txt: Added.
353         * layout-tests/editing/pasteboard/paste-text-014.html: Added.
354
355 2004-12-21  Darin Adler  <darin@apple.com>
356
357         Reviewed by Ken.
358
359         - fixed <rdar://problem/3899133> text search in a Safari window takes a very long time on Tiger updates page (and some other pages)
360
361         * khtml/editing/visible_text.h: Add an "offset base node" parameter to emitCharacter, and also
362         add a field to track it. Must make a few things mutable so we can update them in the range accessor.
363         * khtml/editing/visible_text.cpp:
364         (khtml::TextIterator::advance): Pass in base node and offsets rather than computing actual offsets
365         using the node's index. We only compute the node index if actually asked for the range.
366         (khtml::TextIterator::handleTextNode): Pass 0 for base node and set base node to 0 when setting
367         up the offsets.
368         (khtml::TextIterator::handleTextBox): Ditto.
369         (khtml::TextIterator::handleReplacedElement): Pass base node and set base node instead of calling
370         nodeIndex.
371         (khtml::TextIterator::handleNonTextNode): Pass 0 for offset.
372         (khtml::TextIterator::exitNode): More of the same.
373         (khtml::TextIterator::emitCharacter): Ditto.
374         (khtml::TextIterator::range): If an offset base node is stored, then get its node index, and then
375         add that in to the offsets. Doing the work here guarantees it's done only once when doing a text search.
376
377         - another small fix
378
379         * khtml/khtml_part.cpp: Removed SPEED_DEBUG define. Not sure why it was on.
380
381 === Safari-176 ===
382
383 2004-12-20  Ken Kocienda  <kocienda@apple.com>
384
385         Reviewed by Darin
386
387         * khtml/editing/htmlediting.cpp:
388         (khtml::DeleteSelectionCommand::moveNodesAfterNode): My one-liner for this bug introduced layout test
389         regressions: <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
390         Rolling out until I can develop a real fix.
391
392 2004-12-20  David Harrison  <harrison@apple.com>
393
394         Reviewed by Dave Hyatt.
395         
396         Initial checkin of AXTextMarkerRef support.
397
398         * khtml/xml/dom_docimpl.cpp:
399         (DocumentImpl::updateSelection):
400         (DocumentImpl::setFocusNode):
401         * kwq/KWQAccObject.h:
402         * kwq/KWQAccObject.mm:
403         (-[KWQAccObject detach]):
404         (-[KWQAccObject anchorElement]):
405         (-[KWQAccObject addChildrenToArray:]):
406         (-[KWQAccObject accessibilityAttributeNames]):
407         (-[KWQAccObject accessibilityActionDescription:]):
408         (-[KWQAccObject accessibilityPerformAction:]):
409         (-[KWQAccObject textMarkerRangeFromMarkers:andEndMarker:]):
410         (-[KWQAccObject textMarkerForVisiblePosition:]):
411         (-[KWQAccObject visiblePositionForTextMarker:]):
412         (-[KWQAccObject AXTextMarkerRangeCopyStartMarkerWrapper:]):
413         (-[KWQAccObject AXTextMarkerRangeCopyEndMarkerWrapper:]):
414         (-[KWQAccObject visiblePositionForStartOfTextMarkerRange:]):
415         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
416         (-[KWQAccObject accessibilityAttributeValue:]):
417         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
418         (-[KWQAccObject textMarkerRangeFromVisiblePositions:andEndPos:]):
419         (-[KWQAccObject getSelectedTextMarkerRange]):
420         (-[KWQAccObject doAXLineForTextMarker:]):
421         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
422         (-[KWQAccObject doAXStringForTextMarkerRange:]):
423         (-[KWQAccObject doAXNextTextMarkerForTextMarker:]):
424         (-[KWQAccObject doAXPreviousTextMarkerForTextMarker:]):
425         (-[KWQAccObject doAXLeftWordTextMarkerRangeForTextMarker:]):
426         (-[KWQAccObject doAXRightWordTextMarkerRangeForTextMarker:]):
427         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
428         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
429         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
430         (-[KWQAccObject accessibilityFocusedUIElement]):
431         (-[KWQAccObject clearChildren]):
432         (-[KWQAccObject accObjectID]):
433         (-[KWQAccObject setAccObjectID:]):
434         (-[KWQAccObject removeAccObjectID]):
435         * kwq/KWQAccObjectCache.h:
436         * kwq/KWQAccObjectCache.mm:
437         (KWQAccObjectCache::KWQAccObjectCache):
438         (KWQAccObjectCache::~KWQAccObjectCache):
439         (KWQAccObjectCache::getAccObjectID):
440         (KWQAccObjectCache::removeAccObjectID):
441         (KWQAccObjectCache::textMarkerForVisiblePosition):
442         (KWQAccObjectCache::visiblePositionForTextMarker):
443
444 2004-12-19  Darin Adler  <darin@apple.com>
445
446         * kwq/KWQFoundationExtras.h: (KWQCFAutorelease): Added nil check.
447
448 2004-12-19  Darin Adler  <darin@apple.com>
449
450         Reviewed by Kevin.
451
452         - a garbage collection fix
453
454         * kwq/KWQFoundationExtras.h: (KWQCFAutorelease): Added a more-extensive comment and fixed the BUILDING_ON_PANTHER
455         #ifndef to use #if (in practice, either is OK).
456         * kwq/KWQKURL.mm: (KURL::getNSURL): Use KWQCFAutorelease instead of autorelease.
457
458 2004-12-17  David Hyatt  <hyatt@apple.com>
459
460         Fix for 3923255, specified percentage heights of divs with overflow auto inside tables not honored.
461         
462         Reviewed by kocienda
463
464         * khtml/rendering/render_box.cpp:
465         (RenderBox::calcPercentageHeight):
466         * khtml/rendering/render_table.cpp:
467         (RenderTableSection::layoutRows):
468
469 2004-12-17  David Harrison  <harrison@apple.com>
470
471         Reviewed by Ken Kocienda.
472
473         <rdar://problem/3924930> REGRESSION: triple click does not select to end of line
474         
475         * khtml/editing/visible_units.cpp:
476         (khtml::endOfParagraph):
477         When includeLineBreak is true, allow traversal to next node after enclosingBlockFlowElement.
478
479 2004-12-17  Ken Kocienda  <kocienda@apple.com>
480
481         Reviewed by Vicki
482
483         * khtml/editing/htmlediting.cpp:
484         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Missed deleting some now-obsolete expcetion
485         codes when I added the createBreakElement() function.
486
487 2004-12-17  Richard Williamson   <rjw@apple.com>
488
489         Set the floor of max cacheable object size to 40K.  This restores
490         the long standing floor.  Lower floor deleteriously impacts the PLT.
491         Reviewed by Hyatt.
492
493         * khtml/khtml_part.cpp:
494         (KHTMLPart::checkCompleted):
495         * khtml/misc/loader.cpp:
496         (Cache::setSize):
497
498 2004-12-17  Ken Kocienda  <kocienda@apple.com>
499
500         Reviewed by Hyatt
501
502         Fix for this bug:
503         
504         <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
505
506         * khtml/editing/htmlediting.cpp:
507         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Stop merging nodes when a <br> is hit.
508         Formerly checked only for block boundary.
509
510 2004-12-17  David Harrison  <harrison@apple.com>
511
512         Reviewed by Darin.
513
514                 Add KWQCFAutorelease for autoreleasing CF objects.
515         * kwq/KWQFoundationExtras.h:
516         (KWQCFAutorelease):
517         New.
518
519 2004-12-17  David Harrison  <harrison@apple.com>
520
521         Reviewed by Darin.
522
523                 Fix GC compatibility in getNSString.
524
525         * kwq/KWQString.mm:
526         (QString::getNSString):
527                 Use NSString allocator instead of CFString, so that autorelease works under GC.
528
529 2004-12-17  Ken Kocienda  <kocienda@apple.com>
530
531         Reviewed by Hyatt
532
533         Fix for this bug:
534         
535         <rdar://problem/3890973> REGRESSION (Mail): Deleting reorders remaining text
536
537         * khtml/editing/htmlediting.cpp:
538         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Added check to ensure that moving content will not
539         move it after the <body> element.
540
541 2004-12-17  Ken Kocienda  <kocienda@apple.com>
542
543         Reviewed by me
544         
545         Added new layout tests covering cases from recent bug fixes.
546
547         * layout-tests/editing/inserting/insert-div-018-expected.txt: Added.
548         * layout-tests/editing/inserting/insert-div-018.html: Added.
549         * layout-tests/editing/inserting/insert-div-019-expected.txt: Added.
550         * layout-tests/editing/inserting/insert-div-019.html: Added.
551         * layout-tests/editing/inserting/insert-div-020-expected.txt: Added.
552         * layout-tests/editing/inserting/insert-div-020.html: Added.
553         * layout-tests/editing/inserting/insert-div-021-expected.txt: Added.
554         * layout-tests/editing/inserting/insert-div-021.html: Added.
555
556 2004-12-17  Ken Kocienda  <kocienda@apple.com>
557
558         Reviewed by me
559
560         Changes in layout resulting from giving <p> elements no margin rather than 0.1em margin.
561
562         * layout-tests/editing/inserting/insert-div-013-expected.txt
563         * layout-tests/editing/inserting/insert-div-014-expected.txt
564
565 2004-12-17  Ken Kocienda  <kocienda@apple.com>
566
567         Reviewed by John
568
569         Fix for this bug:
570         
571         <rdar://problem/3925317> Increase quote in email and with cursor below the quote the new line appears above the quote
572
573         * khtml/editing/htmlediting.cpp:
574         (khtml::InsertParagraphSeparatorCommand::doApply):
575         * khtml/editing/visible_position.cpp: Refine rules for whether to use the starting node or the starting
576         block as the reference node for the insertion of the new block.
577         (khtml::isLastVisiblePositionInBlock): Tweak rules again. Descendants of following blocks should answer true.
578         I worked this all out on the whiteboard this time. This should be the last tweak.
579
580 2004-12-17  Kevin Decker  <kdecker@apple.com>
581
582         Reviewed by Ken.
583
584         Fixed <rdar://problem/3824438> Need a clean way for Dashboard to detect when an XML parsing error occurs
585
586         * khtml/xml/xml_tokenizer.cpp:
587         (khtml::XMLTokenizer::insertErrorMessageBlock): In the xml error report, instead of a generic <div>, use <parsererror> to match Mozilla.
588
589 2004-12-16  Ken Kocienda  <kocienda@apple.com>
590
591         Reviewed by Chris
592
593         Fix for this bug:
594         
595         <rdar://problem/3924888> REGRESSION (Mail): Hitting return key at end of line does not insert visible newline
596
597         * khtml/editing/htmlediting.cpp:
598         (khtml::InsertParagraphSeparatorCommand::doApply): Tweaked code I added just before to fix 3924486, so that
599         it checks the downstream node for the starting position.
600
601 2004-12-16  Ken Kocienda  <kocienda@apple.com>
602
603         Reviewed by Chris
604
605         Added new createBreakElement() function that makes creating a <br> element a one-liner.
606         Converted all the code that used to call the DocumentImpl, and dealt with the exceptionCode,
607         over to this new helper.
608
609         * khtml/editing/htmlediting.cpp:
610         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Now uses new helper function.
611         (khtml::InsertLineBreakCommand::doApply): Ditto.
612         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
613         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
614         (khtml::ReplaceSelectionCommand::doApply): Ditto.
615         (khtml::createBreakElement): New helper.
616         * khtml/editing/htmlediting.h: Ditto.
617
618 2004-12-16  David Hyatt  <hyatt@apple.com>
619
620         Fix a bug where vertical-align values that depended on their parent's value went crazy if the parent was
621         vertical-align top or bottom.  The bug is 3771007, bankofamerica's ebills page.
622         
623         Reviewed by kocienda
624
625         * khtml/rendering/render_object.cpp:
626         (RenderObject::getVerticalPosition):
627
628 2004-12-16  Ken Kocienda  <kocienda@apple.com>
629
630         Reviewed by John
631
632         Fix for these bugs:
633         
634         <rdar://problem/3924486> REGRESSION (Mail): Hitting return key does not insert visible newline
635         <rdar://problem/3924579> REGRESSION (Mail): After deleting, hitting return key does not insert visible newline
636
637         * khtml/editing/htmlediting.cpp:
638         (khtml::InsertParagraphSeparatorCommand::doApply): For the first bug, detect when inserting a <p> will
639         make a visible <br> collapse. For the second bug, move the code that inserts the new <p> after
640         a check which may move the node used as the reference node for the insertion. Also change this code to
641         insert the <p> after the last sibling of the starting position, to move it past the nodes we're going
642         to want to shift into the new <p>.
643
644 2004-12-16  Darin Adler  <darin@apple.com>
645
646         Reviewed by Ken.
647
648         - use <p> elements rather than <br> when pasting plain text; also use margin of 0 rather than 0.1 em
649           after talking this over with Dave and Ken
650
651         * khtml/editing/htmlediting.h: Added createDefaultParagraphElement and createBlockPlaceholderElement.
652         * khtml/editing/htmlediting.cpp:
653         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Use new createBlockPlaceholderElement
654         helper so this can share code with the plain-text conversion code.
655         (khtml::InsertParagraphSeparatorCommand::createParagraphElement): Use new createDefaultParagraphElement
656         helper so this can share code with the plain-text conversion code.
657         (khtml::createDefaultParagraphElement): Added.
658         (khtml::createBlockPlaceholderElement): Added.
659
660         * khtml/editing/markup.cpp: (khtml::createFragmentFromText): Use paragraphs rather than
661         <br> elements for pasting plain text.
662
663         - regenerated these files with the newer gperf
664
665         * khtml/css/cssproperties.c: Regenerated.
666         * khtml/css/cssvalues.c: Regenerated.
667         * khtml/misc/htmlattrs.c: Regenerated.
668         * khtml/misc/htmltags.c: Regenerated.
669
670 2004-12-16  Ken Kocienda  <kocienda@apple.com>
671
672         Reviewed by Hyatt
673
674         Fix for this bug:
675         
676         <rdar://problem/3924291> REGRESSION (Mail): Crash deleting content following a <p> element
677
678         * khtml/xml/dom_nodeimpl.cpp:
679         (NodeImpl::enclosingInlineElement): Fixed problem in this function where recursive search for
680         parent that is not an inline would skip past previous siblings of nodes which were blocks. Now
681         it stops looking in this situation. This problem eventually caused the delete code to try to 
682         merge a node under a descendent.
683
684 2004-12-16  Adele Amchan  <adele@apple.com>
685
686         Change by Richard, reviewed by me.
687
688         Fix for: <rdar://problem/3923983> background image decoding prevents page with 0Kb image from finishing to load
689
690         * khtml/misc/loader.cpp: (CachedImage::data): Added call to notifyFinished so the 0Kb image case finishes loading.
691
692 2004-12-16  Adele Amchan  <adele@apple.com>
693
694         Reviewed by Chris.
695
696         Fix for: <rdar://problem/3534824> VIP: some navigation links on safeway.com don't work due to a JavaScript quirk
697
698         Added a call to ObjectImp::get before Window::get just returns Undefined.  
699         This was preventing us from getting the toString function from a Window object.
700
701         * khtml/ecma/kjs_window.cpp: (Window::get):
702
703 2004-12-16  Ken Kocienda  <kocienda@apple.com>
704
705         Reviewed by John
706         
707         Fix for this bug:
708         
709         <rdar://problem/3918351> REGRESSION (Mail, 173-175+): Return before first char of line leaves insertion point in wrong place
710         
711         * khtml/editing/htmlediting.cpp:
712         (khtml::InsertParagraphSeparatorCommand::doApply): Basically, did a rewrite of this function
713         to do a better job than it was doing before. Added several test cases to prove I am on a 
714         better track.
715         * khtml/editing/visible_position.cpp:
716         (khtml::isFirstVisiblePositionInBlock): Tweaked the rules a bit to fix an issue very similar to the
717         leaving-the-bar-node case problem I just fixed in a recent checkin (relevant markup: <p>foo</p>bar).
718         This function was returning true for the first position in "bar". Wrong. Also tightened up other 
719         rule: Should not report true when relationship between blocks cannot be determined.
720         (khtml::isLastVisiblePositionInBlock): Tightened up rule as above: Should not report true 
721         when relationship between blocks cannot be determined.
722         * layout-tests/editing/inserting/insert-div-010-expected.txt: Added.
723         * layout-tests/editing/inserting/insert-div-010.html: Added.
724         * layout-tests/editing/inserting/insert-div-011-expected.txt: Added.
725         * layout-tests/editing/inserting/insert-div-011.html: Added.
726         * layout-tests/editing/inserting/insert-div-012-expected.txt: Added.
727         * layout-tests/editing/inserting/insert-div-012.html: Added.
728         * layout-tests/editing/inserting/insert-div-013-expected.txt: Added.
729         * layout-tests/editing/inserting/insert-div-013.html: Added.
730         * layout-tests/editing/inserting/insert-div-014-expected.txt: Added.
731         * layout-tests/editing/inserting/insert-div-014.html: Added.
732         * layout-tests/editing/inserting/insert-div-015-expected.txt: Added.
733         * layout-tests/editing/inserting/insert-div-015.html: Added.
734         * layout-tests/editing/inserting/insert-div-016-expected.txt: Added.
735         * layout-tests/editing/inserting/insert-div-016.html: Added.
736         * layout-tests/editing/inserting/insert-div-017-expected.txt: Added.
737         * layout-tests/editing/inserting/insert-div-017.html: Added.
738             
739 2004-12-16  Ken Kocienda  <kocienda@apple.com>
740
741         Reviewed by me
742         
743         Added a layout test based on my last checkin.
744
745         * layout-tests/editing/selection/move-by-word-001-expected.txt: Added.
746         * layout-tests/editing/selection/move-by-word-001.html: Added.
747
748 2004-12-16  Ken Kocienda  <kocienda@apple.com>
749
750         Reviewed by John
751
752         Fix for this bug:
753         
754         <rdar://problem/3917929> REGRESSION (Mail): Command-left-arrow leaves insertion point too high after specific steps
755
756         * khtml/editing/visible_text.cpp:
757         (khtml::SimplifiedBackwardsTextIterator::advance): Add new check for leaving a text node and iterating
758         backwards into a different block that is an descendent of the block containing the text node (as in leaving 
759         the "bar" node in this example: <p>foo</p>bar).
760         (khtml::SimplifiedBackwardsTextIterator::handleNonTextNode): Call new emitNewlineForBROrText helper.
761         (khtml::SimplifiedBackwardsTextIterator::emitNewlineForBROrText): Factor out code from handleNonTextNode, since
762         it is called from there, and now also from advance().
763
764 2004-12-15  Darin Adler  <darin@apple.com>
765
766         Reviewed by Ken.
767         
768         - fixed problem where plain-text would put a blank line between each <p> even when they have no margins
769
770         * khtml/editing/visible_text.cpp: (khtml::TextIterator::exitNode): Add more checks and only set the
771         "add one more newline" flag if the margin is sufficient. A more complete fix would ignore the node
772         type altogether and use the render tree instead.
773
774 2004-12-14  John Sullivan  <sullivan@apple.com>
775
776         Reviewed by Ken.
777         
778         - rest of WebCore fix for <rdar://problem/3790011> undoable operations all say "Undo" 
779         in the menu, no specific action names
780
781         * khtml/editing/edit_actions.h: new header, contains EditAction enum
782         (renamed from HTMLEditAction, formerly in htmlediting.h)
783
784         * ForwardingHeaders/editing/edit_actions.h: new forwarding header
785         
786         * khtml/editing/htmlediting.h:
787         removed HTMLEditAction enum in favor of including edit_actions.h; added khtml::
788         namespace to EditAction usages; added m_editingAction ivar to ApplyStyleCommand
789
790         * khtml/editing/htmlediting.cpp:
791         (khtml::EditCommandPtr::editingAction):
792         update for enum name change
793         (khtml::EditCommand::editingAction):
794         ditto
795         (khtml::ApplyStyleCommand::ApplyStyleCommand):
796         added editingAction parameter to this constructor
797         (khtml::ApplyStyleCommand::editingAction):
798         return new ivar
799         (khtml::DeleteSelectionCommand::editingAction):
800         update for enum name change
801         (khtml::MoveSelectionCommand::editingAction):
802         ditto
803         (khtml::TypingCommand::editingAction):
804         ditto
805         (khtml::ReplaceSelectionCommand::editingAction):
806         ditto
807         
808         * khtml/khtml_part.h:
809         added EditAction parameter to applyStyle and computeAndSetTypingStyle
810         * khtml/khtml_part.cpp:
811         (KHTMLPart::computeAndSetTypingStyle):
812         added EditAction parameter
813         (KHTMLPart::applyStyle):
814         ditto
815
816         * kwq/KWQKHTMLPart.mm:
817         (KWQKHTMLPart::registerCommandForUndoOrRedo):
818         do the cast from EditAction to WebUndoAction a different way to match other code
819         
820         * kwq/WebCoreBridge.h:
821         * kwq/WebCoreBridge.mm:
822         (-[WebCoreBridge setTypingStyle:withUndoAction:]):
823         added WebUndoAction parameter, passed into ApplyStyleCommand constructor
824         (-[WebCoreBridge applyStyle:withUndoAction:]):
825         ditto
826
827         * WebCore.pbproj/project.pbxproj:
828         updated for new files
829
830 2004-12-14  David Hyatt  <hyatt@apple.com>
831
832         Fix for 3562458, rowspan and colspan converted to ints so that large values will work for them.  Remove
833         the ridiculous 1024 limit on the span values.
834
835         * khtml/html/html_tableimpl.cpp:
836         (HTMLTableCellElementImpl::parseHTMLAttribute):
837         * khtml/rendering/render_table.cpp:
838         (RenderTableCell::collapsedBottomBorder):
839         * khtml/rendering/render_table.h:
840         (khtml::RenderTableCell::colSpan):
841         (khtml::RenderTableCell::setColSpan):
842         (khtml::RenderTableCell::rowSpan):
843         (khtml::RenderTableCell::setRowSpan):
844         (khtml::RenderTableCol::span):
845         (khtml::RenderTableCol::setSpan):
846
847 2004-12-14  David Hyatt  <hyatt@apple.com>
848
849         Make sure <col> and <colgroup> can have spans updated dynamically as well.
850         
851         Reviewed by rjw
852
853         * khtml/html/html_tableimpl.cpp:
854         (HTMLTableColElementImpl::parseHTMLAttribute):
855         * khtml/rendering/render_table.cpp:
856         (RenderTableCell::updateFromElement):
857         (RenderTableCol::updateFromElement):
858
859 2004-12-14  David Hyatt  <hyatt@apple.com>
860
861         Fix for 3833123, setting a cell's colspan does not update rendering like it should.
862         
863         Reviewed by rjw
864
865         * khtml/html/html_tableimpl.cpp:
866         (HTMLTableCellElementImpl::parseHTMLAttribute):
867         * khtml/rendering/render_table.cpp:
868         (RenderTableCell::RenderTableCell):
869         (RenderTableCell::updateFromElement):
870
871 2004-12-14  Chris Blumenberg  <cblu@apple.com>
872
873         Fixed: <rdar://problem/3864536> crash copying text from other apps and pasting in a sticky in dashboard
874
875         Reviewed by hyatt.
876
877         * khtml/editing/markup.cpp:
878         (khtml::createFragmentFromText): ref and deref the fragment since calling appendChild can completely deref it
879
880 2004-12-14  David Hyatt  <hyatt@apple.com>
881
882         Fix for 3785211. Make sure to do a layout with the old position before doing a layout after changing to the new position.
883         This is actually a regression from my positioned object DHTML optimization.
884         
885         Reviewed by kocienda
886
887         * khtml/rendering/render_object.cpp:
888         (RenderObject::setStyle):
889
890 2004-12-14  David Hyatt  <hyatt@apple.com>
891
892         Make sure the class attribute works when newlines are present in the attribute.
893
894         Reviewed by kocienda
895
896         * khtml/html/html_elementimpl.cpp:
897         (HTMLNamedAttrMapImpl::parseClassAttribute):
898
899 2004-12-14  David Hyatt  <hyatt@apple.com>
900
901         Fix for 3724938, float element is duplicated and paints twice.  The logic for when to paint floats was
902         actually fairly screwed up.  This patch simplifies the logic and makes addOverhangingFloats easier to
903         read by splitting it into two separate functions.
904         
905         Reviewed by kocienda
906
907         * khtml/rendering/render_block.cpp:
908         (khtml::RenderBlock::layoutBlockChildren):
909         (khtml::RenderBlock::clearFloats):
910         (khtml::RenderBlock::addOverhangingFloats):
911         (khtml::RenderBlock::addIntrudingFloats):
912         * khtml/rendering/render_block.h:
913
914 2004-12-14  John Sullivan  <sullivan@apple.com>
915
916         Reviewed by Ken.
917         
918         - added Undo action names for Cut, Paste, and Drag
919
920         * khtml/editing/htmlediting.h:
921         * khtml/editing/htmlediting.cpp:
922         (khtml::DeleteSelectionCommand::editingAction):
923         overridden to return HTMLEditActionCut
924         (khtml::MoveSelectionCommand::editingAction):
925         overridden to return HTMLEditActionDrag
926         (khtml::ReplaceSelectionCommand::editingAction):
927         overridden to return HTMLEditActionPaste
928
929 2004-12-14  John Sullivan  <sullivan@apple.com>
930
931         Reviewed by Ken.
932         
933         - architecture for WebCore part of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu, 
934         no specific action names
935           
936         The remaining step is to make each EditCommand subclass override editingAction() to return an
937         appropriate value. (Unfortunately the mapping between subclass and user-distinguishable action
938         is not completely straightforward, so this next step isn't trivial.)
939
940         * khtml/editing/htmlediting.h:
941         new enum for HTMLEditAction
942
943         * khtml/editing/htmlediting.cpp:
944         (khtml::EditCommandPtr::editingAction):
945         new method, calls through to EditCommand
946         (khtml::EditCommand::editingAction):
947         new method for subclasses to override, returns HTMLEditActionUnspecified at this level
948         (khtml::TypingCommand::editingAction):
949         proof of concept override, returns HTMLEditActionTyping
950                 
951         * kwq/KWQKHTMLPart.h:
952         declare new private bottleneck method registerCommandForUndoOrRedo
953         * kwq/KWQKHTMLPart.mm:
954         (KWQKHTMLPart::registerCommandForUndoOrRedo):
955         new bottleneck method to reduce code duplication; now calls over the bridge
956         to get the localized string to use for the Undo action name
957         (KWQKHTMLPart::registerCommandForUndo):
958         now calls new bottleneck method
959         (KWQKHTMLPart::registerCommandForRedo):
960         now calls new bottleneck method
961         
962         * kwq/WebCoreBridge.h:
963         new enum for WebUndoAction, maps directly to HTMLEditAction.
964         Declaration of nameForUndoAction:
965
966 2004-12-14  Darin Adler  <darin@apple.com>
967
968         Reviewed by John.
969
970         - added a bunch of missing nil checks; our old version of inherits used to work for nil (by accident)
971
972         * khtml/rendering/render_frames.cpp:
973         (RenderPart::~RenderPart): Check widget for nil.
974         (RenderPart::setWidget): Ditto.
975         (RenderFrame::slotViewCleared): Ditto.
976         (RenderPartObject::slotViewCleared): Ditto.
977
978 2004-12-13  Darin Adler  <darin@apple.com>
979
980         Reviewed by Ken.
981
982         - moved markup-related functions into new sources files in the editing directory
983         - removed all of the uses of dynamic_cast, preparing to turn off RTTI to make our code smaller and slightly faster
984
985         * ForwardingHeaders/editing/markup.h: Added.
986         * khtml/editing/markup.h: Added.
987         * khtml/editing/markup.cpp: Added.
988
989         * WebCore.pbproj/project.pbxproj: Added markup.h/cpp.
990
991         * khtml/dom/dom_node.cpp: (Node::toHTML): Call createMarkup since there's no toHTML in NodeImpl any more.
992         * khtml/html/html_elementimpl.cpp:
993         (HTMLElementImpl::innerHTML): Changed to call createMarkup.
994         (HTMLElementImpl::outerHTML): Ditto.
995
996         * khtml/ecma/kjs_window.cpp:
997         (Window::retrieveWindow): Comment out assert that uses dynamic_cast.
998         (Window::retrieveActive): Ditto.
999
1000         * khtml/editing/htmlediting.h: Added forward class declaration needed now that I removed one elsewhere.
1001         * khtml/xml/dom_docimpl.h: Ditto.
1002
1003         * khtml/khtml_part.cpp:
1004         (KHTMLPart::slotDebugDOMTree): Use createMarkup instead of toHTML.
1005         (KHTMLPart::processObjectRequest): Use inherits instead of dynamic_cast.
1006
1007         * khtml/rendering/render_image.cpp: (RenderImage::paint): Add an explicit QChar conversion so this code
1008         still works even with the additional replace overloads added to QString.
1009         * kwq/KWQTextCodec.mm: (QTextCodec::fromUnicode): Ditto.
1010
1011         * khtml/rendering/render_object.h: Removed the version of arenaDelete that does not take an object
1012         base pointer, because it used dynamic_cast in its implementation. Made the other version public.
1013         * khtml/rendering/render_object.cpp: Ditto.
1014         * khtml/rendering/render_replaced.cpp: (RenderWidget::deref): Pass object base pointer to arenaDelete.
1015
1016         * khtml/xml/dom2_rangeimpl.h: Removed extra parameters from toHTML, and unneeded includes and declarations.
1017         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::toHTML): Changed to call createMarkup, and moved all
1018         the support code into markup.cpp.
1019
1020         * khtml/xml/dom_nodeimpl.h: Moved toHTML and related functions into markup.cpp.
1021         * khtml/xml/dom_nodeimpl.cpp: Ditto.
1022
1023         * khtml/xml/dom_position.cpp:
1024         (DOM::startPosition): Implemented the version of this that takes a RangeImpl. Also added null checks
1025         so these return null positions rather than raising exceptions.
1026         (DOM::endPosition): Ditto.
1027
1028         * khtml/khtmlview.h: Added an APPLE_CHANGES function so inherits can detect this class without dynamic_cast.
1029         * kwq/KWQFrame.h: Ditto.
1030         * kwq/KWQFrame.mm: (QFrame::isQFrame): Ditto.
1031         * kwq/KWQKPartsPart.h: Ditto.
1032         * kwq/KWQKPartsPart.mm: (KParts::ReadOnlyPart::isKPartsReadOnlyPart): Ditto.
1033         * kwq/KWQScrollView.h: Ditto.
1034         * kwq/KWQScrollView.mm: (QScrollView::isQScrollView): Ditto.
1035         * kwq/KWQKHTMLPart.h: Ditto.
1036         * kwq/KWQKHTMLPart.mm:
1037         (KHTMLView::isKHTMLView): Ditto.
1038         (KWQKHTMLPart::setTitle): Added an explicit QChar conversion so this code still works even with the additional
1039         replace overloads added to QString.
1040         (KWQKHTMLPart::setStatusBarText): Ditto.
1041         (KWQKHTMLPart::runJavaScriptAlert): Ditto.
1042         (KWQKHTMLPart::runJavaScriptConfirm): Ditto.
1043         (KWQKHTMLPart::runJavaScriptPrompt): Ditto.
1044         (KWQKHTMLPart::attributedString): Ditto.
1045         (KWQKHTMLPart::isCharacterSmartReplaceExempt): Ditto.
1046         (KWQKHTMLPart::isKHTMLPart): That dynamic_cast thing (see above).
1047
1048         * kwq/KWQObject.h: Added virtual methods for the few cases where we need dynamic_cast-like behavior.
1049         * kwq/KWQObject.mm:
1050         (QObject::inherits): Changed to not use dynamic cast.
1051         (QObject::isKHTMLPart): Added. Returns false.
1052         (QObject::isKHTMLView): Ditto.
1053         (QObject::isKPartsReadOnlyPart): Ditto.
1054         (QObject::isQFrame): Ditto.
1055         (QObject::isQScrollView): Ditto.
1056
1057         * kwq/KWQRenderTreeDebug.cpp:
1058         (write): Changed to use inherits rather than dynamic_cast.
1059         (writeSelection): Ditto.
1060
1061         * kwq/KWQSlot.mm: (KWQSlot::call): Call through to the version with just a job pointer parameter rather
1062         than going straight on to the "no parameters at all" version.
1063
1064         * kwq/KWQString.h:
1065         * kwq/KWQString.mm: (QString::replace): Added overloads.
1066         * kwq/WebCoreBridge.mm:
1067         (-[WebCoreBridge markupStringFromNode:nodes:]): Changed to call functions in markup.h.
1068         (-[WebCoreBridge markupStringFromRange:nodes:]): Ditto.
1069         (-[WebCoreBridge selectedString]): Added an explicit QChar conversion so this code still works even with
1070         the additional replace overloads added to QString.
1071         (-[WebCoreBridge stringForRange:]): Ditto.
1072         (-[WebCoreBridge copyDOMNode:copier:]): Changed to call functions in markup.h.
1073         (-[WebCoreBridge elementAtPoint:]): QChar conversion.
1074         (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]): Changed to call functions in markup.h.
1075         (-[WebCoreBridge documentFragmentWithText:]): Changed to call functions in markup.h.
1076
1077 2004-12-13  Ken Kocienda  <kocienda@apple.com>
1078
1079         Reviewed by John
1080
1081         Fix for this bug:
1082         
1083         <rdar://problem/3917956> REGRESSION (Mail): pasting can leave insertion point inside pasted text
1084
1085         * khtml/editing/htmlediting.cpp:
1086         (khtml::ReplaceSelectionCommand::doApply): Fix coding mistake. Calculations of bool flag based on 
1087         leading and trailing whitespace positions was reversed! I must have introduced this error recently
1088         when changing around this code.
1089
1090 2004-12-13  David Hyatt  <hyatt@apple.com>
1091
1092         Fix for 3915787, macobserver doesn't paint.  floatRect() needed to be const in the base class.  Also hit-testing
1093         and painting was using the wrong rect when setting up the x/y of the rect.
1094         
1095         Reviewed by mjs
1096
1097         * khtml/rendering/render_block.cpp:
1098         (khtml::RenderBlock::paint):
1099         (khtml::RenderBlock::nodeAtPoint):
1100         * khtml/rendering/render_object.h:
1101         (khtml::RenderObject::floatRect):
1102
1103 2004-12-13  Ken Kocienda  <kocienda@apple.com>
1104
1105         Reviewed by John
1106
1107         Fix for this bug:
1108         
1109         <rdar://problem/3917863> REGRESSION (Mail): pasting two lines of plain text copied from an RTF document results in two styles
1110
1111         Code to figuire out the end node to merge was missing the font tag in the second paragraph
1112         written out by AppKit convert-to-HTML function. I refined the algorithm to be smarter.
1113
1114         * khtml/editing/htmlediting.cpp:
1115         (khtml::ReplacementFragment::mergeEndNode): Refine algorithm used to walk through the fragment being pasted
1116         looking for the node that is the last inline in the last block of the fragment. The old algorithm was 
1117         insufficiently powerful.
1118         (khtml::ReplacementFragment::enclosingBlock): New helper function.
1119         * khtml/editing/htmlediting.h: Add declaration for new helper function.
1120         * layout-tests/editing/pasteboard/paste-text-011-expected.txt: Added.
1121         * layout-tests/editing/pasteboard/paste-text-011.html: Added.
1122
1123 2004-12-13  Ken Kocienda  <kocienda@apple.com>
1124
1125         Reviewed by John
1126
1127         WebCore side of fix for this bug:
1128         
1129         <rdar://problem/3768372> REGRESSION (Mail): paste of text ending in whitespace loses whitespace
1130
1131         Note that we are coordinating with Doug Davidson on the AppKit team to make a complete fix for this
1132         bug. This change involves our half of the needed changes.
1133         
1134         Note that a lot of this change has to do with changing code to use a <br> element instead of
1135         a comment node as the mechanism to annotate HTML with information used to fix the bug. In some
1136         other places, code to handle comments in markup can be removed since we do not use comments for
1137         such annotations after this change.
1138
1139         * khtml/editing/htmlediting.cpp: Remove isComment() helper; no longer needed.
1140         (khtml::ReplacementFragment::ReplacementFragment): Change m_hasInterchangeNewlineComment name to m_hasInterchangeNewline.
1141         (khtml::ReplacementFragment::isInterchangeNewlineNode): Name changed from isInterchangeNewlineComment.
1142         (khtml::ReplacementFragment::isInterchangeConvertedSpaceSpan): Local variable name convertedSpaceSpanClass changed to
1143         convertedSpaceSpanClassString to match other uses of the idiom used here.
1144         (khtml::ReplaceSelectionCommand::doApply): Change hasInterchangeNewlineComment() name to hasInterchangeNewline().
1145         * khtml/editing/htmlediting.h: Change names as noted in .cpp file. Remove isComment() helper; no longer needed.
1146         (khtml::ReplacementFragment::hasInterchangeNewline):  Change hasInterchangeNewlineComment() name to hasInterchangeNewline().
1147         * khtml/html/html_elementimpl.cpp:
1148         (HTMLElementImpl::createContextualFragment): No longer has includeCommentsInDOM flag; no longer needed as we do not
1149         annotate fragments with comments any longer.
1150         * khtml/html/html_elementimpl.h: Ditto.
1151         * khtml/xml/dom2_rangeimpl.cpp: Remove addCommentToHTMLMarkup() helper. No longer needed.
1152         (DOM::interchangeNewlineMarkupString): New helper to return <br> element markup we use to annotate content for interchange.
1153         (DOM::RangeImpl::toHTML): No longer uses addCommentToHTMLMarkup; now calls interchangeNewlineMarkupString(). Remove
1154         spurious semi-colon.
1155         * khtml/xml/dom2_rangeimpl.h: Remove obsolete addCommentToHTMLMarkup() function and EAddToMarkup enum.
1156         * kwq/WebCoreBridge.mm:
1157         (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]): No longer pass bool to ask for including comments
1158         in DOM when calling createContextualFragment().
1159
1160 2004-12-10  John Sullivan  <sullivan@apple.com>
1161
1162         fixed deployment build bustage that John Louch ran into
1163
1164         * kwq/KWQTextEdit.mm:
1165         (QTextEdit::setScrollBarModes):
1166         move bool declaration inside exception-handling block to avoid obscure
1167         compiler error
1168
1169 2004-12-10  Maciej Stachowiak  <mjs@apple.com>
1170
1171         Reviewed by Richard.
1172
1173         <rdar://problem/3907484> REGRESSION (125-173): crash when KWQTextField is dealloc'ed while setting focus (profoundlearning.com)
1174         
1175         * kwq/KWQWidget.mm:
1176         (QWidget::setFocus): Handle the case where setting focus removed
1177         us from the superview - this can happen due to style changes on
1178         focus change.
1179
1180 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1181
1182         Reviewed by Hyatt
1183
1184         Fix for this bug:
1185         
1186         <rdar://problem/3915008> REGRESSION (Mail): Too much white space between lines separated by carriage returns
1187
1188         There are a number of interesting things we could do to fix this bug, including SPI and involving
1189         the WebKit delegate, etc., however it seems reasonable to start with a hard-coded default that
1190         will fix the bug in the general case until such time as we can come up with more specific
1191         solutions. 
1192         
1193         So, I added a helper method to create <p> elements with an inline style that sets top and bottom margins
1194         to 0.1em.
1195
1196         * khtml/editing/htmlediting.cpp:
1197         (khtml::InsertParagraphSeparatorCommand::createParagraphElement): New factory method to create
1198         paragraph elements to insert. Also adds style information to keep the <p> from having "too-big" margins.
1199         (khtml::InsertParagraphSeparatorCommand::doApply): Call new factory method.
1200         * khtml/editing/htmlediting.h: Add createParagraphElement() declaration.
1201
1202 2004-12-10  Darin Adler  <darin@apple.com>
1203
1204         Reviewed by Hyatt.
1205
1206         - fixed <rdar://problem/3910419> setting style={overflow:hidden} for <textarea> does not prevent appearance of scrollbars
1207
1208         * khtml/rendering/render_form.h: Remove now-unneeded wrap parameter.
1209         * khtml/rendering/render_form.cpp:
1210         (RenderSubmitButton::rawText): Convert to QChar explicitly.
1211         (RenderLineEdit::updateFromElement): Ditto.
1212         (RenderLineEdit::slotTextChanged): Ditto.
1213         (RenderSelect::updateFromElement): Ditto.
1214         (TextAreaWidget::TextAreaWidget): Moved out most of the initialization since it's not something
1215         that requires a derived class. Now we don't use this class at all for WebCore, but they still
1216         have it for KDE.
1217         (TextAreaWidget::event): Moved out the ifdefs.
1218         (RenderTextArea::RenderTextArea): Moved setting code from TextAreaWidget here. Put a bunch that
1219         we don't need at all inside !APPLE_CHANGES, and removed the setting for scroll bars, since that's
1220         now done in setStyle.
1221         (RenderTextArea::handleFocusOut): Use type QTextEdit instead of TextAreaWidget since that's all
1222         that's needed and WebCore no longer has TextAreaWidget.
1223         (RenderTextArea::calcMinMaxWidth): Ditto.
1224         (RenderTextArea::setStyle): Add code to set scroll bar modes based on wrap setting combined with
1225         overflow style.
1226         (RenderTextArea::updateFromElement): Use type QTextEdit.
1227         (RenderTextArea::text): Ditto.
1228         (RenderTextArea::select): Ditto.
1229
1230         * kwq/KWQTextArea.mm:
1231         (-[KWQTextArea _configureTextViewForWordWrapMode]): Don't set horizontal scroller visibility here,
1232         since it's now handled by QTextEdit.
1233         (-[KWQTextArea initWithFrame:]): Don't set vertical scroller visibility or scroller auto-hiding.
1234
1235         * kwq/KWQTextEdit.h: Add setScrollBarModes function to be used instead of separate setter for
1236         the horizontal and vertical mode; needed because AppKit switches "autohide" for both at once.
1237         * kwq/KWQTextEdit.mm: (QTextEdit::setScrollBarModes): Added.
1238
1239 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1240
1241         Reviewed by Darin
1242
1243         Fix for this bug:
1244         
1245         <rdar://problem/3915047> HItting return in empty document inserts <p> but 
1246         insertion point does not move
1247
1248         * khtml/editing/htmlediting.cpp:
1249         (khtml::InsertParagraphSeparatorCommand::doApply): The issue is that the
1250         code to insert the <p> element for the return is not detecting the fact
1251         that the document is empty. Inserting a <p> into an empty body will not
1252         "add a new line" as the user expects. With this change, we'll add a second 
1253         <p> when the root editable element has no rendered kids.
1254
1255 2004-12-10  Maciej Stachowiak  <mjs@apple.com>
1256
1257         Reviewed by John.
1258
1259         <rdar://problem/3912979> REGRESSION (125-173): repro crash in HTMLCollectionImpl code (www.clubtravel.ie)
1260
1261         * khtml/html/html_miscimpl.cpp:
1262         (HTMLCollectionImpl::traverseNextItem): Pass base when traversing
1263         the initial one step, otherwise we might inadvertantly step
1264         outside the collection base, thereby causing assertion failures or
1265         other badness later.
1266
1267 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1268
1269         Reviewed by Chris
1270
1271         * khtml/editing/htmlediting.cpp:
1272         (khtml::InsertParagraphSeparatorCommand::doApply): There is a starting block which is supposed to 
1273         act as the root node for this operation. However, a loop was incorrectly coded, and a parent node
1274         search could escape this node. Also, one other piece to code to move nodes to the new <p> element
1275         should do nothing if the starting point for the selection is itself the starting block.
1276         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Similar changes, in spirit, to the above
1277         function, though the names and concepts are slightly different.
1278
1279 2004-12-10  Maciej Stachowiak  <mjs@apple.com>
1280
1281         Reviewed by Ken.
1282
1283         <rdar://problem/3907705> REGRESSION (172-173): DHTML menus are broken at hrweb.apple.com
1284         
1285         * khtml/dom/html_document.cpp:
1286         (HTMLDocument::nameableItems): New method, wrapper for HTMLCollection creation.
1287         * khtml/dom/html_document.h:
1288         * khtml/ecma/kjs_html.cpp:
1289         (KJS::HTMLDocument::tryGet): use doc.nameableItems(), not doc.all()!
1290         * khtml/html/html_miscimpl.cpp:
1291         (HTMLCollectionImpl::traverseNextItem): Added new DOC_NAMEABLE_ITEMS type, this represents
1292         the items that can be accessed directly as a document propery, in particular forms, images,
1293         objects, applets and embeds.
1294         (HTMLCollectionImpl::updateNameCache): Fix some nameCache/idCache confusion.
1295         (HTMLFormCollectionImpl::updateNameCache): Ditto.
1296         * khtml/html/html_miscimpl.h:
1297         (DOM::HTMLCollectionImpl::): Added new type.
1298
1299 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1300
1301         Reviewed by John
1302
1303         Fix for this bug:
1304         
1305         <rdar://problem/3914779> REGRESSION (Mail): Cannot arrow navigate to position before last character on text-wrapped line
1306
1307         * khtml/rendering/render_text.cpp:
1308         (RenderText::caretRect): Code was not detecting space at the end of a line correctly. Now it does.
1309
1310 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1311
1312         Reviewed by John
1313
1314         Fix for this bug:
1315
1316         <rdar://problem/3914755> REGRESSION (Mail): Insertion point disappears after pasting paragraph
1317
1318         * khtml/editing/htmlediting.cpp:
1319         (khtml::ReplaceSelectionCommand::doApply): Selection could end up in a "placeholder" node
1320         that was removed from the document when pasting. This caused the disappearance. Now this
1321         is detected, and the selection is shifted to a node that is in the document.
1322
1323 2004-12-09  Richard Williamson   <rjw@apple.com>
1324
1325         Check to disable threaded decoding during
1326         layout tests wasn't invoking function, just checking address of 
1327         function, which would always return true.
1328         
1329         * kwq/WebCoreImageRendererFactory.m:
1330         (+[WebCoreImageRendererFactory shouldUseThreadedDecoding]):
1331
1332 2004-12-09  David Hyatt  <hyatt@apple.com>
1333
1334         Fix for 3892686, left/top overflow was not being propagated properly up to containing blocks because of a math
1335         error.
1336
1337         Also fix a bug I noticed on the same page where relative position offsets were not being added in properly for
1338         all inlines when repainting.
1339         
1340         Reviewed by rjw
1341
1342         * khtml/rendering/render_block.cpp:
1343         (khtml::RenderBlock::layoutBlockChildren):
1344         * khtml/rendering/render_flow.cpp:
1345         (RenderFlow::getAbsoluteRepaintRect):
1346
1347 2004-12-09  David Hyatt  <hyatt@apple.com>
1348
1349         Fix for 3867545, finance.yahoo.com lays out incorrectly.  Add a quirk that will prevent tables from moving
1350         down below floats when there is insufficient space.  Instead we will match Gecko and just spill out of the
1351         containing block to the right.  This appears to be the more common desired behavior, despite being wrong.
1352         WinIE sometimes wraps and sometimes doesn't, but it's really hard for us to match its inconsistency.
1353         
1354         Reviewed by john
1355
1356         * khtml/rendering/render_block.cpp:
1357         (khtml::RenderBlock::getClearDelta):
1358         * layout-tests/apple-only/base/www.cnn.com/index-expected.txt:
1359         * layout-tests/apple-only/base/www.ebay.com/index-expected.txt:
1360         * layout-tests/apple-only/base/www.excite.com/index-expected.txt:
1361         * layout-tests/fast/block/margin-collapse/102-expected.txt:
1362         * layout-tests/fast/block/margin-collapse/102.html:
1363
1364 2004-12-09  Richard Williamson   <rjw@apple.com>
1365
1366         Fixed <rdar://problem/3914078> worldclock crashing gc related
1367
1368         Use ProtectedValue for Context2D instance members.
1369
1370         Reviewed by Maciej.
1371
1372         * khtml/ecma/kjs_html.h:
1373
1374 2004-12-09  John Sullivan  <sullivan@apple.com>
1375
1376         Reviewed by Dave.
1377         
1378         - fixed <rdar://problem/3731099> Move AXTitle string for image elements to AXDescription
1379
1380         * kwq/KWQAccObject.mm:
1381         (-[KWQAccObject title]): moved image alt tag code out of here
1382         (-[KWQAccObject accessibilityDescription]): moved image alt tag code into this new method
1383         (-[KWQAccObject accessibilityAttributeNames]): include AXDescription in the set of attributes
1384         that ordinary elements return; this means that ordinary elements that aren't images will return
1385         a nil description, which isn't ideal, but is in keeping with the way the rest of these attributes
1386         work here.
1387         (-[KWQAccObject accessibilityAttributeValue:]):
1388         call accessibilityDescription when asked for AXDescription
1389
1390 2004-12-09  Ken Kocienda  <kocienda@apple.com>
1391
1392         Reviewed by Harrison
1393
1394         Fix for this bug:
1395         
1396         <rdar://problem/3910425> REGRESSION (Mail): Crash in ReplaceSelectionCommand; selection is empty, leading to null deref
1397
1398         * khtml/editing/htmlediting.cpp:
1399         (khtml::MoveSelectionCommand::doApply): The node representing the destination for the move may have
1400         been deleted. If this is the case, set the destination to the node the delete command provides in
1401         its ending selection.
1402
1403 === Safari-175 ===
1404
1405 2004-12-09  Ken Kocienda  <kocienda@apple.com>
1406
1407         Reviewed by John
1408         
1409         Fix for this bug:
1410         
1411         <rdar://problem/3912841> REGRESSION (173-TOT): Some images report 0x0 dimensions on layout tests, causes spurious test failures
1412
1413         The new threaded image decoding capability can throw off layout tests. The issue is that the decoding
1414         callback may not be delivered before the program asks for the dimensions of an image in order to
1415         wrote the layout dimensions. More generally, I think we need to ensure that there are no races in
1416         layout tests, so I have added a flag to the render tree debug code that we can set when debugging.
1417
1418         * kwq/KWQRenderTreeDebug.cpp:
1419         (debuggingRenderTree): New function. Returns flag which tells whether the program is debugging the render tree.
1420         (externalRepresentation): Sets debuggingRenderTree flag to true;
1421         * kwq/KWQRenderTreeDebug.h:
1422         * kwq/WebCoreImageRendererFactory.m:
1423         (+[WebCoreImageRendererFactory shouldUseThreadedDecoding]): Checks debuggingRenderTree flag and will not
1424         do threaded decoding in any case if the flag is set.
1425
1426 2004-12-09  Chris Blumenberg  <cblu@apple.com>
1427
1428         Fix for busting XMLHTTPRequest.
1429
1430         Reviewed by kocienda.
1431
1432         * khtml/misc/loader.cpp:
1433         (Loader::servePendingRequests): pass true for deliverAllData
1434         * kwq/KWQKJob.h:
1435         (KIO::get): take deliverAllData param
1436         (KIO::http_post): ditto
1437         * kwq/KWQKJobClasses.h:
1438         * kwq/KWQKJobClasses.mm:
1439         (KIO::TransferJob::TransferJob): if deliverAllData, create signal with data param
1440         (KIO::TransferJob::emitResult): if deliverAllData, call signal with data param
1441
1442 2004-12-09  Ken Kocienda  <kocienda@apple.com>
1443
1444         Reviewed by John
1445
1446         <rdar://problem/3911011> REGRESSION (Mail): Spaces at end of line causing word wrap lost when copied/pasted
1447
1448         * khtml/xml/dom_nodeimpl.cpp:
1449         (NodeImpl::renderedText): Fixed the code so that spaces at the end of lines are not skipped.
1450
1451 2004-12-07  Richard Williamson   <rjw@apple.com>
1452
1453         Support threaded image decoding on machines w/ > 2 CPUs.
1454
1455         Reviewed by Maciej and Chris.
1456
1457         * khtml/misc/loader.cpp:
1458         (CachedImageCallback::notifyUpdate):
1459         (CachedImageCallback::notifyFinished):
1460         (CachedImageCallback::notifyDecodingError):
1461         (CachedImageCallback::handleError):
1462         (CachedImageCallback::clear):
1463         (CachedImage::CachedImage):
1464         (CachedImage::clear):
1465         (CachedImage::data):
1466         (CachedImage::checkNotify):
1467         (Loader::servePendingRequests):
1468         (Loader::slotFinished):
1469         (Loader::numRequests):
1470         (Loader::cancelRequests):
1471         (Loader::removeBackgroundDecodingRequest):
1472         * khtml/misc/loader.h:
1473         (khtml::CachedImageCallback::CachedImageCallback):
1474         (khtml::CachedImageCallback::ref):
1475         (khtml::CachedImageCallback::deref):
1476         (khtml::CachedImage::decoderCallback):
1477         * khtml/rendering/render_object.cpp:
1478         (RenderObject::setPixmap):
1479         * kwq/KWQPixmap.h:
1480         * kwq/KWQPixmap.mm:
1481         (-[WebImageCallback initWithCallback:khtml::]):
1482         (-[WebImageCallback _commonTermination]):
1483         (-[WebImageCallback dealloc]):
1484         (-[WebImageCallback finalize]):
1485         (-[WebImageCallback notify]):
1486         (-[WebImageCallback setImageSourceStatus:]):
1487         (-[WebImageCallback status]):
1488         (QPixmap::shouldUseThreadedDecoding):
1489         (QPixmap::receivedData):
1490         * kwq/WebCoreImageRenderer.h:
1491         * kwq/WebCoreImageRendererFactory.h:
1492         * kwq/WebCoreImageRendererFactory.m:
1493         (+[WebCoreImageRendererFactory shouldUseThreadedDecoding]):
1494         (+[WebCoreImageRendererFactory setShouldUseThreadedDecoding:]):
1495
1496 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1497
1498         Reviewed by John
1499
1500         * khtml/editing/htmlediting.cpp:
1501         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Fix a problem with my
1502         change in thei code yesterday. Call to insertBlockPlaceholderIfNeeded() must be done
1503         after new block has been inserted, otherwise a crash can result. Shuffle down call 
1504         to insertBlockPlaceholderIfNeeded() a couple of lines (where the node is inserted), 
1505         and all is good.
1506
1507 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1508
1509         Reviewed by John
1510
1511         Fix for this bug:
1512         
1513         <rdar://problem/3907422> REGRESSION (Mail): Pasting quoted content can place content after body element
1514
1515         * khtml/editing/htmlediting.cpp:
1516         (khtml::ReplaceSelectionCommand::doApply): Detect when the body element is the "reference block" used
1517         for determining the location for inserting content. Do not allow an insert before or after if the
1518         reference block is the body. Perform insertNodeAt(0) and appendNode, respectively, in the block-is-body case.
1519         * layout-tests/editing/inserting/insert-3907422-fix-expected.txt: Added.
1520         * layout-tests/editing/inserting/insert-3907422-fix.html: Added.
1521
1522 2004-12-07  Darin Adler  <darin@apple.com>
1523
1524         Reviewed by Don.
1525
1526         - fixed <rdar://problem/3908701> REGRESSION: Cursor does not change to "hand" over active links
1527
1528         * kwq/KWQEvent.mm: (positionForEvent): Add NSMouseMoved to list of events that have mouse location.
1529
1530 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1531
1532         Reviewed by John
1533
1534         Changed name of constant from KHTMLInterchangeNewline to AppleInterchangeNewline.
1535         I discussed this with Hyatt and he agreed that going with "Apple" names was OK.
1536
1537         * khtml/editing/html_interchange.h: Name change, as described above.
1538         * khtml/editing/htmlediting.cpp:
1539         (khtml::ReplacementFragment::isInterchangeNewlineComment): Ditto.
1540         * khtml/xml/dom2_rangeimpl.cpp:
1541         (DOM::RangeImpl::toHTML): Ditto.
1542
1543 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1544
1545         Reviewed by me
1546         
1547         Added a couple more layout tests.
1548
1549         * layout-tests/editing/deleting/delete-line-013-expected.txt: Added.
1550         * layout-tests/editing/deleting/delete-line-013.html: Added.
1551         * layout-tests/editing/deleting/delete-line-014-expected.txt: Added.
1552         * layout-tests/editing/deleting/delete-line-014.html: Added.
1553
1554 2004-12-06  Maciej Stachowiak  <mjs@apple.com>
1555
1556         Reviewed by Hyatt.
1557
1558         - fixed <rdar://problem/3906974> assertion failure in QWidget::beforeMouseDown clicking on <select multiple>
1559         
1560         * kwq/KWQListBox.mm:
1561         (QListBox::QListBox): Initialize KWQListBoxScrollView with this.
1562         (-[KWQListBoxScrollView initWithListBox:]): Make this class a KWQWidgetHolder.
1563         (-[KWQListBoxScrollView widget]): See above.
1564         (-[KWQTableView mouseDown:]): Pass outerView rather than self to beforeMouseDown and
1565         afterMouseDown, to avoid triggering an assertion failure.
1566
1567 2004-12-06  David Hyatt  <hyatt@apple.com>
1568
1569         Fix for 3615411, the linesAppended optimization was old and broken, and it's easier with the new code fixes
1570         made by me, kocienda and harrison to just remove it.
1571         
1572         Reviewed by mjs
1573
1574         * khtml/rendering/bidi.cpp:
1575         (khtml::RenderBlock::layoutInlineChildren):
1576         * khtml/rendering/render_block.cpp:
1577         (khtml:::RenderFlow):
1578         * khtml/rendering/render_block.h:
1579         * khtml/rendering/render_flow.cpp:
1580         (RenderFlow::dirtyLinesFromChangedChild):
1581
1582 2004-12-06  David Hyatt  <hyatt@apple.com>
1583
1584         Fix for 3787133, some web pages print with many blank pages.  Make sure to use the real page print rect and
1585         not a damage rect that can be changed when intersected with the clip regions of the web page.
1586         
1587         Reviewed by john
1588
1589         * khtml/rendering/render_canvas.h:
1590         (khtml::RenderCanvas::printRect):
1591         (khtml::RenderCanvas::setPrintRect):
1592         * khtml/rendering/render_flow.cpp:
1593         (RenderFlow::paintLines):
1594         * khtml/rendering/render_list.cpp:
1595         (RenderListMarker::paint):
1596         * kwq/KWQKHTMLPart.mm:
1597         (KWQKHTMLPart::adjustPageHeight):
1598
1599 2004-12-06  David Harrison  <harrison@apple.com>
1600
1601         Reviewed by Ken Kocienda and Dave Hyatt (OOPS!).
1602
1603                 <rdar://problem/3849947> Typing after pasting line does not appear until after window resize.
1604                 
1605                 
1606         * khtml/rendering/render_flow.cpp:
1607         (RenderFlow::dirtyLinesFromChangedChild):
1608                 Dirty the line above because new child can inval the cached line break position of previous line.
1609
1610 2004-12-06  David Hyatt  <hyatt@apple.com>
1611
1612         Fix for 3254464, radio buttons do not work for quiz on netscape.com.  Left/top overflow needed to be implemented.
1613         This also fixes 3106907, link hover color only partially set on rollover and the more general architecture bug
1614         3126929, handle top/left overflow.
1615
1616         This patch also fixes 3902891, scroll bar of position:fixed content moves when a page is scrolled.
1617
1618         Finally, the Emerson regression 3869718 (error involving computing the rightmost/lowest position of overflow:auto
1619         regions and web pages) has been fixed.
1620         
1621         Reviewed by mjs
1622
1623         * khtml/rendering/bidi.cpp:
1624         (khtml::RenderBlock::computeHorizontalPositionsForLine):
1625         (khtml::RenderBlock::checkLinesForOverflow):
1626         * khtml/rendering/render_block.cpp:
1627         (khtml:::RenderFlow):
1628         (khtml::RenderBlock::overflowHeight):
1629         (khtml::RenderBlock::overflowWidth):
1630         (khtml::RenderBlock::overflowLeft):
1631         (khtml::RenderBlock::overflowTop):
1632         (khtml::RenderBlock::overflowRect):
1633         (khtml::RenderBlock::layoutBlock):
1634         (khtml::RenderBlock::layoutBlockChildren):
1635         (khtml::RenderBlock::paint):
1636         (khtml::RenderBlock::floatRect):
1637         (khtml::RenderBlock::lowestPosition):
1638         (khtml::RenderBlock::rightmostPosition):
1639         (khtml::RenderBlock::leftmostPosition):
1640         (khtml::RenderBlock::nodeAtPoint):
1641         * khtml/rendering/render_block.h:
1642         * khtml/rendering/render_box.h:
1643         (khtml::RenderBox::borderBox):
1644         (khtml::RenderBox::borderTopExtra):
1645         (khtml::RenderBox::borderBottomExtra):
1646         * khtml/rendering/render_layer.cpp:
1647         (RenderLayer::paintScrollbars):
1648         (mustExamineRenderer):
1649         (RenderLayer::intersectsDamageRect):
1650         (RenderLayer::containsPoint):
1651         * khtml/rendering/render_line.cpp:
1652         (khtml::InlineFlowBox::placeBoxesHorizontally):
1653         (khtml::InlineFlowBox::verticallyAlignBoxes):
1654         * khtml/rendering/render_line.h:
1655         (khtml::InlineBox::leftOverflow):
1656         (khtml::InlineBox::rightOverflow):
1657         (khtml::InlineFlowBox::setVerticalOverflowPositions):
1658         (khtml::RootInlineBox::RootInlineBox):
1659         (khtml::RootInlineBox::leftOverflow):
1660         (khtml::RootInlineBox::rightOverflow):
1661         (khtml::RootInlineBox::setVerticalOverflowPositions):
1662         (khtml::RootInlineBox::setHorizontalOverflowPositions):
1663         * khtml/rendering/render_object.h:
1664         (khtml::RenderObject::borderBox):
1665         (khtml::RenderObject::overflowLeft):
1666         (khtml::RenderObject::overflowTop):
1667         (khtml::RenderObject::overflowRect):
1668         (khtml::RenderObject::floatRect):
1669         * khtml/rendering/render_table.cpp:
1670         (RenderTable::layout):
1671         (RenderTable::paint):
1672         (RenderTable::paintBoxDecorations):
1673         (RenderTable::calcMinMaxWidth):
1674         * khtml/rendering/render_table.h:
1675         (khtml::RenderTableCell::borderTopExtra):
1676         (khtml::RenderTableCell::borderBottomExtra):
1677         * kwq/KWQRect.h:
1678         * kwq/KWQRect.mm:
1679         (QRect::inflate):
1680
1681 2004-12-06  Maciej Stachowiak  <mjs@apple.com>
1682
1683         Reviewed by John.
1684
1685         - fixed <rdar://problem/3903797> scripts can cause other frames/windows to execute arbitrary script using javascript: URLs
1686         
1687         I changed all unprotected places that can navigate a different
1688         window or frame from script to check for a javascript: URL, and if
1689         found, to check for safety using cross-site-script rules. 
1690
1691         I considered a few other possible exploits and made no change:
1692
1693         - document.location is already protected because the document
1694         object itself is protected
1695
1696         - frame.src, frame.location, iframe.src and targetted links are
1697         all safe because setting the URL of a frame to a javascript: URL
1698         executes the script in the context of the parent
1699
1700         * khtml/ecma/kjs_window.cpp:
1701         (WindowFunc::tryCall):
1702         (Location::put):
1703         (LocationFunc::tryCall):
1704
1705 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1706
1707         Reviewed by Maciej
1708
1709         Fix for this bug:
1710         
1711         <rdar://problem/3890955> 8A314: Forward delete sometimes fails to delete the selected quoted text
1712
1713         * khtml/editing/htmlediting.cpp:
1714         (khtml::DeleteSelectionCommand::handleSpecialCaseBRDelete): Fixed bonehead coding mistake in the
1715         check for one of the special cases being checked for in this function. The specific case 
1716         intends to check for a selection that is only a <br> after a block ends (as in </div><br>). If it
1717         sees such markup, it deletes only the <br> and bails. However, this code would run in *any*
1718         case where a selection ended in a <br> after a block and would not delete any part of the
1719         selection preceding the <br>. Bad. I have tightened the check to see that only a <br> is
1720         selected.
1721
1722         Fixing the bug above was accomplished with an additional call to DOM::Position::downstream. This
1723         new use of the function exposed this bug:
1724         
1725         <rdar://problem/3907666> Incorrectly coded loop in Position::downstream can lead to infinite loop
1726
1727         * khtml/xml/dom_position.cpp:
1728         (DOM::Position::downstream): I am ashamed of my first cut at this. Rewrote the loop so it does 
1729         not have this fatal flaw. It is a much better design as well.
1730         
1731         * layout-tests/editing/deleting/delete-3800834-fix-expected.txt: Changes made this test
1732         have what I consider to be a better result. Going with it.
1733
1734 2004-12-06  Chris Blumenberg  <cblu@apple.com>
1735
1736         Fixed: <rdar://problem/3871718> REGRESSION (125-168): text marked bold with font that does not have bold variant copies as non-bold
1737
1738         Reviewed by hyatt.
1739
1740         * kwq/DOM.mm:
1741         (-[DOMElement _font]): new SPI for AppKit
1742         * kwq/DOMPrivate.h:
1743
1744 2004-12-06  Darin Adler  <darin@apple.com>
1745
1746         Reviewed by Maciej.
1747
1748         - fixed <rdar://problem/3906327> Select All of a large document is slow (>15 secs on my machine for attached specimen)
1749
1750         * kwq/KWQScrollView.mm: (QScrollView::updateContents): Intersect with visibleRect before calling through
1751         to NSView to dirty; NSView could also be more efficient in this case (I filed 3906343).
1752
1753 2004-12-06  John Sullivan  <sullivan@apple.com>
1754
1755         Darin found what appears to be the real leak that we were falsely blaming
1756         on the 'leaks' tool (3880245). I made the change, and ran layout tests and PLT to make
1757         sure nothing barfed.
1758
1759         * khtml/css/cssparser.cpp:
1760         (CSSParser::parseValue):
1761         call clearProperties() instead of just setting numParsedProperties to 0
1762         (CSSParser::parseDeclaration):
1763         ditto
1764         (CSSParser::createStyleDeclaration):
1765         ditto
1766
1767 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1768
1769         Reviewed by me
1770         
1771         New layout tests.
1772
1773         * layout-tests/editing/inserting/insert-div-001-expected.txt: Added.
1774         * layout-tests/editing/inserting/insert-div-001.html: Added.
1775         * layout-tests/editing/inserting/insert-div-002-expected.txt: Added.
1776         * layout-tests/editing/inserting/insert-div-002.html: Added.
1777         * layout-tests/editing/inserting/insert-div-003-expected.txt: Added.
1778         * layout-tests/editing/inserting/insert-div-003.html: Added.
1779         * layout-tests/editing/inserting/insert-div-004-expected.txt: Added.
1780         * layout-tests/editing/inserting/insert-div-004.html: Added.
1781         * layout-tests/editing/inserting/insert-div-005-expected.txt: Added.
1782         * layout-tests/editing/inserting/insert-div-005.html: Added.
1783         * layout-tests/editing/inserting/insert-div-006-expected.txt: Added.
1784         * layout-tests/editing/inserting/insert-div-006.html: Added.
1785         * layout-tests/editing/inserting/insert-div-007-expected.txt: Added.
1786         * layout-tests/editing/inserting/insert-div-007.html: Added.
1787         * layout-tests/editing/inserting/insert-div-008-expected.txt: Added.
1788         * layout-tests/editing/inserting/insert-div-008.html: Added.
1789         * layout-tests/editing/inserting/insert-div-009-expected.txt: Added.
1790         * layout-tests/editing/inserting/insert-div-009.html: Added.
1791
1792 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1793
1794         Reviewed by Harrison
1795
1796         Fix for this bug:
1797         
1798         <rdar://problem/3906948> REGRESSION (Mail): Insert paragraph code can make the insertion point "stick" in place.
1799
1800         * khtml/editing/htmlediting.cpp:
1801         (khtml::InsertParagraphSeparatorCommand::doApply): Call insertBlockPlaceholderIfNeeded(), passing block
1802         being added to this function. This ensures that the added block has a height.
1803         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
1804
1805 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1806  
1807         Reviewed by John
1808         
1809         * khtml/dom/dom_string.cpp:
1810         (DOM::DOMString::substring): Expose method already on DOMStrimgImpl.
1811         * khtml/dom/dom_string.h: Ditto.
1812         * khtml/editing/htmlediting.cpp:
1813         (khtml::CompositeEditCommand::rebalanceWhitespace): New helper to create and execute a
1814         RebalanceWhitespaceCommand instance.
1815         (khtml::DeleteSelectionCommand::doApply): Call rebalanceWhitespace() after running command.
1816         (khtml::InsertLineBreakCommand::doApply): Ditto.
1817         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
1818         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
1819         (khtml::InsertTextCommand::input): Ditto.
1820         (khtml::RebalanceWhitespaceCommand::RebalanceWhitespaceCommand): New command.
1821         (khtml::RebalanceWhitespaceCommand::~RebalanceWhitespaceCommand): Ditto.
1822         (khtml::RebalanceWhitespaceCommand::doApply): Ditto.
1823         (khtml::RebalanceWhitespaceCommand::doUnapply): Ditto.
1824         (khtml::RebalanceWhitespaceCommand::preservesTypingStyle): Ditto.
1825         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
1826         * khtml/editing/htmlediting.h: Ditto.
1827         (khtml::RebalanceWhitespaceCommand::): Ditto.
1828
1829 2004-12-05  Darin Adler  <darin@apple.com>
1830
1831         - fixed small problem in my check-in from yesterday
1832
1833         * kwq/KWQEvent.mm:
1834         (positionForEvent): Get location from event without raising exception if it's the wrong type.
1835         (clickCountForEvent): Same, for clickCount.
1836         (QMouseEvent::QMouseEvent): Use the new helper functions so this can be constructed even with
1837         the wrong type of NSEvent. Required for cases where a keyboard event causes a "click" and we need
1838         to synthesize a QMouseEvent for KHTML internal use, using the key down NSEvent.
1839
1840 2004-12-04  Darin Adler  <darin@apple.com>
1841
1842         Reviewed by John.
1843
1844         - fixed <rdar://problem/3878329> REGRESSION (169-170): colors are wrong for my.yahoo.com due to CSS background parsing changes
1845
1846         * khtml/css/cssparser.cpp: (CSSParser::parseBackgroundShorthand): Changed function so it doesn't rely on the position
1847         attribute being at the end of the array and then moved position attribute before color attribute so it takes precedence.
1848         Since "0" can be both the X coordinate of a position and a legal color (meaning black), we need to do position first.
1849
1850         - fixed <rdar://problem/3760869> click events for input type=button or type=checkbox don't have flags like shiftKey set
1851
1852         * khtml/rendering/render_form.h: Remove unused RenderFormElement fields.
1853         * khtml/rendering/render_form.cpp:
1854         (RenderFormElement::RenderFormElement): Take out code to set a bunch of unused fields.
1855         (RenderFormElement::slotClicked): Change to create the QMouseEvent from the actual mouse event rather than
1856         creating it with all the flags set to 0, using the new QMouseEvent constructor that does so.
1857
1858         * kwq/KWQEvent.h: Added constructor that takes no parameters which uses the current event from AppKit.
1859         Made the click count getter const and added an isDoubleClick that matches the logic used elsewhere.
1860         Added a fixState helper method so the constructors can save code.
1861         * kwq/KWQEvent.mm:
1862         (QMouseEvent::QMouseEvent): Factored out the state-fixing code that was in the two existing constructors
1863         and added a third constructor that uses the "current event" from AppKit (used above).
1864         (QMouseEvent::fixState): Compute state and click count based on event type.
1865
1866         - fixed first symptom of <rdar://problem/3830936> REGRESSION (125-165): crash due to null font family, hang at changeforamerica.com
1867
1868         * kwq/KWQFontFamily.mm: (KWQFontFamily::getNSFamily): Handle empty strings specially so we don't run into trouble when
1869         the family name is a null string. This prevents the crash, but there are still other problems that may have the same
1870         underlying cause in CSS.
1871
1872         - fixed <rdar://problem/3829808> Safari crashes when adding a DOM node that was removed from an XMLHTTP request result
1873
1874         * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::insertedIntoDocument):
1875         Added nil check before calling scheduleRelayout. This is new code so the nil-dereference is a recent regression.
1876
1877 2004-12-03  Chris Blumenberg  <cblu@apple.com>
1878
1879         New fixes for:
1880         <rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
1881         <rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)
1882         <rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
1883         <rdar://problem/3902749> REGRESSION (Tiger): missing image symbol does not appear
1884
1885         Reviewed by darin, rjw, kocienda.
1886
1887         * khtml/misc/loader.cpp:
1888         (CachedObject::~CachedObject):
1889         (CachedCSSStyleSheet::checkNotify):
1890         (Loader::servePendingRequests):
1891         (Loader::slotFinished):
1892         (Loader::slotReceivedResponse):
1893         (Cache::requestImage):
1894         (Cache::requestScript):
1895         * khtml/misc/loader.h:
1896         (khtml::CachedObject::CachedObject):
1897         (khtml::CachedObject::response):
1898         (khtml::CachedObject::allData):
1899         * kwq/KWQKJobClasses.h:
1900         * kwq/KWQKJobClasses.mm:
1901         (KIO::TransferJobPrivate::TransferJobPrivate):
1902         (KIO::TransferJobPrivate::~TransferJobPrivate):
1903         (KIO::TransferJob::TransferJob):
1904         (KIO::TransferJob::assembleResponseHeaders):
1905         (KIO::TransferJob::retrieveCharset):
1906         (KIO::TransferJob::emitResult):
1907         (KIO::TransferJob::emitReceivedResponse):
1908         * kwq/KWQLoader.h:
1909         * kwq/KWQLoader.mm:
1910         (KWQHeaderStringFromDictionary):
1911         (KWQCheckCacheObjectStatus):
1912         (KWQIsResponseURLEqualToURL):
1913         (KWQResponseURL):
1914         (KWQResponseMIMEType):
1915         (KWQCacheObjectExpiresTime):
1916         (khtml::CachedObject::setResponse):
1917         (khtml::CachedObject::setAllData):
1918         * kwq/KWQPixmap.h:
1919         * kwq/KWQPixmap.mm:
1920         (QPixmap::QPixmap):
1921         * kwq/KWQResourceLoader.mm:
1922         (-[KWQResourceLoader finishJobAndHandle:]):
1923         (-[KWQResourceLoader cancel]):
1924         (-[KWQResourceLoader reportError]):
1925         (-[KWQResourceLoader finishWithData:]):
1926         * kwq/KWQSignal.h:
1927         * kwq/KWQSignal.mm:
1928         (KWQSignal::call):
1929         * kwq/KWQSlot.h:
1930         * kwq/KWQSlot.mm:
1931         (KWQSlot::KWQSlot):
1932         (KWQSlot::call):
1933         * kwq/WebCoreBridge.h:
1934         * kwq/WebCoreResourceLoader.h:
1935
1936 2004-12-04  Darin Adler  <darin@apple.com>
1937
1938         Reviewed by John.
1939
1940         - fixed <rdar://problem/3876093> REGRESSION (166-167): Setting slider control's value from JavaScript has no effect (breaks RSS)
1941
1942         * khtml/rendering/render_form.cpp:
1943         (RenderSlider::updateFromElement): Call setValue to update the value of the DOM element rather than
1944         modifying the m_value data member directly. We don't use m_value at all for sliders now, and in fact
1945         the code relies on the fact that m_value is null. Setting m_value to a non-null value was causing the bug.
1946         (RenderSlider::slotSliderValueChanged): Ditto.
1947
1948 2004-12-03  John Sullivan  <sullivan@apple.com>
1949
1950         Reviewed by Ken.
1951         
1952         - fixed <rdar://problem/3889411> REGRESSION (125-172): repro crash in 
1953         khtml::BackgroundLayer::cullEmptyLayers
1954
1955         * khtml/rendering/render_style.cpp:
1956         (BackgroundLayer::cullEmptyLayers):
1957         added missing nil check
1958
1959 === Safari-173 ===
1960
1961 2004-12-03  Ken Kocienda  <kocienda@apple.com>
1962
1963         Reviewed by me
1964
1965         Roll out some recent changes by Chris that caused a performance regression.
1966         Fix is in hand, but it is a little risky this close to a submission. So,
1967         we have decided to roll back the change with the regression and roll in
1968         the new code after we submit.
1969
1970         * khtml/css/cssproperties.c:
1971         (hash_prop):
1972         (findProp):
1973         * khtml/css/cssvalues.c:
1974         (hash_val):
1975         (findValue):
1976         * khtml/misc/htmlattrs.c:
1977         (hash_attr):
1978         (findAttr):
1979         * khtml/misc/htmltags.c:
1980         (hash_tag):
1981         (findTag):
1982         * khtml/misc/loader.cpp:
1983         (CachedObject::~CachedObject):
1984         (CachedObject::setResponse):
1985         (CachedCSSStyleSheet::checkNotify):
1986         (Loader::servePendingRequests):
1987         (Loader::slotFinished):
1988         (Loader::slotReceivedResponse):
1989         (Cache::requestImage):
1990         (Cache::requestScript):
1991         * khtml/misc/loader.h:
1992         (khtml::CachedObject::CachedObject):
1993         (khtml::CachedObject::response):
1994         * kwq/KWQKJobClasses.h:
1995         * kwq/KWQKJobClasses.mm:
1996         (KIO::TransferJobPrivate::TransferJobPrivate):
1997         (KIO::TransferJobPrivate::~TransferJobPrivate):
1998         (KIO::TransferJob::TransferJob):
1999         (KIO::TransferJob::assembleResponseHeaders):
2000         (KIO::TransferJob::retrieveCharset):
2001         (KIO::TransferJob::emitResult):
2002         (KIO::TransferJob::emitReceivedResponse):
2003         * kwq/KWQLoader.h:
2004         * kwq/KWQLoader.mm:
2005         (KWQHeaderStringFromDictionary):
2006         (KWQCheckCacheObjectStatus):
2007         (KWQRetainResponse):
2008         (KWQReleaseResponse):
2009         (KWQIsResponseURLEqualToURL):
2010         (KWQResponseURL):
2011         (KWQResponseMIMEType):
2012         (KWQResponseTextEncodingName):
2013         (KWQResponseHeaderString):
2014         (KWQCacheObjectExpiresTime):
2015         (KWQLoader::KWQLoader):
2016         * kwq/KWQPixmap.h:
2017         * kwq/KWQPixmap.mm:
2018         (QPixmap::QPixmap):
2019         * kwq/KWQResourceLoader.mm:
2020         (-[KWQResourceLoader finishJobAndHandle]):
2021         (-[KWQResourceLoader cancel]):
2022         (-[KWQResourceLoader reportError]):
2023         (-[KWQResourceLoader finish]):
2024         * kwq/KWQSignal.h:
2025         * kwq/KWQSignal.mm:
2026         (KWQSignal::call):
2027         * kwq/KWQSlot.h:
2028         * kwq/KWQSlot.mm:
2029         (KWQSlot::KWQSlot):
2030         (KWQSlot::call):
2031         * kwq/WebCoreBridge.h:
2032         * kwq/WebCoreResourceLoader.h:
2033
2034 2004-12-03  John Sullivan  <sullivan@apple.com>
2035
2036         Reviewed by Chris.
2037         
2038         - fixed <rdar://problem/3903990> can't tab to all items on www.google.com any more (other pages too?)
2039
2040         * kwq/KWQKHTMLPart.mm:
2041         (KWQKHTMLPart::nextKeyViewInFrameHierarchy):
2042         when checking whether we moved the focus to another view, make sure we didn't "move" it to
2043         our documentView, because that's no move at all.
2044
2045 2004-12-03  Darin Adler  <darin@apple.com>
2046
2047         Reviewed by Vicki.
2048
2049         - fixed <rdar://problem/3901109> REGRESSION (171-172): repro crash in DOM::NodeImpl::setChanged at chick-fil-a.com
2050
2051         * khtml/css/css_valueimpl.cpp: (DOM::CSSMutableStyleDeclarationImpl::CSSMutableStyleDeclarationImpl):
2052         Added missing initialization for base class and node pointer.
2053
2054         - fixed a few places that could leave dangling node pointers
2055
2056         * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::~HTMLBodyElementImpl):
2057         Clear out the node pointer when the node is destroyed.
2058         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::~HTMLElementImpl): Ditto.
2059
2060 2004-12-03  Chris Blumenberg  <cblu@apple.com>
2061
2062         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. 
2063         Fixed: <rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
2064
2065         Reviewed by rjw.
2066
2067         * khtml/misc/loader.cpp:
2068         (Loader::servePendingRequests): pass data param to slotFinished, removed allData signal
2069         (Loader::slotFinished): take data param
2070         * khtml/misc/loader.h:
2071         * kwq/KWQKJobClasses.h:
2072         * kwq/KWQKJobClasses.mm:
2073         (KIO::TransferJob::TransferJob): have m_result take a data param, removed m_allData
2074         (KIO::TransferJob::emitResult): take data param and pass it
2075         * kwq/KWQResourceLoader.mm:
2076         (-[KWQResourceLoader finishJobAndHandle:]): take data param and pass it
2077         (-[KWQResourceLoader cancel]): pass nil for data
2078         (-[KWQResourceLoader reportError]): ditto
2079         (-[KWQResourceLoader finishWithData:]): pass data
2080         * kwq/KWQSlot.mm:
2081         (KWQSlot::KWQSlot): pass data param to slotFinished
2082         (KWQSlot::call): added support for slotFinished_Loader, removed slotAllData
2083
2084 2004-12-03  Ken Kocienda  <kocienda@apple.com>
2085
2086         Reviewed by John
2087
2088         Did some clean up in the Position class as a result of trying to write some new layout
2089         tests and discovering a bug along the way.
2090
2091         I removed these three functions from the Position class:
2092         
2093         1. bool isFirstRenderedPositionOnLine() const;
2094         2. bool isLastRenderedPositionOnLine() const;
2095         3. static bool renderersOnDifferentLine(RenderObject *r1, long o1, RenderObject *r2, long o2);
2096         4. bool inFirstEditableInRootEditableElement() const;
2097
2098         The first two have replacements in the VisiblePosition class, and some code has been
2099         moved to use these new variants. The third function was a helper used only by these
2100         first two function, and can be removed as well. The fourth function was not used by anyone.
2101
2102         * khtml/editing/htmlediting.cpp:
2103         (khtml::InsertTextCommand::input): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
2104         * khtml/editing/visible_position.cpp:
2105         (khtml::visiblePositionsOnDifferentLines): Added an additional check for blocks to this function.
2106         Incorrect results were being returned when asking about positions at the starts of blocks.
2107         * khtml/xml/dom_position.cpp:
2108         (DOM::Position::previousCharacterPosition): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
2109         (DOM::Position::nextCharacterPosition): Change over to use VisiblePosition isLastVisiblePositionOnLine().
2110         (DOM::Position::rendersInDifferentPosition): Removed use of #3 helper in a log message. We can live without it.
2111         * khtml/xml/dom_position.h: Update header for deletions.
2112
2113 2004-12-03  Ken Kocienda  <kocienda@apple.com>
2114
2115         Reviewed by John
2116
2117         Terminology change in execCommand command identifiers. Specifically, the name of 
2118         "InsertNewline" command has been changed to "InsertLineBreak". This matches the 
2119         terminology used by AppKit. It is also more accurate, since the insertion of a
2120         "br" element is what the command does. The inspiration for this change is so the 
2121         -insertNewline AppKit method can be mapped to insert a new "div" element in 
2122         a document and avoid ambiguity with what the javascript editing command does.
2123         
2124         * khtml/editing/jsediting.cpp
2125         * layout-tests/editing/deleting/delete-tab-004.html
2126         * layout-tests/editing/editing.js
2127         * layout-tests/editing/inserting/insert-3654864-fix.html
2128         * layout-tests/editing/inserting/insert-3659587-fix.html
2129         * layout-tests/editing/inserting/insert-3775316-fix.html
2130         * layout-tests/editing/inserting/insert-3800346-fix.html
2131         * layout-tests/editing/inserting/insert-br-001.html
2132         * layout-tests/editing/inserting/insert-br-002.html
2133         * layout-tests/editing/inserting/insert-br-003.html
2134         * layout-tests/editing/inserting/insert-br-004.html
2135         * layout-tests/editing/inserting/insert-br-005.html
2136         * layout-tests/editing/inserting/insert-br-006.html
2137         * layout-tests/editing/inserting/insert-br-007.html
2138         * layout-tests/editing/inserting/insert-br-008.html
2139         * layout-tests/editing/inserting/insert-tab-004.html
2140         * layout-tests/editing/inserting/insert-text-with-newlines.html
2141         * layout-tests/editing/pasteboard/paste-text-010.html
2142
2143 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2144
2145         Reviewed by John
2146
2147         Fix for this bug:
2148         
2149         <rdar://problem/3786362> REGRESSION (Mail): pasted text loses one newline
2150
2151         * khtml/editing/htmlediting.cpp:
2152         (khtml::InsertLineBreakCommand::doApply): Added check for strict mode before adding an extra br element
2153         at the end of a block. This is only necessary in quirks mode. Also, lower-case "br" used to make element.
2154         (khtml::ReplaceSelectionCommand::doApply): If the replacement adds a br element as the last element
2155         in a block and the document is in quirks mode, add an additional br to make the one in the 
2156         replacement content show up. This turns out to be much the same logic as is done in InsertLineBreakCommand.
2157         * layout-tests/editing/inserting/insert-3786362-fix-expected.txt: Added.
2158         * layout-tests/editing/inserting/insert-3786362-fix.html: Added.
2159
2160 2004-12-02  Richard Williamson   <rjw@apple.com>
2161
2162         Fixed <rdar://problem/3841332> REGRESSION (125.9-167u): repro crash in -[KWQPageState invalidate] involving .Mac images
2163
2164         Ensure that the document is cleared when leaving a non-HTML page.  This ensures that
2165         the b/f cache won't incorrectly trash the previous state when restoring.
2166
2167         Reviewed by John.
2168
2169         * kwq/WebCoreBridge.h:
2170         * kwq/WebCoreBridge.mm:
2171         (-[WebCoreBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
2172         (-[WebCoreBridge canCachePage]):
2173         (-[WebCoreBridge clear]):
2174
2175 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2176
2177         Reviewed by Richard
2178
2179         Fix for this bug:
2180         
2181         <rdar://problem/3857775> 8A293: Mail.app crashes converting copy-pasted text into plain text
2182
2183         * khtml/xml/dom2_rangeimpl.cpp:
2184         (DOM::RangeImpl::commonAncestorContainer): Return the document element if no common ancestor container
2185         was found. This can happen in cases where the DOM was built from malformed markup (as in the case
2186         of this bug where there is content after the body tag). Did a little code clean up as well.
2187         (DOM::RangeImpl::compareBoundaryPoints): Made code more robust by adding some null checks.
2188
2189 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2190
2191         Reviewed by Chris
2192
2193         Fix for this bug:
2194         
2195         <rdar://problem/3668157> REGRESSION (Mail): shift-click deselects when selection was created right-to-left
2196
2197         * khtml/khtml_part.cpp:
2198         (KHTMLPart::handleMousePressEventSingleClick): Use RangeImpl::compareBoundaryPoints
2199         to figure out which end of the selection to extend.
2200
2201 2004-12-02  David Harrison  <harrison@apple.com>
2202
2203         Reviewed by Ken Kocienda.
2204
2205                 <rdar://problem/3834917> REGRESSION (Mail): double-clicking blank line selects end of previous line
2206                 Fixed originally reported bug plus the case of double-clicking whitespace at the beginning of a line, which has a similar result.
2207
2208         * khtml/editing/visible_text.cpp:
2209         (khtml::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
2210         (khtml::SimplifiedBackwardsTextIterator::handleTextNode):
2211         (khtml::SimplifiedBackwardsTextIterator::handleReplacedElement):
2212         (khtml::SimplifiedBackwardsTextIterator::handleNonTextNode):
2213         (khtml::SimplifiedBackwardsTextIterator::emitCharacter):
2214         Distinguish BR from whitespace.
2215         * khtml/editing/visible_text.h:
2216         Distinguish BR from whitespace.
2217         * khtml/editing/visible_units.cpp:
2218         (khtml::previousWordBoundary):
2219         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. 
2220
2221 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2222
2223         Reviewed by John
2224
2225         Fix for this bug:
2226         
2227         <rdar://problem/3900996> Crash dragging past end of contentEditable DIV, at DOM::RangeImpl::pastEndNode() const + 24
2228
2229         * khtml/xml/dom_position.cpp:
2230         (DOM::Position::equivalentRangeCompliantPosition): Fixed this function so that it constrains the offset
2231         of the position to be >= 0 and <= number of kids of its node. Not doing this constraining led to a DOM
2232         exception trying to use a Position returned from this function to set the boundary point of a Range (which
2233         eventually led to the crash). Since this crash happened, it seems like this function was failing in its
2234         contract to return a range-compliant position, hence the need for this fix.
2235
2236 2004-12-01  Ken Kocienda  <kocienda@apple.com>
2237
2238         Reviewed by me
2239
2240         Moving code only.
2241
2242         * khtml/editing/htmlediting.cpp: Move ReplaceSelectionCommand into alphabetical order with
2243         regard to other editing commands. The class had a name change ages ago, and it was never
2244         moved.
2245         * khtml/editing/htmlediting.h: Ditto.
2246
2247 2004-12-01  Ken Kocienda  <kocienda@apple.com>
2248
2249         Reviewed by Hyatt
2250         
2251         Some improvements for paste, including some new code to annotate
2252         whitespace when writing to the pasteboard to ensure that the meaning
2253         of the markup on the pasteboard is unambiguous.
2254         
2255         There is also new code for reading this annotated markup from the pasteboard,
2256         removing the nodes that were added only to prevent ambiguity.
2257
2258         * WebCore.pbproj/project.pbxproj: Added html_interchange.h and html_interchange.cpp files.
2259         The header should have been added earlier, but I did not do so.
2260         * khtml/editing/html_interchange.cpp: Added.
2261         (convertHTMLTextToInterchangeFormat):
2262         * khtml/editing/html_interchange.h: Added some new constants for use with whitespace annotations.
2263         * khtml/editing/htmlediting.cpp:
2264         (khtml::ReplacementFragment::ReplacementFragment): Now looks for and removes annotations added for whitespace.
2265         Also fixed a bug in the code that counts blocks in a fragment.
2266         (khtml::ReplacementFragment::isInterchangeConvertedSpaceSpan): New helper. Recognizes annotation spans.
2267         (khtml::ReplacementFragment::insertNodeBefore): New helper.
2268         (khtml::ReplaceSelectionCommand::doApply): Fixed a bug in the code that sets the start position
2269         for the replacement after deleting. This was causing a bug when pasting at the end of a block.
2270         * khtml/editing/htmlediting.h: Add some new declarations.
2271         * khtml/xml/dom2_rangeimpl.cpp:
2272         (DOM::RangeImpl::toHTML): Calls to startMarkup now pass true for the new annotate flag.
2273         * khtml/xml/dom_nodeimpl.cpp:
2274         (NodeImpl::stringValueForRange): New helper.
2275         (NodeImpl::renderedText): New helper to return only the rendered text in a node.
2276         (NodeImpl::startMarkup): Now takes an additional flag to control whether interchange annotations
2277         should be added. Called by the paste code.
2278         * khtml/xml/dom_nodeimpl.h: Added and modified function declarations.
2279
2280         New test to check the khtml::ReplaceSelectionCommand::doApply fix.
2281         * layout-tests/editing/pasteboard/paste-text-010-expected.txt: Added.
2282         * layout-tests/editing/pasteboard/paste-text-010.html: Added.
2283
2284 2004-11-30  Chris Blumenberg  <cblu@apple.com>
2285
2286         * ChangeLog: removed conflict marker
2287
2288 2004-11-30  Chris Blumenberg  <cblu@apple.com>
2289
2290         Fixed:
2291         <rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
2292         <rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)
2293
2294         Reviewed by darin.
2295
2296         * khtml/misc/loader.cpp:
2297         (CachedObject::~CachedObject): release m_allData
2298         (CachedObject::setAllData): new
2299         (Loader::servePendingRequests): connect slotAllData
2300         (Loader::slotAllData): new
2301         (Cache::requestImage): tweak
2302         * khtml/misc/loader.h:
2303         (khtml::CachedObject::CachedObject): set allData to 0
2304         (khtml::CachedObject::allData): new
2305         * kwq/KWQKJobClasses.h:
2306         * kwq/KWQKJobClasses.mm:
2307         (KIO::TransferJob::TransferJob): set m_allData
2308         (KIO::TransferJob::emitAllData): new
2309         * kwq/KWQLoader.mm:
2310         (KWQCheckCacheObjectStatus): pass WebKit the data instead of the length of the resource
2311         * kwq/KWQResourceLoader.mm:
2312         (-[KWQResourceLoader finishWithData:]): renamed to pass all data for the resource
2313         * kwq/KWQSlot.mm:
2314         (KWQSlot::KWQSlot): support for slotAllData
2315         (KWQSlot::call):
2316         * kwq/WebCoreBridge.h:
2317         * kwq/WebCoreResourceLoader.h:
2318
2319 2004-11-30  Maciej Stachowiak  <mjs@apple.com>
2320
2321         Reviewed by John.
2322
2323 2004-11-30  Maciej Stachowiak  <mjs@apple.com>
2324
2325         Reviewed by John.
2326
2327         <rdar://problem/3805311> REGRESSION (159-163): onload in dynamically written document not called (causes blank search page at Japanese EPP site, many others)
2328
2329         * khtml/khtml_part.cpp:
2330         (KHTMLPart::begin): call setParsing on document here after opening
2331         - from now on we'll only set parsing to true for a document open
2332         caused by page loading, not a programmatic one.
2333         * khtml/xml/dom_docimpl.cpp:
2334         (DocumentImpl::open): don't setParsing to true here any more.
2335
2336 2004-11-30  Maciej Stachowiak  <mjs@apple.com>
2337
2338         Reviewed by John.
2339
2340         - fix recent regression from collection perf fixes.
2341         
2342         * khtml/html/html_miscimpl.cpp:
2343         (HTMLFormCollectionImpl::updateNameCache): Look up the name
2344         attribute in the name cache, not the id cache (d'oh!)
2345
2346 2004-11-30  Darin Adler  <darin@apple.com>
2347
2348         Reviewed by Ken.
2349
2350         - rolled in a KDE fix for a problem that may underlie a number of crashes
2351
2352         * khtml/xml/dom2_rangeimpl.cpp: (RangeImpl::compareBoundaryPoints): Rolled in a change from
2353         the KDE guys to fix a subtle problem. Code said "n = n =".
2354
2355         - rolled in a KDE fix for a containingBlock crash
2356
2357         * khtml/rendering/render_object.cpp: Roll in a change from KDE that adds frameset to the list of
2358         elements that can not be a containingBlock. They said this fixes a crash, although I did not look
2359         into that further.
2360
2361         - fixed <rdar://problem/3884660> 8A305: Repro crash in QScrollBar::setValue (affects Safari RSS)
2362
2363         * kwq/KWQButton.mm:
2364         (-[KWQButton initWithQButton:]): Set up target and action here instead of in caller.
2365         (-[KWQButton detachQButton]): Added.
2366         (-[KWQButton sendConsumedMouseUpIfNeeded]): Check button for nil instead of checking target.
2367         (-[KWQButton mouseDown:]): Add calls to QWidget::beforeMouseDown/afterMouseDown.
2368         (-[KWQButton widget]): Added.
2369         (-[KWQButton becomeFirstResponder]): Added check to handle when button is 0.
2370         (-[KWQButton resignFirstResponder]): Ditto.
2371         (-[KWQButton canBecomeKeyView]): Ditto.
2372         (QButton::QButton): Remove target and action setup; handled in KWQButton now.
2373         (QButton::~QButton): Call detachQButton instead of setTarget:nil.
2374
2375         * kwq/KWQComboBox.mm:
2376         (QComboBox::~QComboBox): Call detachQComboBox.
2377         (-[KWQPopUpButtonCell detachQComboBox]): Added.
2378         (-[KWQPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:]): Handle case where box is 0.
2379         (-[KWQPopUpButtonCell setHighlighted:]): Ditto.
2380         (-[KWQPopUpButton action:]): Ditto.
2381         (-[KWQPopUpButton widget]): Tweaked.
2382         (-[KWQPopUpButton mouseDown:]): Added. Calls QWidget::beforeMouseDown/afterMouseDown.
2383         (-[KWQPopUpButton becomeFirstResponder]): Handle case where widget is 0.
2384         (-[KWQPopUpButton resignFirstResponder]): Ditto.
2385         (-[KWQPopUpButton canBecomeKeyView]): Ditto.
2386
2387         * kwq/KWQLineEdit.mm: (QLineEdit::~QLineEdit): Updated to use new detachQLineEdit name.
2388
2389         * kwq/KWQListBox.mm:
2390         (-[KWQTableView mouseDown:]): Added. Calls QWidget::beforeMouseDown/afterMouseDown.
2391
2392         * kwq/KWQScrollBar.h: Removed m_scroller field.
2393         * kwq/KWQScrollBar.mm:
2394         (-[KWQScrollBar initWithQScrollBar:]): Rearranged a little bit.
2395         (-[KWQScrollBar detachQScrollBar]): Added.
2396         (-[KWQScrollBar widget]): Added.
2397         (-[KWQScrollBar mouseDown:]): Added.  Calls QWidget::beforeMouseDown and afterMouseDown.
2398         (QScrollBar::QScrollBar): Changed to no longer set m_scroller.
2399         (QScrollBar::~QScrollBar): Changed to call detachQScrollBar. No longer calls removeFromSuperview.
2400         (QScrollBar::setValue): Chagned to use getView instad of m_scrollBar.
2401         (QScrollBar::setKnobProportion): Ditto.
2402         (QScrollBar::scrollbarHit): Ditto.
2403
2404         * kwq/KWQScrollView.mm:
2405         (QScrollView::addChild): Changed to call QWidget to add to superview to accomodate the
2406         hack where we don't remove right away when doing mouse tracking.
2407         (QScrollView::removeChild): Changed to call QWidget to remove from superview to accomodate
2408         the hack where we don't add right away when doing mouse tracking.
2409
2410         * kwq/KWQSlider.h: Added destructor.
2411         * kwq/KWQSlider.mm:
2412         (-[KWQSlider initWithQSlider:]): Tweaked a little.
2413         (-[KWQSlider detachQSlider]): Added.
2414         (-[KWQSlider mouseDown:]): Added call to QWidget::beforeMouseDown/afterMouseDown.
2415         (-[KWQSlider widget]): Added.
2416         (QSlider::~QSlider): Added. Calls detachQSlider.
2417
2418         * kwq/KWQTextArea.h: Added detachQTextEdit method.
2419         * kwq/KWQTextArea.mm:
2420         (-[KWQTextArea detachQTextEdit]): Added.
2421         (-[KWQTextArea textDidChange:]): Added check for widget of 0.
2422         (-[KWQTextArea becomeFirstResponder]): Ditto.
2423         (-[KWQTextArea nextKeyView]): Ditto.
2424         (-[KWQTextArea previousKeyView]): Ditto.
2425         (-[KWQTextArea drawRect:]): Ditto.
2426         (-[KWQTextAreaTextView insertTab:]): Ditto.
2427         (-[KWQTextAreaTextView insertBacktab:]): Ditto.
2428         (-[KWQTextAreaTextView shouldDrawInsertionPoint]): Ditto.
2429         (-[KWQTextAreaTextView selectedTextAttributes]): Ditto.
2430         (-[KWQTextAreaTextView mouseDown:]): Ditto.
2431         (-[KWQTextAreaTextView keyDown:]): Ditto.
2432         (-[KWQTextAreaTextView keyUp:]): Ditto.
2433
2434         * kwq/KWQTextEdit.h: Added ~QTextEdit.
2435         * kwq/KWQTextEdit.mm: (QTextEdit::~QTextEdit): Added. Calls detachQTextEdit.
2436
2437         * kwq/KWQTextField.h: Changed invalidate to detachQLineEdit.
2438         * kwq/KWQTextField.mm: (-[KWQTextFieldController detachQLineEdit]): Changed.
2439
2440         * kwq/KWQWidget.h: Added addToSuperview/removeFromSuperview for use from QScrollView.
2441         Added beforeMouseDown and afterMouseDown for use in widget implementations.
2442         Removed unused hasMouseTracking function.
2443         * kwq/KWQWidget.mm:
2444         (QWidget::QWidget): Initialize two new fields.
2445         (QWidget::~QWidget): Added code to remove view when widget is destroyed.
2446         (QWidget::getOuterView): Remove unneeded exception blocking since we're just caling superview.
2447         (QWidget::addToSuperview): Added.
2448         (QWidget::removeFromSuperview): Added.
2449         (QWidget::beforeMouseDown): Added.
2450         (QWidget::afterMouseDown): Added.
2451
2452         * khtml/rendering/render_layer.cpp:
2453         (RenderLayer::setHasHorizontalScrollbar): Remove parent parameter; let addChild call addSubview:.
2454         (RenderLayer::setHasVerticalScrollbar): Ditto.
2455
2456 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2457
2458         Reviewed by John
2459
2460         Fix for this bug:
2461         
2462         <rdar://problem/3863031> REGRESSION (Mail): caret continues flashing while mouse is down
2463
2464         * khtml/khtml_part.cpp:
2465         (KHTMLPart::timerEvent): Add a check for whether the mouse is down. Keep the caret drawn
2466         with no blink if it is.
2467
2468 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2469
2470         Reviewed by John
2471
2472         Fix for this bug:
2473         
2474         <rdar://problem/3861602> cursor gets lost trying to backspace to delete a form control
2475
2476         * khtml/khtml_part.cpp:
2477         (KHTMLPart::setFocusNodeIfNeeded): This function would clear the selection if a <button>
2478         or <input type=image> was checked for focus since these elements are keyboard-focusable,
2479         but not mouse focusable. Also, this function did not work hard enough to set the focused
2480         node, and was content to clear it if the first element checked failed the test, rather
2481         than looking more at parents. This would have the effect of clearing, then resetting the
2482         focus on a DIV containing a button or image with content on either side of it in the
2483         process of arrowing over such content.
2484
2485 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2486
2487         Reviewed by John
2488
2489         * khtml/editing/htmlediting.cpp:
2490         (khtml::ReplaceSelectionCommand::doApply): Fix smart replace, which I (knowingly) broke with yesterday's checkin.
2491         Also, call updateLayout() in one more place to prevent stale information being returned from caretMaxOffset().
2492         * khtml/khtml_part.cpp:
2493         (KHTMLPart::isCharacterSmartReplaceExempt): Make this virtual and always return true. This gets rid of an
2494         ugly APPLE_CHANGES block and use of KWQ(part) in ReplaceSelectionCommand.
2495         * khtml/khtml_part.h: To help out with the isCharacterSmartReplaceExempt cleanup, add declaration.
2496         * kwq/KWQKHTMLPart.h: To help out with the isCharacterSmartReplaceExempt cleanup, make 
2497         isCharacterSmartReplaceExempt virtual.
2498
2499 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2500
2501         Reviewed by me
2502
2503         * khtml/editing/htmlediting.cpp:
2504         (khtml::ReplacementFragment::mergeEndNode): Fixed one-line coding mistake that created an endless loop.
2505         Seemed simple enough to land without review.
2506
2507 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2508
2509         Reviewed by Chris
2510     
2511         Rewrite of paste code (specifically the ReplaceSelectionCommand class). Many more cases
2512         are handled correctly now, including selections that span multiple blocks, and cases
2513         where content on the pasteboard ends in newlines (or what appear to be newlines to a
2514         user, really block ends or BRs). I also made one small, but important change in the 
2515         copy code to annotate the markup written to the pasteboard to support these selections 
2516         ending in newlines.
2517
2518         New header that defines a couple of constants used in copying and pasting.
2519
2520         * ForwardingHeaders/editing/html_interchange.h: Added.
2521         * khtml/editing/html_interchange.h: Added.
2522         
2523         Rewrite of the ReplaceSelectionCommand. There are several new helper functions, as well
2524         as a new helper class, ReplacementFragment, which encapsulates information and functions
2525         pertaining to a document fragment that is being inserted into a document.
2526         
2527         * khtml/editing/htmlediting.cpp:
2528         (khtml::ReplacementFragment::ReplacementFragment):
2529         (khtml::ReplacementFragment::~ReplacementFragment):
2530         (khtml::ReplacementFragment::firstChild): Simple accessor.
2531         (khtml::ReplacementFragment::lastChild): Ditto.
2532         (khtml::ReplacementFragment::mergeStartNode): Looks at the nodes in a fragment and determines
2533         the starting node to use for merging into the block containing the start of the selection.
2534         (khtml::ReplacementFragment::mergeEndNode): Same as above, but for the end of the selection.
2535         (khtml::ReplacementFragment::pruneEmptyNodes): Simple helper.
2536         (khtml::ReplacementFragment::isInterchangeNewlineComment): Determines if a node is the
2537         special annotation comment added in by the copy code.
2538         (khtml::ReplacementFragment::removeNode): Simple helper.
2539         (khtml::isComment): Simple helper.
2540         (khtml::isProbablyBlock): Determines if a node is of a type that is usually rendered as a block.
2541         I would like to do better than this some day, but this check will hold us until I can do better.
2542         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand):
2543         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand):
2544         (khtml::ReplaceSelectionCommand::doApply):
2545         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Figures out the right ending selection.
2546         * khtml/editing/htmlediting.h: Declarations for the new ReplacementFragment class.
2547         (khtml::ReplacementFragment::root):
2548         (khtml::ReplacementFragment::type):
2549         (khtml::ReplacementFragment::isEmpty):
2550         (khtml::ReplacementFragment::isSingleTextNode):
2551         (khtml::ReplacementFragment::isTreeFragment):
2552         (khtml::ReplacementFragment::hasMoreThanOneBlock):
2553         (khtml::ReplacementFragment::hasLogicalNewlineAtEnd):
2554         
2555         This smaller set of changes markup generation to add the newline annotation described in the
2556         comment at the start of this entry.
2557         
2558         * khtml/xml/dom2_rangeimpl.cpp:
2559         (DOM::RangeImpl::addCommentToHTMLMarkup): Simple helper.
2560         (DOM::RangeImpl::toHTML): Added new EAnnotateForInterchange default argument to control whether
2561         comment annotations are added to the markup generated.
2562         * khtml/xml/dom2_rangeimpl.h: Add some new declarations.
2563         * kwq/WebCoreBridge.mm:
2564         (-[WebCoreBridge markupStringFromRange:nodes:]): Request that markup resulting from call to 
2565         DOM::RangeImpl::toHTML uses annotations when generating.
2566         
2567         New tests.        
2568
2569         * layout-tests/editing/pasteboard/paste-text-001-expected.txt: Added.
2570         * layout-tests/editing/pasteboard/paste-text-001.html: Added.
2571         * layout-tests/editing/pasteboard/paste-text-002-expected.txt: Added.
2572         * layout-tests/editing/pasteboard/paste-text-002.html: Added.
2573         * layout-tests/editing/pasteboard/paste-text-003-expected.txt: Added.
2574         * layout-tests/editing/pasteboard/paste-text-003.html: Added.
2575         * layout-tests/editing/pasteboard/paste-text-004-expected.txt: Added.
2576         * layout-tests/editing/pasteboard/paste-text-004.html: Added.
2577         * layout-tests/editing/pasteboard/paste-text-005-expected.txt: Added.
2578         * layout-tests/editing/pasteboard/paste-text-005.html: Added.
2579         * layout-tests/editing/pasteboard/paste-text-006-expected.txt: Added.
2580         * layout-tests/editing/pasteboard/paste-text-006.html: Added.
2581         * layout-tests/editing/pasteboard/paste-text-007-expected.txt: Added.
2582         * layout-tests/editing/pasteboard/paste-text-007.html: Added.
2583         * layout-tests/editing/pasteboard/paste-text-008-expected.txt: Added.
2584         * layout-tests/editing/pasteboard/paste-text-008.html: Added.
2585         * layout-tests/editing/pasteboard/paste-text-009-expected.txt: Added.
2586         * layout-tests/editing/pasteboard/paste-text-009.html: Added.
2587
2588 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2589
2590         Reviewed by Harrison
2591
2592         Made two small changes that make it possible for comments to have DOM nodes made for them
2593         when pasting. This relies on some earlier work I did some days ago.
2594
2595         * khtml/xml/dom_nodeimpl.cpp:
2596         (NodeImpl::startMarkup): Get the string from the comment.
2597         * kwq/WebCoreBridge.mm:
2598         (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]): Did some very minor
2599         rearranging. Now passes a flag when creating a contextual fragment, requesting that comments
2600         be included in the DOM.
2601
2602 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2603
2604         Reviewed by Harrison
2605
2606         Added some new helpers to the VisiblePosition class. I will begin to use these when I check in
2607         my improved paste code.
2608
2609         * khtml/editing/visible_position.cpp:
2610         (khtml::blockRelationship)
2611         (khtml::visiblePositionsInDifferentBlocks)
2612         (khtml::isFirstVisiblePositionInBlock)
2613         (khtml::isFirstVisiblePositionInNode)
2614         (khtml::isLastVisiblePositionInBlock)
2615         * khtml/editing/visible_position.h
2616
2617 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2618
2619         Reviewed by Harrison
2620
2621         * khtml/xml/dom_position.cpp:
2622         (DOM::Position::downstream): Fix a bug in downstream that prevented a call with DoNotStayInBlock
2623         specified from obeying that directive. The old code would stop at an outer block boundary in
2624         the case where that block had a block as its first child. The correct behavior is to drill into
2625         that inner block (and continue on drilling down, if possible), to find the correct position.
2626
2627 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2628
2629         Reviewed by Harrison
2630
2631         Small improvements to the node-display debugging helpers.
2632
2633         * khtml/xml/dom_nodeimpl.cpp:
2634         (NodeImpl::displayTree): Make the rootNode be this if there is no rootEditableElement.
2635         * khtml/xml/dom_nodeimpl.h: Make displayNode take a default argument of "" for its string.
2636
2637 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2638
2639         Reviewed by Harrison
2640
2641         * khtml/editing/htmlediting.cpp:
2642         (khtml::DeleteSelectionCommand::handleGeneralDelete): The downstream position in this function 
2643         may need to be adjusted when deleting text off the front part of a text node. This fixes a problem 
2644         I discovered while improving the paste command, where the insertion poitn wound up in the wrong
2645         place after the delete. 
2646
2647 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2648
2649         Reviewed by Harrison
2650
2651         Add a new helper function to insert a paragraph separator. Will be used in my
2652         upcoming paste improvments.
2653
2654         * khtml/editing/htmlediting.cpp: Added function
2655         (khtml::CompositeEditCommand::insertParagraphSeparator)
2656         * khtml/editing/htmlediting.h: Ditto.
2657
2658 2004-11-23  David Harrison  <harrison@apple.com>
2659
2660         Added various comments.
2661
2662         * khtml/editing/htmlediting.cpp:
2663         (khtml::StyleChange::init):
2664         (khtml::ApplyStyleCommand::doApply):
2665         (khtml::ApplyStyleCommand::applyBlockStyle):
2666         (khtml::ApplyStyleCommand::applyInlineStyle):
2667
2668 2004-11-23  David Hyatt  <hyatt@apple.com>
2669
2670         Hit testing in table cells with top/bottom space from vertical alignment didn't work.  I forgot about the
2671         super-secret yPos() lie that table cells do.  Use m_y instead of yPos().
2672
2673         * khtml/rendering/render_block.cpp:
2674         (khtml::RenderBlock::nodeAtPoint):
2675
2676 2004-11-22  David Hyatt  <hyatt@apple.com>
2677
2678         Make sure you can use document.createElement to make a <canvas> element.
2679
2680         * khtml/xml/dom_docimpl.cpp:
2681         (DocumentImpl::createHTMLElement):
2682
2683 2004-11-22  Maciej Stachowiak  <mjs@apple.com>
2684
2685         Reviewed by Dave.
2686
2687         <rdar://problem/3492044> performing JavaScript operations on form elements is slower than WinIE (HTMLFormCollection)
2688         <rdar://problem/3489679> selecting an item on the Apache bugzilla query page is very slow (HTMLFormCollection)
2689         <rdar://problem/3477810> checking 80 check boxes with JavaScript is 10x slower than in IE (HTMLFormCollection)
2690         <rdar://problem/3760962> JavaScript that toggles checkboxes is slow (HTMLCollection,HTMLFormCollection)
2691         
2692         * khtml/ecma/kjs_html.cpp:
2693         (KJS::HTMLDocument::tryGet):
2694         * khtml/html/html_formimpl.cpp:
2695         (DOM::HTMLFormElementImpl::HTMLFormElementImpl):
2696         (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
2697         * khtml/html/html_formimpl.h:
2698         * khtml/html/html_miscimpl.cpp:
2699         (HTMLCollectionImpl::HTMLCollectionImpl):
2700         (HTMLCollectionImpl::~HTMLCollectionImpl):
2701         (HTMLCollectionImpl::CollectionInfo::CollectionInfo):
2702         (HTMLCollectionImpl::CollectionInfo::reset):
2703         (HTMLCollectionImpl::resetCollectionInfo):
2704         (HTMLCollectionImpl::checkForNameMatch):
2705         (appendToVector):
2706         (HTMLCollectionImpl::updateNameCache):
2707         (HTMLCollectionImpl::namedItems):
2708         (HTMLFormCollectionImpl::HTMLFormCollectionImpl):
2709         (HTMLFormCollectionImpl::~HTMLFormCollectionImpl):
2710         (HTMLFormCollectionImpl::item):
2711         (HTMLFormCollectionImpl::updateNameCache):
2712         * khtml/html/html_miscimpl.h:
2713
2714 2004-11-22  David Hyatt  <hyatt@apple.com>
2715
2716         Improve the WebCore cache so that the maximum cacheable object size is scaled based off the total cache
2717         size.
2718         
2719         Reviewed by mjs
2720
2721         * khtml/misc/loader.cpp:
2722         (CachedObject::finish):
2723         (Cache::flush):
2724         (Cache::setSize):
2725         * khtml/misc/loader.h:
2726         (khtml::Cache::maxCacheableObjectSize):
2727
2728 2004-11-22  David Hyatt  <hyatt@apple.com>
2729
2730         Fix for 3673381, huge directory listing so slow it seems like a hang.  Rework painting and hit testing so that
2731         it crawls the line box tree instead of the render tree.  This allows more precise intersection/containment testing
2732         that lets us short circuit earlier when painting and hit testing.
2733         
2734         Reviewed by mjs
2735
2736         * khtml/khtml_part.cpp:
2737         (KHTMLPart::isPointInsideSelection):
2738         * khtml/rendering/render_block.cpp:
2739         (khtml::RenderBlock::paint):
2740         (khtml::RenderBlock::paintChildren):
2741         (khtml::RenderBlock::paintObject):
2742         (khtml::RenderBlock::paintFloats):
2743         (khtml::RenderBlock::nodeAtPoint):
2744         * khtml/rendering/render_block.h:
2745         * khtml/rendering/render_box.cpp:
2746         (RenderBox::nodeAtPoint):
2747         * khtml/rendering/render_box.h:
2748         * khtml/rendering/render_br.h:
2749         * khtml/rendering/render_canvas.cpp:
2750         (RenderCanvas::paint):
2751         * khtml/rendering/render_flow.cpp:
2752         (RenderFlow::paintLines):
2753         (RenderFlow::hitTestLines):
2754         (RenderFlow::caretRect):
2755         (RenderFlow::addFocusRingRects):
2756         (RenderFlow::paintFocusRing):
2757         (RenderFlow::paintOutlines):
2758         (RenderFlow::paintOutlineForLine):
2759         * khtml/rendering/render_flow.h:
2760         * khtml/rendering/render_frames.cpp:
2761         (RenderFrameSet::nodeAtPoint):
2762         * khtml/rendering/render_frames.h:
2763         * khtml/rendering/render_image.cpp:
2764         (RenderImage::nodeAtPoint):
2765         * khtml/rendering/render_image.h:
2766         * khtml/rendering/render_inline.cpp:
2767         (RenderInline::paint):
2768         (RenderInline::nodeAtPoint):
2769         * khtml/rendering/render_inline.h:
2770         * khtml/rendering/render_layer.cpp:
2771         (RenderLayer::paintLayer):
2772         (RenderLayer::hitTest):
2773         (RenderLayer::hitTestLayer):
2774         * khtml/rendering/render_layer.h:
2775         * khtml/rendering/render_line.cpp:
2776         (khtml::InlineBox::paint):
2777         (khtml::InlineBox::nodeAtPoint):
2778         (khtml::InlineFlowBox::flowObject):
2779         (khtml::InlineFlowBox::nodeAtPoint):
2780         (khtml::InlineFlowBox::paint):
2781         (khtml::InlineFlowBox::paintBackgrounds):
2782         (khtml::InlineFlowBox::paintBackground):
2783         (khtml::InlineFlowBox::paintBackgroundAndBorder):
2784         (khtml::InlineFlowBox::paintDecorations):
2785         (khtml::EllipsisBox::paint):
2786         (khtml::EllipsisBox::nodeAtPoint):
2787         (khtml::RootInlineBox::paintEllipsisBox):
2788         (khtml::RootInlineBox::paint):
2789         (khtml::RootInlineBox::nodeAtPoint):
2790         * khtml/rendering/render_line.h:
2791         (khtml::InlineRunBox::paintBackgroundAndBorder):
2792         * khtml/rendering/render_object.cpp:
2793         (RenderObject::hitTest):
2794         (RenderObject::setInnerNode):
2795         (RenderObject::nodeAtPoint):
2796         * khtml/rendering/render_object.h:
2797         (khtml::RenderObject::PaintInfo::PaintInfo):
2798         (khtml::RenderObject::PaintInfo::~PaintInfo):
2799         (khtml::RenderObject::paintingRootForChildren):
2800         (khtml::RenderObject::shouldPaintWithinRoot):
2801         * khtml/rendering/render_table.cpp:
2802         (RenderTable::layout):
2803         (RenderTable::paint):
2804         * khtml/rendering/render_text.cpp:
2805         (simpleDifferenceBetweenColors):
2806         (correctedTextColor):
2807         (InlineTextBox::nodeAtPoint):
2808         (InlineTextBox::paint):
2809         (InlineTextBox::selectionStartEnd):
2810         (InlineTextBox::paintSelection):
2811         (InlineTextBox::paintMarkedTextBackground):
2812         (InlineTextBox::paintDecoration):
2813         (RenderText::posOfChar):
2814         * khtml/rendering/render_text.h:
2815         (khtml::RenderText::paint):
2816         (khtml::RenderText::layout):
2817         (khtml::RenderText::nodeAtPoint):
2818         * khtml/xml/dom2_eventsimpl.cpp:
2819         (MouseEventImpl::computeLayerPos):
2820         * khtml/xml/dom_docimpl.cpp:
2821         (DocumentImpl::prepareMouseEvent):
2822         * kwq/KWQAccObject.mm:
2823         (-[KWQAccObject accessibilityHitTest:]):
2824         * kwq/KWQKHTMLPart.mm:
2825         (KWQKHTMLPart::scrollOverflowWithScrollWheelEvent):
2826         (KWQKHTMLPart::eventMayStartDrag):
2827         (KWQKHTMLPart::khtmlMouseMoveEvent):
2828         * kwq/WebCoreBridge.mm:
2829         (-[WebCoreBridge elementAtPoint:]):
2830         (-[WebCoreBridge _positionForPoint:]):
2831
2832 2004-11-22  Maciej Stachowiak  <mjs@apple.com>
2833
2834         Reviewed by Dave.
2835
2836         <rdar://problem/3890961> selecting an item on the Apache bugzilla query page can be sped up 10% (HTMLFormCollection)
2837         <rdar://problem/3890958> JavaScript that toggles checkboxes can be improved 73% (HTMLCollection,HTMLFormCollection)
2838
2839         This avoids the O(N^2) penalty for named item traversal for form collections.
2840
2841         It also combines the item traversal logic for all non-form
2842         collection operations into a single traverseNextItem
2843         function. This avoids having 5 copies of the big switch statement
2844         for this.
2845
2846         Also fixed a bug that prevented the last form element from being removed properly.
2847         
2848         * khtml/html/html_formimpl.cpp:
2849         (DOM::removeFromVector):
2850         * khtml/dom/html_misc.cpp:
2851         (HTMLCollection::namedItems):
2852         * khtml/dom/html_misc.h:
2853         * khtml/ecma/kjs_html.cpp:
2854         (KJS::HTMLCollection::getNamedItems):
2855         * khtml/html/html_miscimpl.cpp:
2856         (HTMLCollectionImpl::traverseNextItem):
2857         (HTMLCollectionImpl::calcLength):
2858         (HTMLCollectionImpl::length):
2859         (HTMLCollectionImpl::item):
2860         (HTMLCollectionImpl::nextItem):
2861         (HTMLCollectionImpl::checkForNameMatch):
2862         (HTMLCollectionImpl::namedItem):
2863         (HTMLCollectionImpl::namedItems):
2864         (HTMLCollectionImpl::nextNamedItem):
2865         (HTMLFormCollectionImpl::calcLength):
2866         (HTMLFormCollectionImpl::namedItem):
2867         (HTMLFormCollectionImpl::nextNamedItem):
2868         (HTMLFormCollectionImpl::namedItems):
2869         * khtml/html/html_miscimpl.h:
2870
2871 2004-11-22  Ken Kocienda  <kocienda@apple.com>
2872
2873         Reviewed by Harrison
2874
2875         Change around the way we block the Javascript "Paste" command identifier from
2876         being available. Formerly, this was done with an ifdef we never compiled in.
2877         Now, this is done with a couple of cheap runtime checks. The advantage is that
2878         we can now compile this command into development builds, and still yet switch
2879         on the command in deployment builds through the use of WebCore SPI so we can
2880         write and run layout tests with all of our builds.
2881
2882         * khtml/editing/jsediting.cpp:
2883         (DOM::JSEditor::queryCommandSupported): Checks state of paste command in case
2884         command being queried is the paste command. 
2885         (DOM::JSEditor::setSupportsPasteCommand): New SPI to turn on paste command.
2886         * khtml/editing/jsediting.h: Ditto.
2887         * khtml/khtml_part.cpp:
2888         (KHTMLPart::pasteFromPasteboard): Added.
2889         (KHTMLPart::canPaste): Added.
2890         * kwq/KWQKHTMLPart.mm:
2891         (KHTMLPart::canPaste): Added.
2892         * kwq/KWQRenderTreeDebug.cpp:
2893         (externalRepresentation): Turn on paste command.
2894         * kwq/WebCoreBridge.h: Add canPaste call so WebKit can fill in the answer.
2895
2896 2004-11-21  Maciej Stachowiak  <mjs@apple.com>
2897
2898         Reviewed by Richard.
2899
2900         <rdar://problem/3889655> HTMLCollectionImpl should use traverseNextNode to improve speed and save recursion
2901         
2902         * khtml/html/html_miscimpl.cpp:
2903         (HTMLCollectionImpl::calcLength):
2904         (HTMLCollectionImpl::getItem):
2905         (HTMLCollectionImpl::item):
2906         (HTMLCollectionImpl::nextItem):
2907         (HTMLCollectionImpl::getNamedItem):
2908         (HTMLCollectionImpl::namedItem):
2909         (HTMLCollectionImpl::nextNamedItemInternal):
2910         (HTMLFormCollectionImpl::nextNamedItemInternal):
2911
2912 2004-11-19  Maciej Stachowiak  <mjs@apple.com>
2913
2914         Reviewed by Darin.
2915
2916         <rdar://problem/3482935> JavaScript so slow it seems like a hang (hrweb.apple.com) (HTMLCollection?)
2917         <rdar://problem/3759149> PeopleSoft page in Safari twice as slow as Mozilla engine (HTMLFormCollection)
2918         <rdar://problem/3888368> selecting an item on the Apache bugzilla query page can be improved 95% (HTMLFormCollection)
2919
2920         Many optimizations to HTMLFormCollection. Iterating it should not
2921         be N^2 any more, though finding items by name could still be.
2922         
2923         * khtml/html/html_formimpl.cpp:
2924         (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
2925         (DOM::HTMLFormElementImpl::length):
2926         (DOM::HTMLFormElementImpl::submitClick):
2927         (DOM::HTMLFormElementImpl::formData):
2928         (DOM::HTMLFormElementImpl::submit):
2929         (DOM::HTMLFormElementImpl::reset):
2930         (DOM::HTMLFormElementImpl::radioClicked):
2931         (DOM::appendToVector):
2932         (DOM::removeFromVector):
2933         (DOM::HTMLFormElementImpl::registerFormElement):
2934         (DOM::HTMLFormElementImpl::removeFormElement):
2935         (DOM::HTMLFormElementImpl::makeFormElementDormant):
2936         (DOM::HTMLFormElementImpl::registerImgElement):
2937         (DOM::HTMLFormElementImpl::removeImgElement):
2938         * khtml/html/html_formimpl.h:
2939         * khtml/html/html_miscimpl.cpp:
2940         (HTMLFormCollectionImpl::FormCollectionInfo::FormCollectionInfo):
2941         (void::HTMLFormCollectionImpl::FormCollectionInfo::reset):
2942         (HTMLFormCollectionImpl::resetCollectionInfo):
2943         (HTMLFormCollectionImpl::calcLength):
2944         (HTMLFormCollectionImpl::item):
2945         (HTMLFormCollectionImpl::getNamedItem):
2946         (HTMLFormCollectionImpl::getNamedFormItem):
2947         (HTMLFormCollectionImpl::firstItem):
2948         (HTMLFormCollectionImpl::nextItem):
2949         * khtml/html/html_miscimpl.h:
2950         (DOM::HTMLFormCollectionImpl::~HTMLFormCollectionImpl):
2951         * khtml/xml/dom_elementimpl.cpp:
2952         (ElementImpl::setAttribute):
2953         (ElementImpl::setAttributeMap):
2954         * kwq/KWQPtrVector.h:
2955         (QPtrVector::findRef):
2956         * kwq/KWQVectorImpl.h:
2957         * kwq/KWQVectorImpl.mm:
2958         (KWQVectorImpl::findRef):
2959         * kwq/WebCoreBridge.mm:
2960         (-[WebCoreBridge elementWithName:inForm:]):
2961         (-[WebCoreBridge controlsInForm:]):
2962
2963 2004-11-19  David Harrison  <harrison@apple.com>
2964
2965         Reviewed by Ken and Darin.
2966
2967         <rdar://problem/3856215> Cannot remove bold from the beginning of a message
2968
2969         Problem is that KHTMLPart::computeAndSetTypingStyle always looked upstream
2970         for the existing style, but in this case (hitting cmd-B with caret at top of
2971         file) there is nothing upstream.  Changed this to use the VisiblePosition
2972         deepEquivalent instead.
2973         
2974         * khtml/khtml_part.cpp:
2975         (KHTMLPart::computeAndSetTypingStyle):
2976
2977 === Safari-172 ===
2978
2979 2004-11-19  Maciej Stachowiak  <mjs@apple.com>
2980
2981         Reviewed by Darin.
2982
2983         <rdar://problem/3864151> REGRESSION (125-167): Chrysler.com never stops loading
2984         
2985         * khtml/xml/dom_docimpl.cpp:
2986         (DocumentImpl::close): Don't fire the onload handler if there is a
2987         redirect pending. This is a very long-standing bug that was masked
2988         by our previously incorrect redirect logic. It used to be that an
2989         older redirect would always win. Recently we changed things so
2990         that a newer redirect would win, but a script that causes a
2991         redirect would stop parsing once complete (so if there are two
2992         redirects in the same script, the latter wins). However, we should
2993         have also prevented onload in this case. Testing with other
2994         browsers shows that onload handlers do not run at all when there
2995         is a pending redirect.
2996
2997 2004-11-19  Ken Kocienda  <kocienda@apple.com>
2998
2999         Reviewed by Harrison
3000
3001         Fix some object lifetime issues in these two commands. This fixes some crashes
3002         I am seeing in some new code I am working on, but have not yet reproduced otherwise.
3003
3004         * khtml/editing/htmlediting.cpp:
3005         (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand): No longer deref nodes
3006         in the ancestor list. They are not ref'ed when put on list. D'uh.
3007         (khtml::InsertParagraphSeparatorCommand::doApply): Ref all cloned nodes that are created by the command
3008         before putting them on the cloned nodes list. This are still deref'ed in the destructor.
3009         (khtml::InsertParagraphSeparatorInQuotedContentCommand::~InsertParagraphSeparatorInQuotedContentCommand): Ditto
3010         destructor comment.
3011         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto doApply comment.
3012
3013 2004-11-19  Ken Kocienda  <kocienda@apple.com>
3014
3015         Reviewed by Harrison
3016
3017         Fix for this bug:
3018         
3019         <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it
3020
3021         * khtml/khtml_part.cpp:
3022         (KHTMLPart::computeAndSetTypingStyle): New helper that does the work of reducing a passed-in style
3023         declaration given the current selection, and then sets the minimum necessary style as the typing
3024         style on the part.
3025         (KHTMLPart::applyStyle): Call new computeAndSetTypingStyle. The guts of computeAndSetTypingStyle used
3026         to be here in the selection-as-caret case. But now [WebCoreBridge setTypingStyle:] needs this code
3027         as well.
3028         * khtml/khtml_part.h: Declare new computeAndSetTypingStyle() function.
3029         * kwq/WebCoreBridge.h: Declare new typingStyle and setTypingStyle: methods.
3030         * kwq/WebCoreBridge.mm: 
3031         (-[WebCoreBridge typingStyle]): Calls through to the part to retrieve the typing style.
3032         (-[WebCoreBridge setTypingStyle:]): Calls through to the part to set the typing style.
3033
3034 2004-11-18  David Harrison  <harrison@apple.com>
3035
3036         Reviewed by Darin.
3037         
3038         Back out part of Darin's fix for <rdar://problem/3885729>, because the new exception gets triggered
3039         by Mail.app. Filed <rdar://problem/3886832> against Mail.app.
3040
3041         * kwq/DOM-CSS.mm:
3042         (-[DOMCSSStyleDeclaration setProperty:::]):
3043
3044 2004-11-18  Chris Blumenberg  <cblu@apple.com>
3045
3046         Fixed: <rdar://problem/3587481> Bug Reporter Login Page: Password AutoFill does not work reliably
3047
3048         Reviewed by john.
3049
3050         * kwq/KWQKHTMLPart.mm:
3051         (KWQKHTMLPart::currentForm): just return the current form, don't scan the entire document looking for a form if there is no current form
3052
3053 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3054
3055         Reviewed by Chris.
3056
3057         - fix recursive item traversal, use traverseNextNode() instead of
3058         the buggy hand-rolled traversal.
3059
3060         * khtml/xml/dom_nodeimpl.cpp:
3061         (NodeListImpl::recursiveItem):
3062
3063 2004-11-17  Darin Adler  <darin@apple.com>
3064
3065         Reviewed by Ken.
3066
3067         - fixed <rdar://problem/3885744> crash with XMLHttpRequest test page (reported by KDE folks)
3068
3069         * khtml/ecma/xmlhttprequest.cpp: (KJS::XMLHttpRequest::slotFinished):
3070         Rolled in fix from KDE; make sure to set job to 0 before calling changeState.
3071
3072         - fixed <rdar://problem/3885729> attempting to modify a computed style does nothing, but should raise a DOM exception
3073         - fixed <rdar://problem/3885731> style declarations use too many malloc blocks; switch to QValueList
3074         - fixed <rdar://problem/3885739> DOM::NodeImpl accessor in DOM::Node class is hot; should be inlined
3075         - changed NodeImpl calls like replaceChild to always ref/deref the parameter; this is a better way to fix
3076           an entire category of leaks we have been fixing one by one recently
3077         - changed computed styles so they hold a reference to the DOM node; the old code could end up with a
3078           stale RenderObject pointer, although I never saw it do that in practice
3079         - implemented the length and item methods for computed styles
3080         - implemented querying additional properties in computed styles (29 more)
3081
3082         * khtml/khtml_part.h: Update forward declaration of CSSMutableStyleDeclarationImpl since it's
3083         now a separate class rather than a typedef. Changed the parameter type of setTypingStyle to
3084         take a mutable style.
3085         * khtml/khtml_part.cpp:
3086         (KHTMLPart::setTypingStyle): Change parameter to take a mutable style.
3087         (KHTMLPart::applyStyle): Add code to make a mutable style in case we are passed
3088         a computed style; also change some types to mutable style.
3089         (updateState): Update iteration of CSSProperty objects in a style declaration to use
3090         the new valuesIterator interface.
3091         (KHTMLPart::selectionHasStyle): Add a call to makeMutable.
3092         (KHTMLPart::selectionStartHasStyle): Add call to makeMutable and update iteration.
3093         (editingStyle): Change type to mutable style, and simplify the style-creation calls,
3094         including accomodating the exception code that setCssText has now.
3095         (KHTMLPart::applyEditingStyleToElement): Change types to mutable style.
3096         (KHTMLPart::removeEditingStyleFromElement): Change code to call setChanged only if removing
3097         the style attributes really was a change, although it's not an important optimization it's
3098         good to do it right.
3099
3100         * khtml/css/css_base.h: Remove unneeded setParsedValue method.
3101         * khtml/css/css_base.cpp: Remove unneeded setParsedValue method. All the places that were
3102         calling it were already removing the old property explicitly, so the code in here to remove
3103         the property again was redundant.
3104
3105         * khtml/css/css_computedstyle.h: Updated virtual functions for changes to parameters in base class.
3106         Moved all the "set"-type functions so they are private. Store a node pointer instead of a renderer.
3107         * khtml/css/css_computedstyle.cpp:
3108         (DOM::CSSComputedStyleDeclarationImpl::CSSComputedStyleDeclarationImpl): Hold a reference to
3109         the node we compute style for, so we don't end up with a pointer to a deallocated RenderObject.
3110         Before we had no guarantee the object would outlast us.
3111         (DOM::CSSComputedStyleDeclarationImpl::setCssText): Add exception parameter, and set the
3112         exception to NO_MODIFICATION_ALLOWED_ERR.
3113         (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue): Update to use node pointer rather
3114         than renderer pointer. Added implementation for box-align, box-direction, box-flex, box-flex-group,
3115         box-lines, box-ordinal-group, box-orient, box-pack, caption-side, clear, cursor, direction,
3116         list-style-image, list-style-position, list-style-type, marquee-direction, marquee-repetition,
3117         marquee-style, user-modify, opacity, orphans, outline-style, page-break-after, page-break-before,
3118         page-break-inside, position, unicode-bidi, widows, z-index.
3119         (DOM::CSSComputedStyleDeclarationImpl::removeProperty): Add exception parameter, and set the
3120         exception to NO_MODIFICATION_ALLOWED_ERR.
3121         (DOM::CSSComputedStyleDeclarationImpl::setProperty): Ditto.
3122         (DOM::CSSComputedStyleDeclarationImpl::length): Implemented.
3123         (DOM::CSSComputedStyleDeclarationImpl::item): Implemented, calls getPropertyValue.
3124         (DOM::CSSComputedStyleDeclarationImpl::copyInheritableProperties): Changed return type to
3125         CSSMutableStyleDeclarationImpl.
3126         (DOM::CSSComputedStyleDeclarationImpl::copy): Added.
3127         (DOM::CSSComputedStyleDeclarationImpl::makeMutable): Added.
3128
3129         * khtml/css/css_ruleimpl.h: Update forward declaration of CSSMutableStyleDeclarationImpl since it's
3130         now a separate class rather than a typedef.
3131         * khtml/css/cssparser.h: Ditto.
3132
3133         * khtml/css/css_valueimpl.h: Refactor CSSStyleDeclarationImpl into two classes. New derived class
3134         CSSMutableStyleDeclarationImpl has the guts, and the base class has only some virtual functions.
3135         Removed a bunch of redundant stuff from other classes in this file too.
3136         (DOM::DashboardRegionImpl::setNext): Ref new before deref'ing old to handle the set-to-same case.
3137         (DOM::CSSProperty::CSSProperty): Added new overload so you can create a CSSProperty with initial values.
3138         (DOM::CSSProperty::operator=): Added.
3139         (DOM::CSSProperty::setValue): Use ref-before-deref pattern to simplify slightly.
3140
3141         * khtml/css/css_valueimpl.cpp:
3142         (DOM::CSSStyleDeclarationImpl::CSSStyleDeclarationImpl): Remove uneeded things.
3143         (DOM::CSSStyleDeclarationImpl::isStyleDeclaration): Put here now that it's no longer inline.
3144         (DOM::CSSMutableStyleDeclarationImpl::CSSMutableStyleDeclarationImpl): Added.
3145         (DOM::CSSMutableStyleDeclarationImpl::operator=): Added.
3146         (DOM::CSSMutableStyleDeclarationImpl::~CSSMutableStyleDeclarationImpl): Updated.
3147         (DOM::CSSMutableStyleDeclarationImpl::getPropertyValue): Removed now-uneeded check.
3148         (DOM::CSSMutableStyleDeclarationImpl::get4Values): Moved here from base class.
3149         (DOM::CSSMutableStyleDeclarationImpl::getShortHandValue): Ditto.
3150         (DOM::CSSMutableStyleDeclarationImpl::getPropertyCSSValue): Update to use QValueList instead of QPtrList.
3151         (DOM::CSSMutableStyleDeclarationImpl::removeProperty): Added exception parameter, updated for QValueList.
3152         (DOM::CSSMutableStyleDeclarationImpl::setChanged): Moved here from base class.
3153         (DOM::CSSMutableStyleDeclarationImpl::getPropertyPriority): Update to use QValueList.
3154         (DOM::CSSMutableStyleDeclarationImpl::setProperty): Added more overloads to match new parameters.
3155         (DOM::CSSMutableStyleDeclarationImpl::setStringProperty): Update to use QValueList.
3156         (DOM::CSSMutableStyleDeclarationImpl::setImageProperty): Ditto.
3157         (DOM::CSSMutableStyleDeclarationImpl::parseProperty): Remove unneeded initialization code due to QValueList.
3158         (DOM::CSSMutableStyleDeclarationImpl::addParsedProperties): Added.
3159         (DOM::CSSMutableStyleDeclarationImpl::setLengthProperty): Moved here from base class.
3160         (DOM::CSSMutableStyleDeclarationImpl::length): Update to use QValueList.
3161         (DOM::CSSMutableStyleDeclarationImpl::item): Moved here from base class.
3162         (DOM::CSSMutableStyleDeclarationImpl::cssText): Return empty string rather than null string when there are
3163         no styles in the list. Update to use QValueList.
3164         (DOM::CSSMutableStyleDeclarationImpl::setCssText): Update to use QValueList and to take an exceptionCode
3165         parameter and set it.
3166         (DOM::CSSMutableStyleDeclarationImpl::merge): Update to use QValueList.
3167         (DOM::CSSStyleDeclarationImpl::diff): Update to use QValueList.
3168         (DOM::CSSMutableStyleDeclarationImpl::copyBlockProperties): Moved here from base class. Change return type.
3169         (DOM::CSSStyleDeclarationImpl::copyPropertiesInSet): Update to use QValueList and use stack, not new/delete.
3170         (DOM::CSSMutableStyleDeclarationImpl::makeMutable): Added.
3171         (DOM::CSSMutableStyleDeclarationImpl::copy): Added.
3172
3173         * khtml/css/cssparser.cpp:
3174         (CSSParser::parseValue): Changed to use addParsedProperties.
3175         (CSSParser::parseDeclaration): Ditto.
3176         (CSSParser::createStyleDeclaration): Use new constructor to create declaration in a more efficient manner.
3177
3178         * khtml/css/cssproperties.in: Removed unused font-size-adjust and -khtml-flow-mode.
3179         * khtml/css/cssproperties.c: Regenerated.
3180         * khtml/css/cssproperties.h: Regenerated.
3181
3182         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::applyDeclarations):
3183         Updated to use QValueList interface to CSSMutableStyleDeclarationImpl.
3184
3185         * khtml/dom/css_value.cpp:
3186         (DOM::CSSStyleDeclaration::cssText): Removed unneeded cast.
3187         (DOM::CSSStyleDeclaration::setCssText): Added exception code handling.
3188         (DOM::CSSStyleDeclaration::getPropertyValue): Changed to call getPropertyValue directly instead of
3189         first doing getPropertyCSSValue and then doing cssText.
3190         (DOM::CSSStyleDeclaration::getPropertyCSSValue): Removed unneeded cast.
3191         (DOM::CSSStyleDeclaration::removeProperty): Added exception code handling. 
3192         (DOM::CSSStyleDeclaration::setProperty): Added exception code handling.
3193         (DOM::CSSStyleDeclaration::length): Removed unneeded cast.
3194         (DOM::CSSStyleDeclaration::item): Removed unneeded cast.
3195         (DOM::CSSStyleDeclaration::parentRule): Removed unneeded cast.
3196         (DOM::CSSValue::setCssText): Removed strange non-implementation (still not implemented).
3197
3198         * khtml/dom/dom_node.h: Made isNull and handle functions inline.
3199         * khtml/dom/dom_node.cpp: Ditto.
3200
3201         * khtml/editing/htmlediting.h: Change some types to mutable style.
3202         * khtml/editing/htmlediting.cpp:
3203         (khtml::EditCommandPtr::typingStyle): Change return type to mutable style.
3204         (khtml::EditCommandPtr::setTypingStyle): Change parameter to mutable style.
3205         (khtml::StyleChange::init): Convert parameter to mutable style. Update to use QValueList.
3206         (khtml::EditCommand::assignTypingStyle): Change parameter to mutable type.
3207         (khtml::EditCommand::setTypingStyle): Ditto.
3208         (khtml::ApplyStyleCommand::ApplyStyleCommand): Convert parameter to mutable style.
3209         (khtml::ApplyStyleCommand::doApply): Change local variables to mutable style.
3210         (khtml::ApplyStyleCommand::applyBlockStyle): Change parameter to mutable style.
3211         (khtml::ApplyStyleCommand::applyInlineStyle): Ditto.
3212         (khtml::ApplyStyleCommand::isHTMLStyleNode): Ditto.
3213         (khtml::ApplyStyleCommand::removeCSSStyle): Ditto. Also update to use QValueList.
3214         (khtml::ApplyStyleCommand::removeBlockStyle): Change parameter to mutable style.
3215         (khtml::ApplyStyleCommand::removeInlineStyle): Ditto.
3216         (khtml::ApplyStyleCommand::addBlockStyleIfNeeded): Ditto.
3217         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): Ditto.
3218         (khtml::InsertLineBreakCommand::doApply): Convert locals to mutable style.
3219         (khtml::InsertTextCommand::prepareForTextInsertion): Ditto.
3220         (khtml::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand): Convert parameter to mutable style.
3221
3222         * khtml/editing/jsediting.cpp: Convert types to mutable styles where we create styles.
3223         * khtml/html/html_baseimpl.h: Change type to mutable style.
3224         * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::createLinkDecl): Ditto.
3225
3226         * khtml/html/html_elementimpl.h: Make CSSMappedAttributeDeclarationImpl use the mutable style
3227         class as a base class, and change types to mutable style as needed.
3228         * khtml/html/html_elementimpl.cpp:
3229         (HTMLElementImpl::createInlineStyleDecl): Change type to mutable style.
3230         (HTMLElementImpl::parseHTMLAttribute): Call parseProperty method.
3231         (HTMLElementImpl::getInlineStyleDecl): Change type to mutable style.
3232         (HTMLElementImpl::additionalAttributeStyleDecl): Ditto.
3233         (HTMLElementImpl::createContextualFragment): Add ref/deref to fix potential node leak.
3234         (HTMLElementImpl::setInnerHTML): Remove ref/deref pair because this leak is now fixed by changes
3235         to appendChild.
3236         (HTMLElementImpl::setOuterHTML): Remove ref/deref pair because this leak is now fixed by changes
3237         to replaceChild.
3238
3239         * khtml/html/html_tableimpl.h: Change types to mutable style.
3240         * khtml/html/html_tableimpl.cpp:
3241         (HTMLTableElementImpl::additionalAttributeStyleDecl): Change type to mutable style.
3242         (HTMLTableElementImpl::getSharedCellDecl): Change type to mutable style.
3243         (HTMLTableCellElementImpl::additionalAttributeStyleDecl): Change type to mutable style.
3244
3245         * khtml/html/htmlparser.cpp:
3246         (KHTMLParser::parseToken): Use a local variable to protect the node by ref'ing it. This is better
3247         than using an explicit delete to make the node go away, and is required for compatibility with the
3248         changes to the NodeImpl functions.
3249         (KHTMLParser::insertNode): Ditto.
3250         (KHTMLParser::createHead): Get rid of explicit delete, no longer needed because of changes to
3251         the NodeImpl functions.
3252
3253         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::createCSSStyleDeclaration): Call simpler constructor
3254         now that there's no need to make the property list explictly.
3255
3256         * kwq/DOM-CSS.mm:
3257         (-[DOMCSSStyleDeclaration setCssText:]): Raise exception when appropriate.
3258         (-[DOMCSSStyleDeclaration removeProperty:]): Ditto.
3259         (-[DOMCSSStyleDeclaration setProperty:::]): Dito.
3260
3261         * khtml/xml/dom_nodeimpl.cpp:
3262         (NodeImpl::insertBefore): Always do a ref/deref, so callers don't have to worry about whether the
3263         function succeeded or not for ownership purposes.
3264         (NodeImpl::replaceChild): Ditto.
3265         (NodeImpl::appendChild): Ditto.
3266         (NodeBaseImpl::insertBefore): Ditto.
3267         (NodeBaseImpl::replaceChild): Ditto.
3268         (NodeBaseImpl::appendChild): Ditto.
3269         (NodeBaseImpl::addChild): Ditto.
3270
3271         * WebCore-tests.exp: Removed CSSStyleDeclaration::length; not sure why it was in here.
3272         * WebCore-combined.exp: Regenerated.
3273
3274 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3275
3276         still even more build fixing
3277
3278         * khtml/html/html_miscimpl.cpp:
3279         (HTMLCollectionImpl::resetCollectionInfo):
3280
3281 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3282
3283         more build fixing
3284
3285         * khtml/html/html_miscimpl.cpp:
3286         (HTMLCollectionImpl::resetCollectionInfo):
3287
3288 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3289
3290         Fixed build problem.
3291
3292         * khtml/html/html_miscimpl.h:
3293         (DOM::HTMLCollectionImpl::CollectionInfo::CollectionInfo): it's haslength, not hasLenght.
3294
3295 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3296
3297         Reviewed by Ken.
3298
3299         - merged and cleaned up HTMLCollection and HTMLFormCollection speedups from konqueror
3300
3301         <rdar://problem/3822992> VIP: Program listings pages at directv.com take a really long time to load [HTMLCollection]
3302         <rdar://problem/3701991> Safari unresponsive loading (www.maxim-ic.com) (HTMLCollection)
3303
3304         This is also a start on fixing 5 other bugs, but those need additional work to make
3305         HTMLFormCollection fast.
3306
3307         * khtml/html/html_documentimpl.h: