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