- fixed development builds
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
1 2005-04-26  Darin Adler  <darin@apple.com>
2
3         - fixed development builds
4
5         * khtml/misc/main_thread_malloc.h: Use inlines instead of macros for allocation functions.
6
7 2005-04-25  David Hyatt  <hyatt@apple.com>
8
9         Fix for 4097842, changing 1st line of a url that wraps doesn't update the second line.  Make sure to
10         update line break info for the last dirty line so that when a clean line tries to figure out where it
11         started, it will get an accurate position taking into account the updated string.  By doing this, the code
12         will be able to properly distinguish between the old and new positions and not accidentally assume they are
13         the same.
14         
15         Reviewed by darin
16
17         * khtml/rendering/render_text.cpp:
18         (RenderText::setTextWithOffset):
19
20 2005-04-26  Darin Adler  <darin@apple.com>
21
22         Reviewed by Maciej.
23
24         - fixed <rdar://problem/4098826> Bezier curves broken in new Safari canvas object (last two parameters parsed incorrectly)
25
26         * khtml/ecma/kjs_html.cpp: (KJS::Context2DFunction::tryCall): Fixed incorrect argument indices.
27         Thanks to Brian Campbell who figured out what was wrong.
28
29 2005-04-17  Maciej Stachowiak  <mjs@apple.com>
30
31         Reviewed by Darin.
32
33         - use single-threaded malloc in places where malloc is hot for an
34         8% speed improvement on cvs-base
35
36         * ForwardingHeaders/misc/fast_malloc.h: Added.
37         * WebCore.pbproj/project.pbxproj:
38         * khtml/css/css_base.h:
39         * khtml/css/css_ruleimpl.h:
40         * khtml/css/css_valueimpl.h:
41         * khtml/css/cssstyleselector.h:
42         * khtml/misc/arena.cpp:
43         (ArenaAllocate):
44         (FreeArenaList):
45         (ArenaFinish):
46         * khtml/misc/main_thread_malloc.cpp: Added.
47         * khtml/misc/main_thread_malloc.h: Added.
48         * khtml/rendering/render_style.h:
49         * khtml/xml/dom2_eventsimpl.h:
50         * khtml/xml/dom2_rangeimpl.h:
51         * khtml/xml/dom2_traversalimpl.h:
52         * khtml/xml/dom2_viewsimpl.h:
53         * khtml/xml/dom_docimpl.h:
54         * khtml/xml/dom_elementimpl.cpp:
55         (NamedAttrMapImpl::NamedAttrMapImpl):
56         (NamedAttrMapImpl::clearAttributes):
57         (NamedAttrMapImpl::operator=):
58         (NamedAttrMapImpl::addAttribute):
59         (NamedAttrMapImpl::removeAttribute):
60         * khtml/xml/dom_elementimpl.h:
61         * khtml/xml/dom_nodeimpl.h:
62         * khtml/xml/dom_stringimpl.h:
63         * kwq/KWQFontFamily.h:
64         * kwq/KWQListImpl.mm:
65         * kwq/KWQString.h:
66         * kwq/KWQString.mm:
67         (ALLOC_CHAR):
68         (ALLOC_QCHAR):
69         (QString::setBufferFromCFString):
70         (allocatePageNode):
71
72 2005-04-25  John Sullivan  <sullivan@apple.com>
73
74         Reviewed by Dave Harrison.
75         
76         - fixed <rdar://problem/4098731> [DOMHTMLTextAreaElement cols] returns wrong value (usually zero)
77
78         * kwq/DOMHTML.mm:
79         (-[DOMHTMLTextAreaElement cols]):
80         use ATTR_COLS instead of ATTR_ACCESSKEY (D'oh!)
81         (-[DOMHTMLTextAreaElement setCols:]):
82         fixed whitespace
83
84 2005-04-25  Darin Adler  <darin@apple.com>
85
86         Reviewed by John.
87
88         - fixed <rdar://problem/4097849> REGRESSION (162-163): importNode creates non-HTML elements, thus style attributes (and some others) don't work
89
90         * khtml/xml/dom_docimpl.h: Add virtual functions HTMLElementNamespace and isHTMLNamespace.
91         * khtml/xml/dom_docimpl.cpp:
92         (DocumentImpl::importNode): Rearranged this function and fixed the following problems: 1) made sure to ref node while attributes are
93         being set on it so it doesn't get destroyed; 2) fixed code to get namespace from the element we are importing to use the IDs from
94         the source document, not the destination document; 3) removed unneeded getDocument() call which just returns this; 4) fixed error
95         handling for cases where an exception happens while processing the children.
96         (DocumentImpl::HTMLElementNamespace): Added. Returns XHTML_NAMESPACE.
97         (DocumentImpl::isHTMLNamespace): Added. Returns true for any namespace that matches XHTML_NAMESPACE (case insensitive).
98         (DocumentImpl::createElementNS): Changed to call isHTMLNamespace, which will cause it to accept the null namespace in an HTML document.
99         This is the change that fixes the bug. Also fixed the code path to do a little less wasteful work in the non-XHTML case.
100         (DocumentImpl::createHTMLElement): Pass in HTMLElementNamespace() rather than 0 to tagId.
101         (DocumentImpl::attrId): Use isHTMLNamespace instead of allowing the null namespace explicitly.
102         (DocumentImpl::tagId): Ditto.
103
104         * khtml/html/html_documentimpl.h: Add overrides for HTMLElementNamespace and isHTMLNamespace.
105         * khtml/html/html_documentimpl.cpp:
106         (HTMLDocumentImpl::HTMLElementNamespace): Added. Returns 0 so we use the null string for HTML elements inside HTML documents (as before).
107         (HTMLDocumentImpl::isHTMLNamespace): Added. Allows 0, and then calls base class to check for the actual XHTML namespace. Thus, we allow
108         both no namespace at all and the XHTML namespace inside HTML documents.
109
110         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::namespaceURI): Changed to call HTMLElementNamespace rather than checking
111         isHTMLDocument. Same result as before, but better division of responsibilities.
112
113 2005-04-25  Darin Adler  <darin@apple.com>
114
115         Reviewed by John.
116
117         - fixed <rdar://problem/4091956> JavaScript drop handlers don't receive more than one dropped item
118
119         * kwq/KWQClipboard.mm:
120         (cocoaTypeFromMIMEType): Remove some use of compare -- less efficient than a simpler "==" check.
121         Fixed non-GC-safe code to use KWQCFAutorelease instead.
122         (MIMETypeFromCocoaType): Use fromCFString instead of fromNSString to avoid a cast.
123         (KWQClipboard::getData): Rearrange so that we'll use filenames if both filenames and a URL are present, since
124         filenames can accomodate multiple items. Fix bug where we'd return multiple filenames when the type requested
125         is "URL". Fixed loop that computed the count over and over again for the loop termination condition. Check
126         that the data for NSFilenamesPboardType is an NSArray instead of assuming it is.
127         (KWQClipboard::setData): Use isEqualToString: instead of == when comparing types.
128
129 2005-04-22  David Hyatt  <hyatt@apple.com>
130
131         Fix for 4096878, drop shadow effect not displayed correctly on tbray.org/ongoing/.  Block minmaxwidth was
132         broken when negative margins were used and did not properly decrease the max width.
133         
134         Reviewed by Maciej
135
136         * khtml/rendering/render_block.cpp:
137         (khtml::RenderBlock::calcBlockMinMaxWidth):
138         * layout-tests/fast/block/float/034-expected.txt: Added.
139         * layout-tests/fast/block/float/034.html: Added.
140         * layout-tests/fast/block/float/035-expected.txt: Added.
141         * layout-tests/fast/block/float/035.html: Added.
142         
143 2005-04-22  David Hyatt  <hyatt@apple.com>
144
145         Remove some dead code from css_valueimpl.  It wasn't used at all.
146
147         * khtml/css/css_valueimpl.cpp:
148         * khtml/css/css_valueimpl.h:
149
150 2005-04-22  Darin Adler  <darin@apple.com>
151
152         * khtml/ecma/kjs_html.h: Removed unnecessary bogus class name qualifiers.
153
154 2005-04-22  David Hyatt  <hyatt@apple.com>
155
156         Fix for 4096681, fix regression in how the list-style property is parsed.  It no longer parses when it hits
157         a url in the property value list now, because the list pointer did not get advanced.  This fixes alistapart.com.
158         
159         Reviewed by john
160
161         * khtml/css/cssparser.cpp:
162         (CSSParser::parseValue):
163         * layout-tests/fast/lists/009-expected.txt: Added.
164         * layout-tests/fast/lists/009.html: Added.
165         * layout-tests/fast/lists/resources/listmark.gif: Added.
166
167 2005-04-22  Darin Adler  <darin@apple.com>
168
169         Reviewed by John.
170
171         - fixed <rdar://problem/4091082> Google Suggest no longer works due to lack of "frameElement"
172
173         * khtml/ecma/kjs_window.h: Added FrameElement.
174         * khtml/ecma/kjs_window.cpp: (Window::get): Added "frameElement".
175         * khtml/ecma/kjs_window.lut.h: Regenerated.
176
177 2005-04-22  Darin Adler  <darin@apple.com>
178
179         Reviewed by John.
180
181         - a small editing-related code cleanup
182
183         * khtml/rendering/render_text.h: Added positionForOffset and made offsetForPosition const.
184         * khtml/rendering/render_text.cpp:
185         (InlineTextBox::offsetForPosition): Made const.
186         (InlineTextBox::positionForOffset): Added. Moved code here from caretRect.
187         (RenderText::caretRect): Call positionForOffset instead of doing the work here.
188
189 2005-04-21  David Hyatt  <hyatt@apple.com>
190
191         Fix for 4095839, wrong background image used on flechtwerk.de.  Make sure that the global mapped
192         attribute cache hashed background attributes into per-document buckets.
193
194         * khtml/html/html_baseimpl.cpp:
195         (HTMLBodyElementImpl::mapToEntry):
196         * khtml/html/html_elementimpl.h:
197         (DOM::):
198         * khtml/html/html_tableimpl.cpp:
199         (HTMLTableElementImpl::mapToEntry):
200         (HTMLTablePartElementImpl::mapToEntry):
201         * khtml/xml/dom_docimpl.cpp:
202         (DocumentImpl::DocumentImpl):
203         * khtml/xml/dom_docimpl.h:
204         (DOM::DocumentImpl::docID):
205
206 2005-04-21  Vicki Murley  <vicki@apple.com>
207
208         - layout test for 4065447, outerHTML on images
209
210         * layout-tests/fast/dynamic/outerHTML-img-expected.txt: Added.
211         * layout-tests/fast/dynamic/outerHTML-img.html: Added.
212
213 2005-04-20  Vicki Murley  <vicki@apple.com>
214
215         Reviewed by hyatt.
216
217         - fixed <rdar://problem/4065447> support outerHTML on IMG elements
218
219         * khtml/html/html_elementimpl.cpp:
220         (HTMLElementImpl::setOuterHTML):
221
222 2005-04-18  David Hyatt  <hyatt@apple.com>
223
224         Fix min-height so that when it resolves to auto it does not use the box's intrinsic height.
225         
226         * khtml/rendering/render_box.cpp:
227         (RenderBox::calcHeight):
228         (RenderBox::calcHeightUsing):
229
230 2005-04-18  David Hyatt  <hyatt@apple.com>
231
232         Back out fix for 4032346, since it is causing garbled image content on many sites.
233
234         The bug tracking the fix is 4069093.
235         
236         (khtml::RenderBlock::matchedEndLine):
237
238 2005-04-18  David Hyatt  <hyatt@apple.com>
239
240         Fix the smile in the Acid2 test.  Floats should not grow to contain other floats unless height is auto.  Otherwise
241         the float should use the specified height.
242
243         Also fix row 14 of the Acid2 test.  Although ambiguous, just modify the table cell baseline alignment code to align
244         to the bottom of the cell's content height if no suitable baseline could be found.
245         
246         * khtml/rendering/render_block.cpp:
247         (khtml::RenderBlock::layoutBlock):
248         * khtml/rendering/render_block.h:
249         (khtml::RenderBlock::firstRootBox):
250         (khtml::RenderBlock::lastRootBox):
251         * khtml/rendering/render_table.cpp:
252         (RenderTableSection::calcRowHeight):
253         (RenderTableCell::baselinePosition):
254         
255 2005-04-15  David Hyatt  <hyatt@apple.com>
256
257         Make sure empty tables honor CSS-specified heights when they have no rows or sections.  This is done only
258         in strict mode, since it is not compatible with WinIE.
259
260         * khtml/rendering/render_table.cpp:
261         (RenderTable::layout):
262
263 2005-04-15  David Hyatt  <hyatt@apple.com>
264
265         Fix for row 13 of the Acid2 test.  Change HTML comment parsing in strict mode to do proper SGML parsing,
266         checking for pairs of -- and only being willing to close the comment if every -- is paired up.
267         
268         * khtml/html/htmltokenizer.cpp:
269         (khtml::HTMLTokenizer::parseComment):
270
271 2005-04-12  Maciej Stachowiak  <mjs@apple.com>
272
273         Reviewed by Richard.
274
275         - use custom single-threaded malloc for all non-GC JavaScriptCore
276         allocations, for a 9.1% speedup on JavaScript iBench
277          
278         * khtml/ecma/kjs_binding.cpp:
279         (UString::UString):
280         * khtml/ecma/kjs_proxy.cpp:
281         (KJSProxyImpl::evaluate):
282
283 2005-04-15  David Hyatt  <hyatt@apple.com>
284
285         Fix the six pixel gap between rows nine and ten of the Acid2 test.  Make sure that percentage heights that
286         resolve to auto are properly treated as though they have auto height by the self-collapsing block check (as per
287         section 8.3.1, paragraph 7 of the CSS2.1 spec).
288         
289         * khtml/rendering/render_block.cpp:
290         (khtml::RenderBlock::isSelfCollapsingBlock):
291
292 2005-04-15  David Hyatt  <hyatt@apple.com>
293
294         The Acid2 test and the reference rendering both make use of overflow:hidden on the <html> element.  Turns out
295         the CSS2.1 wording for this behavior has been revised (based off WinIE/Mozilla behavior).  Change our behavior
296         to match and make <html> overflow apply to the viewport.
297         
298         * khtml/khtmlview.cpp:
299         (KHTMLView::applyOverflowToViewport):
300         (KHTMLView::layout):
301         * khtml/khtmlview.h:
302         * khtml/rendering/render_box.cpp:
303         (RenderBox::setStyle):
304
305 2005-04-14  David Hyatt  <hyatt@apple.com>
306
307         3258403 and 3258402 can now be fixed.  min/max-width/height support is now complete.  This patch makes them
308         work for positioned elements and enables us to pass row one of the Acid2 test.
309         
310         * khtml/rendering/render_box.cpp:
311         (RenderBox::calcAbsoluteHorizontal):
312         (RenderBox::calcAbsoluteHorizontalValues):
313         (RenderBox::calcAbsoluteVertical):
314         (RenderBox::calcAbsoluteVerticalValues):
315         * khtml/rendering/render_box.h:
316
317 2005-04-12  David Hyatt  <hyatt@apple.com>
318
319         Working on the Acid2 test, Row 1.
320
321         Improve checkChild for the DTD so that it knows what mode a document is in.  This allows it to adhere more
322         strictly to the actual DTD in strict mode and almost strict mode.
323
324         Change the <table>-inside-<p> check so that <table> is disallowed inside <p> in 
325         strict mode and almost strict mode.  This matches Firefox behavior, which allows <table>
326         inside <p> only in quirks mode.
327
328         * khtml/html/dtd.cpp:
329         (DOM::checkChild):
330         * khtml/html/dtd.h:
331         * khtml/html/htmlparser.cpp:
332         (KHTMLParser::insertNode):
333         * khtml/html/htmltokenizer.cpp:
334         (khtml::HTMLTokenizer::parseTag):
335         * khtml/xml/dom_elementimpl.cpp:
336         (ElementImpl::childAllowed):
337
338 2005-04-12  Vicki Murley  <vicki@apple.com>
339
340         Reviewed by Maciej. 
341
342         - fixed <rdar://problem/3760895> Request for including an implementation of the elementFromPoint function
343  
344         * khtml/dom/dom_doc.cpp:
345         (DOM::Document::elementFromPoint):
346         * khtml/dom/dom_doc.h:
347         * khtml/ecma/kjs_dom.cpp:
348         (DOMDocumentProtoFunc::tryCall):
349         * khtml/ecma/kjs_dom.h:
350         (KJS::DOMDocument::):
351         * khtml/ecma/kjs_dom.lut.h:
352         (KJS::):
353         * khtml/xml/dom_docimpl.cpp:
354         (DocumentImpl::elementFromPoint):
355         * khtml/xml/dom_docimpl.h:
356
357 2005-04-12  David Hyatt  <hyatt@apple.com>
358
359         Beginning of work to support the Acid2 CSS test put forward by the Web Standards Project.  Fix
360         our handling of the rel attribute on <link> elements to do a proper tokenization so that stylesheets
361         can be recognized even when other keywords are present in the rel attribute.
362
363         * khtml/html/html_headimpl.cpp:
364         (HTMLLinkElementImpl::HTMLLinkElementImpl):
365         (HTMLLinkElementImpl::parseHTMLAttribute):
366         (HTMLLinkElementImpl::tokenizeRelAttribute):
367         (HTMLLinkElementImpl::process):
368         * khtml/html/html_headimpl.h:
369
370 2005-04-12  John Sullivan  <sullivan@apple.com>
371
372         - fixed these two bugs (I also fixed these on the experimental-ui-branch)
373         <rdar://problem/3154293> Find Next should not scroll page if the next target is already visible
374         <rdar://problem/3121828> scrollToVisible on find cuts off the left part of the view due to needless horiz. scroll
375
376         Reviewed by Chris.
377
378         * kwq/KWQKHTMLPart.mm:
379         (KWQKHTMLPart::jumpToSelection):
380         Trey had written code to address these issues, but left it commented out due to other
381         problems. The other problems no longer occur, so I uncommented Trey's code, and then
382         discovered that I could make it behave more like TextEdit with many fewer lines of
383         code.
384
385 2005-04-08  David Harrison  <harrison@apple.com>
386
387         Reviewed by Dave Hyatt.
388
389         <rdar://problem/4084106> Remove NSAccessibilityForegroundColorTextAttributeWrapper
390
391         * kwq/KWQAccObject.mm:
392         (AXAttributeStringSetStyle):
393         Use NSAccessibilityForegroundColorTextAttribute directly.
394
395 2005-04-05  David Hyatt  <hyatt@apple.com>
396
397         Fix for 4077106, make sure that mouse wheeling in overflow sections uses 40 rather than 10 as the base line
398         step.
399         
400         Reviewed by darin
401
402         * khtml/rendering/render_layer.cpp:
403         (RenderLayer::positionScrollbars):
404         * kwq/KWQScrollBar.mm:
405         (QScrollBar::scroll):
406
407 2005-04-04  Vicki Murley  <vicki@apple.com>
408
409         Reviewed by Maciej.
410
411         - fixed <rdar://problem/3871669> no focus or blur methods on HTML button elements
412
413         * khtml/dom/html_form.cpp:
414         (HTMLButtonElement::focus): 
415         (HTMLButtonElement::blur): 
416         * khtml/dom/html_form.h: 
417         * khtml/ecma/kjs_html.cpp:
418         (KJS::HTMLElementFunction::tryCall):
419         * khtml/ecma/kjs_html.h:
420         (KJS::HTMLElement::):
421         * khtml/ecma/kjs_html.lut.h:
422         (KJS::):
423         * khtml/html/html_formimpl.cpp:
424         (DOM::HTMLButtonElementImpl::blur):
425         (DOM::HTMLButtonElementImpl::focus):
426         * khtml/html/html_formimpl.h:
427
428 === WebCore-415 ===
429
430 2005-03-28  David Harrison  <harrison@apple.com>
431
432         Reviewed by Darin.
433         
434         <rdar://problem/4069161> REGRESSION (8A416-8A419): Safari crash bringing up context menu for non-HTML content in a frame
435
436         * kwq/KWQAccObject.mm:
437         (-[KWQAccObject rendererForView:]):
438         Nil-check node variable instead of rechecking document variable.
439
440 === WebCore-413 ===
441
442 2005-03-27  Darin Adler  <darin@apple.com>
443
444         Reviewed by me, fix by Kida-san.
445
446         - fixed <rdar://problem/4067474> 8A424: Safari immediately quit by Cmd+Ctrll+'D'
447
448         * kwq/WebCoreBridge.mm: (-[WebCoreBridge convertToNSRange:DOM::]):
449         Added nil check.
450
451 === Safari-412 ===
452
453 2005-03-24  Richard Williamson   <rjw@apple.com>
454
455         Fixed <rdar://problem/4052683> After adding/removing stocks from Stocks Widget, stock areas went blank
456
457         The request was being collected before firing it's load handler.
458         We now gc protect the request while it's loading.
459
460         Reviewed by Maciej.
461
462         * khtml/ecma/xmlhttprequest.cpp:
463         (KJS::XMLHttpRequest::send):
464         (KJS::XMLHttpRequest::abort):
465         (KJS::XMLHttpRequest::slotFinished):
466         (KJS::XMLHttpRequestProtoFunc::tryCall):
467
468 === Safari-411 ===
469
470 2005-03-23  Darin Adler   <darin@apple.com>
471
472         Further fix for 4053515.
473
474         Covered cases where text position doesn't lie inside a
475         text node.      
476
477         Reviewed by Richard.
478
479         * khtml/editing/visible_text.cpp:
480         (khtml::TextIterator::setRangeFromLocationAndLength):
481
482 2005-03-23  Richard Williamson   <rjw@apple.com>
483
484         Fixed <rdar://problem/4053515> REGRESSION (Mail): Kotoeri input method reconversion does not work in WebViews
485
486         We now use actual document NSRanges to represent both marked text
487         ranges and selection ranges.
488
489         Reviewed by Ken.
490
491         * khtml/editing/visible_text.cpp:
492         (khtml::TextIterator::rangeLength):
493         (khtml::TextIterator::setRangeFromLocationAndLength):
494         * khtml/editing/visible_text.h:
495         * kwq/WebCoreBridge.h:
496         * kwq/WebCoreBridge.mm:
497         (-[WebCoreBridge convertToNSRange:DOM::]):
498         (-[WebCoreBridge DOM::convertToDOMRange:]):
499         (-[WebCoreBridge selectNSRange:]):
500         (-[WebCoreBridge markedTextDOMRange]):
501         (-[WebCoreBridge markedTextNSRange]):
502
503 2005-03-22  Kevin Decker  <kdecker@apple.com>
504
505         Reviewed by Vicki.
506
507         Fixed <rdar://problem/4062336> REGRESSION (406-407): HTML submenus not working at hrweb.apple.com after going back
508
509         Rolled out the fix for <rdar://problem/4041374> REGRESSION (185-186): unload handlers (at least those added with addEventListener) are broken
510
511         We clearly need a better solution to 4041374. We can't indiscriminately remove event listeners in closeURL() after-all. Since event listeners are registered in a <script> tag, which is evaluated and executed at page load time, this becomes a problem since we don't reevaluate a page's <script> that is in the back/forward cache.  Thus once you leave the page, the listeners are gone for good.  This is the problem.
512
513         * khtml/khtml_part.cpp:
514         (KHTMLPart::closeURL):
515         * khtml/xml/dom_docimpl.cpp:
516         (DocumentImpl::detach): 
517
518 === Safari-410 ===
519
520 2005-03-22  Vicki Murley  <vicki@apple.com>
521
522         - roll the fix for <rdar://problem/4060266> back in, since its 
523         now approved by CCC
524
525         * khtml/editing/visible_text.cpp:
526         (khtml::TextIterator::handleTextBox):
527
528 2005-03-22  Vicki Murley  <vicki@apple.com>
529
530         - roll out the fix for <rdar://problem/4060266> since it was denied by CCC
531
532         * khtml/editing/visible_text.cpp:
533         (khtml::TextIterator::handleTextBox):
534
535 2005-03-22  David Harrison  <harrison@apple.com>
536
537         Reviewed by Darin.
538         
539         <rdar://problem/4060266> Double-clicking in Dictionary.app doesn't work for some words (coming just after style change)
540
541         * khtml/editing/visible_text.cpp:
542         (khtml::TextIterator::handleTextBox):
543         Complete the check of whether to emit space for collapsed space.
544
545 2005-03-22  David Harrison  <harrison@apple.com>
546
547         Reviewed by John.
548         
549         <rdar://problem/4061443> REGRESSION (8A420-8A421): Pasting in the Stickies widget is broken again
550
551         * khtml/editing/htmlediting.cpp:
552         (khtml::positionBeforeContainingSpecialElement):
553         (khtml::positionAfterContainingSpecialElement):
554         Return unchanged Position rather than a null or non-editable one.
555
556 === Safari-409 ===
557
558 2005-03-20  Ken Kocienda  <kocienda@apple.com>
559
560         Reviewed by me
561
562         I made an error in this test earlier. It was not testing what I intended. Fixed.
563
564         * layout-tests/editing/unsupported-content/list-delete-001-expected.txt
565         * layout-tests/editing/unsupported-content/list-delete-001.html
566         
567         New tests:
568
569         * layout-tests/editing/unsupported-content/table-delete-001-expected.txt: Added.
570         * layout-tests/editing/unsupported-content/table-delete-001.html: Added.
571         * layout-tests/editing/unsupported-content/table-delete-002-expected.txt: Added.
572         * layout-tests/editing/unsupported-content/table-delete-002.html: Added.
573         * layout-tests/editing/unsupported-content/table-delete-003-expected.txt: Added.
574         * layout-tests/editing/unsupported-content/table-delete-003.html: Added.
575         * layout-tests/editing/unsupported-content/table-type-after-expected.txt: Added.
576         * layout-tests/editing/unsupported-content/table-type-after.html: Added.
577         * layout-tests/editing/unsupported-content/table-type-before-expected.txt: Added.
578         * layout-tests/editing/unsupported-content/table-type-before.html: Added.
579
580 2005-03-20  Darin Adler  <darin@apple.com>
581
582         Reviewed by Maciej.
583
584         - fixed <rdar://problem/3923903> REGRESSION (164-165): Repro Safari crash in khtml::RenderLayer::scrollToOffset
585
586         * khtml/rendering/render_layer.cpp: (RenderLayer::scrollToOffset): Check canvas for nil.
587
588 2005-03-20  David Harrison  <harrison@apple.com>
589
590         Reviewed by Darin.
591         
592         <rdar://problem/4055127> Dictionary pop-up panel misplaced at beginning of text blocks (breaks double-clicking in Dictionary.app)
593
594         SimplifiedBackwardsTextIterator::advance() needed to not limit to textnodes
595         when checking whether moving back across block boundaries
596
597         VisibleUnits previousBoundary() needed to INIT_DOWN when creating result VisiblePosition
598
599         All editing tests pass.
600
601         * khtml/editing/visible_text.cpp:
602         (khtml::SimplifiedBackwardsTextIterator::advance):
603         * khtml/editing/visible_units.cpp:
604         (khtml::previousBoundary):
605
606 2005-03-20  Darin Adler  <darin@apple.com>
607
608         Reviewed by Harrison.
609
610         - fixed <rdar://problem/4059914> when you select all of a frame's content, need to select the frame in the parent document so it can be easily deleted
611
612         * khtml/khtml_part.h: Added selectFrameElementInParentIfFullySelected.
613         * khtml/khtml_part.cpp:
614         (isFrame): Added.
615         (KHTMLPart::setFocusNodeIfNeeded): Changed to not set focus to a frame; was not what this function was
616         intended to do, and caused trouble when trying to select a frame element.
617         (KHTMLPart::khtmlMouseReleaseEvent): Call selectFrameElementInParentIfFullySelected.
618         (KHTMLPart::selectAll): Call selectFrameElementInParentIfFullySelected.
619         (KHTMLPart::selectFrameElementInParentIfFullySelected): Added. Selects the frame element in the parent
620         if a frame is entirely selected, which makes it easier to delete or replace the frame and is consistent
621         with the changes Maciej made recently for other elements.
622
623         * kwq/WebCoreBridge.mm:
624         (-[WebCoreBridge alterCurrentSelection:direction:granularity:]): Call selectFrameElementInParentIfFullySelected.
625         (-[WebCoreBridge alterCurrentSelection:verticalDistance:]): Call selectFrameElementInParentIfFullySelected.
626
627 2005-03-20  Darin Adler  <darin@apple.com>
628
629         Reviewed by me, code change by Ken.
630
631         - fixed <rdar://problem/4059852> Deleting from first element of list makes content jump to wrong place
632
633         * khtml/editing/htmlediting.cpp:
634         (khtml::isListStructureNode): Added.
635         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Check for list nodes as well as table nodes.
636
637 2005-03-20  Ken Kocienda  <kocienda@apple.com>
638
639         Reviewed by me
640         
641         Added tests to cover new "unsupported content" editing code.
642
643         * layout-tests/editing/unsupported-content/list-delete-001-expected.txt: Added.
644         * layout-tests/editing/unsupported-content/list-delete-001.html: Added.
645         * layout-tests/editing/unsupported-content/list-delete-002-expected.txt: Added.
646         * layout-tests/editing/unsupported-content/list-delete-002.html: Added.
647         * layout-tests/editing/unsupported-content/list-delete-003-expected.txt: Added.
648         * layout-tests/editing/unsupported-content/list-delete-003.html: Added.
649         * layout-tests/editing/unsupported-content/list-type-after-expected.txt: Added.
650         * layout-tests/editing/unsupported-content/list-type-after.html: Added.
651         * layout-tests/editing/unsupported-content/list-type-before-expected.txt: Added.
652         * layout-tests/editing/unsupported-content/list-type-before.html: Added.
653
654 2005-03-20  Ken Kocienda  <kocienda@apple.com>
655
656         Reviewed by Maciej
657         
658         Fix for this bug:
659         
660         <rdar://problem/4059578> Entire list deleted, and caret disappears, when delete key hit at end of list
661
662         The problem is that a new case in the delete code did not consider when the
663         downstream end node of the selection might be an ancestor of the upstream start
664         node. That is the case in this bug. The downstream end is the body element, and
665         this line of code would delete all the children of the downstream end:
666             removeChildrenInRangePreservingPosition(m_downstreamEnd.node(), 0, 
667                 m_downstreamEnd.offset(), m_upstreamStart);
668
669         The fix is to check for this "is ancestor" case, and do some tree logic to find
670         the right offset of the downstream end node for the call to
671         removeChildrenInRangePreservingPosition().
672
673         * khtml/editing/htmlediting.cpp:
674         (khtml::DeleteSelectionCommand::handleGeneralDelete): Fixed as described.
675
676 2005-03-19  Ken Kocienda  <kocienda@apple.com>
677
678         Reviewed by Maciej
679
680         Fix for this bug:
681        
682         <rdar://problem/4059384> Cannot place insertion point correctly in editable text that avoids floating elements
683
684         Note: I strongly suspect this bug blocks a complete solution to this other Tiger/P2:
685         <rdar://problem/4055748> AX: Dictionary pop-up panel shows at wrong place on specific parts of particular pages
686
687         * khtml/rendering/render_text.cpp:
688         (RenderText::caretRect): Change the y-coordinate used to calculate the available width for a line. Height is wrong.
689         Top of the box containing the text where the click is done is correct. Also, add in the x-offset for the start
690         of the text box when calculating the available width. If this text box is avoiding a float at the y-coordinate
691         for the relevant box, failure to add in the amount of float-avoidance will make the text at the coordinates
692         greater than end-of-line minus float-avoidance ineligible for caret placement.
693
694 2005-03-19  Darin Adler  <darin@apple.com>
695
696         Reviewed by Ken.
697
698         - fixed <rdar://problem/4057594> REGRESSION (125-406): Unrepro crash in HTMLTokenizer::allDataProcessed after hitting Back button
699
700         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::allDataProcessed):
701         To get the part safely after calling end, save a guarded pointer to the view.
702         The old way could end trying to call a virtual function a part that was destroyed.
703
704 2005-03-19  Maciej Stachowiak  <mjs@apple.com>
705
706         Reviewed by Darin.
707
708         <rdar://problem/4053506> Pasting Tables and Cells in Mail does not allow editing before or after
709         <rdar://problem/4005954> REGRESSION (Mail): After copy/paste of content containing list element cannot go back to entering text at left side of page
710         
711         * khtml/editing/htmlediting.cpp:
712         (khtml::maxDeepOffset):
713         (khtml::CompositeEditCommand::removeFullySelectedNodePreservingPosition):
714         (khtml::CompositeEditCommand::removeChildrenInRangePreservingPosition):
715         (khtml::CompositeEditCommand::removeNodePreservingPosition):
716         (khtml::CompositeEditCommand::insertBlockPlaceholder):
717         (khtml::CompositeEditCommand::appendBlockPlaceholder):
718         (khtml::CompositeEditCommand::forceBlockPlaceholder):
719         (khtml::CompositeEditCommand::addBlockPlaceholderIfNeeded):
720         (khtml::isSpecialElement):
721         (khtml::isFirstVisiblePositionInSpecialElementInFragment):
722         (khtml::positionBeforePossibleContainingSpecialElement):
723         (khtml::positionAfterPossibleContainingSpecialElement):
724         (khtml::ApplyStyleCommand::applyInlineStyle):
725         (khtml::DeleteSelectionCommand::initializePositionData):
726         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
727         (khtml::DeleteSelectionCommand::handleGeneralDelete):
728         (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
729         (khtml::DeleteSelectionCommand::doApply):
730         (khtml::InsertParagraphSeparatorCommand::doApply):
731         (khtml::ReplacementFragment::ReplacementFragment):
732         (khtml::ReplaceSelectionCommand::doApply):
733         * khtml/editing/htmlediting.h:
734         * khtml/editing/visible_position.cpp:
735         (khtml::isRenderedBR):
736         (khtml::VisiblePosition::initDownstream):
737         (khtml::isLastVisiblePositionInBlock):
738         * khtml/rendering/render_line.cpp:
739         (khtml::RootInlineBox::closestLeafChildForXPos):
740         * khtml/xml/dom_nodeimpl.cpp:
741         (NodeImpl::isBlockFlowOrTable):
742         (NodeImpl::isEditableBlock):
743         (NodeImpl::enclosingBlockFlowOrTableElement):
744         * khtml/xml/dom_nodeimpl.h:
745         * khtml/xml/dom_position.cpp:
746         (DOM::Position::upstream):
747         (DOM::Position::downstream):
748         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-003-expected.txt:
749         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-004-expected.txt:
750         * layout-tests/editing/deleting/delete-select-all-001-expected.txt:
751         * layout-tests/editing/deleting/delete-select-all-003-expected.txt:
752         * layout-tests/editing/inserting/insert-3786362-fix-expected.txt:
753
754 2005-03-19  John Sullivan  <sullivan@apple.com>
755
756         Reviewed by Darin.
757         
758         - fixed <rdar://problem/4058740> Crash (nil-deref) editing Mail reply 
759         message in KWQKHTMLPart::fontForSelection (MailViewer-723)
760
761         * kwq/KWQKHTMLPart.mm:
762         (KWQKHTMLPart::fontForSelection):
763         Add nil check to loop. It shouldn't be necessary, but this crash trace seems to be
764         running into it. We're not completely certain, but the check is harmless at worst.
765
766 === Safari-408 ===
767
768 2005-03-18  David Harrison  <harrison@apple.com>
769
770         Reviewed by Darin.
771         
772         <rdar://problem/3584942> AX: Safari Accessibility parent-child mismatch
773         
774         Also changed WebKit.
775
776         * kwq/KWQAccObject.mm:
777         (-[KWQAccObject rendererForView:]):
778         New to cover both the WebCore and WebKit NSViews.
779         
780         (-[KWQAccObject _accessibilityParentForSubview:]):
781         Use rendererForView.
782         
783         * kwq/WebCoreFrameView.h:
784         Add WebCoreBridgeHolder protocol to get access to WebKit NSViews.
785
786 2005-03-18  David Harrison  <harrison@apple.com>
787
788         Reviewed by Darin, Ken.
789
790         <rdar://problem/3735625> AX: add AXPress action if an element has an onclick handler
791
792         * khtml/dom/html_form.cpp:
793         (HTMLInputElement::click):
794         * khtml/html/html_elementimpl.cpp:
795         (HTMLElementImpl::click):
796         (HTMLElementImpl::accessKeyAction):
797         * khtml/html/html_elementimpl.h:
798         * khtml/html/html_formimpl.cpp:
799         (DOM::HTMLFormElementImpl::submitClick):
800         (DOM::HTMLButtonElementImpl::click):
801         (DOM::HTMLButtonElementImpl::accessKeyAction):
802         (DOM::HTMLInputElementImpl::click):
803         (DOM::HTMLInputElementImpl::accessKeyAction):
804         (DOM::HTMLInputElementImpl::defaultEventHandler):
805         (DOM::HTMLLabelElementImpl::accessKeyAction):
806         (DOM::HTMLSelectElementImpl::accessKeyAction):
807         (DOM::HTMLTextAreaElementImpl::accessKeyAction):
808         * khtml/html/html_formimpl.h:
809         * khtml/html/html_inlineimpl.cpp:
810         (HTMLAnchorElementImpl::defaultEventHandler):
811         (HTMLAnchorElementImpl::accessKeyAction):
812         * khtml/html/html_inlineimpl.h:
813         * khtml/rendering/render_form.cpp:
814         (RenderFileButton::click):
815         * khtml/rendering/render_form.h:
816         * khtml/xml/dom_docimpl.cpp:
817         (DocumentImpl::defaultEventHandler):
818         * khtml/xml/dom_elementimpl.h:
819         (DOM::ElementImpl::accessKeyAction):
820         * kwq/DOMHTML.mm:
821         (-[DOMHTMLInputElement click]):
822         * kwq/KWQButton.h:
823         * kwq/KWQButton.mm:
824         (QButton::click):
825         * kwq/KWQFileButton.h:
826         * kwq/KWQFileButton.mm:
827         (KWQFileButton::click):
828         
829         Add accessKeyAction parameter about whether to limit to HTMLElementImpl subclasses that JavaScript wants, or to apply to others as well.
830         
831         Add click() parameter about whether to send the mousedown and mouseup events in addition to the click event.
832         
833         * kwq/KWQAccObject.mm:
834         (-[KWQAccObject mouseButtonListener]):
835         Locate a mousedown, mouseup, or click handler in the current element and its ancestors.
836         
837         (-[KWQAccObject actionElement]):
838         (-[KWQAccObject accessibilityIsIgnored]):
839         (-[KWQAccObject accessibilityPerformAction:]):
840         Consider mouseButtonListener.
841
842 2005-03-18  John Sullivan  <sullivan@apple.com>
843
844         Reviewed by Darin.
845         
846         - fixed <rdar://problem/4002164> maps that include start and end 
847         location don't print right from maps.google.com
848
849         I thought I checked this in yesterday but a ChangeLog conflict aborted my checkin
850         without me noticing.
851
852         * khtml/rendering/render_style.cpp:
853         (RenderStyle::diff):
854         flag name changed from _should_correct_text_color to _force_backgrounds_to_white
855         
856         * khtml/rendering/render_style.h:
857         (khtml::RenderStyle::InheritedFlags::operator==):
858         flag name changed from _should_correct_text_color to _force_backgrounds_to_white
859         (khtml::RenderStyle::setBitDefaults):
860         ditto
861         (khtml::RenderStyle::forceBackgroundsToWhite):
862         ditto, and method name changed too
863         (khtml::RenderStyle::setForceBackgroundsToWhite):
864         ditto
865         
866         * khtml/rendering/render_text.cpp:
867         (InlineTextBox::paint):
868         updated for name change; also, compare text against white instead of current bg color
869         because we no longer actually modify the bg color (previously we would always set
870         the bg color to white, so the result is the same)
871         
872         * khtml/xml/dom_docimpl.cpp:
873         (DocumentImpl::recalcStyle):
874         updated for name change
875         
876         * kwq/WebCoreBridge.mm:
877         (-[WebCoreBridge styleSheetForPrinting]):
878         removed this method
879         (-[WebCoreBridge reapplyStylesForDeviceType:]):
880         removed the code that called styleSheetForPrinting; we no longer use a stylesheet
881         for this behavior.
882
883         * khtml/rendering/render_box.cpp:
884         (RenderBox::paintBackgroundExtended):
885         If forceBackgroundsToWhite flag is set, convert background images and
886         background colors to white background color with no background image.
887         
888 2005-03-18  Ken Kocienda  <kocienda@apple.com>
889
890         Reviewed by John
891
892         Fix for this bug:
893         
894         <rdar://problem/4056718> Pasting quotes the entire message
895
896         * khtml/editing/htmlediting.cpp:
897         (khtml::ReplaceSelectionCommand::doApply): After pasting, nodes are moved to the block containing
898         the end of the pasted content in certain cases. This move logic used to stop once it moved all the
899         siblings of the node following the last node of the pasted-in content. This means that block elements
900         could get moved, and if the pasted-in content included a mail blockquote, this could result in
901         one quote level getting added. The fix is to stop the move of nodes once a <br>, block element, or
902         <table> is seen. This only affected one of the many test cases we have for such scenarios, and 
903         the change to that result makes sense given the code change.
904         * layout-tests/editing/pasteboard/paste-text-003-expected.txt: This test result changed in a way that
905         adequately tests the behavior change, so I did not add a new test.
906
907 2005-03-17  Ken Kocienda  <kocienda@apple.com>
908
909         Reviewed by Harrison
910
911         Fix for this bug:
912         
913         <rdar://problem/4051809> 8A413: Cursor-up in a mail message sometimes gets stuck (with specific reproducible case)
914
915         * khtml/rendering/render_text.cpp:
916         (RenderText::positionForCoordinates): Consider two lines: line-above and line-below. If the caret position in line-below
917         was at an x coordinate between half way through the x coordinate of the last character on the line-above and the
918         end of that same character, this bug would happen since the positioning code would assume that it could create a 
919         VisiblePosition with a DOWNSTREAM affinity. Now, I check to see if the character position on the line-above is the 
920         last character on that line, and if it is, I use UPSTREAM as the affinity.
921
922 === Safari-407 ===
923
924 2005-03-17  David Harrison  <harrison@apple.com>
925
926         Reviewed by Darin, Ken.
927
928         * khtml/editing/htmlediting.cpp:
929         (khtml::EditCommandPtr::setEndingSelection):
930         Fixed typo so that it calls setEndingSelection rather than setStartingSelection.
931         Commented out this unused method, tho, since this is late in Tiger.  Proved unused by successful build after temporarily removing method declaration or implemenation.
932
933 2005-03-16  Kevin Decker  <kdecker@apple.com>
934
935         Reviewed by mjs.
936
937         Fixed <rdar://problem/4046665> REGRESSION (403-405): mypage.apple.com login does not work (hits assertion in Development build)
938
939         * kwq/WebCoreBridge.mm:
940         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Check always came back false when callers would send a nil NSURL to this method. Now we allow the empty url cases, eg., <frame src="">
941
942 2005-03-16  Darin Adler  <darin@apple.com>
943
944         Reviewed by Maciej.
945
946         - fixed <rdar://problem/4045203> REGRESSION (125-188): Redundant JS imports crash Safari
947
948         * khtml/html/htmltokenizer.h: Take inWRite bool out of NDEBUG ifdef.
949         * khtml/html/htmltokenizer.cpp:
950         (khtml::HTMLTokenizer::HTMLTokenizer): Take inWrite bool management code out of NDEBUG ifdef.
951         (khtml::HTMLTokenizer::write): Ditto. Don't call end if inWrite is true, since it will be called
952         when you return to the body of the outer write() call.
953         (khtml::HTMLTokenizer::allDataProcessed): Don't call end() if inWrite is true for the same reason.
954         (khtml::HTMLTokenizer::finish): Ditto.
955
956         * kwq/KWQWidget.mm: (QWidget::getOuterView): Removed bogus assertion that has been vexing us of late.
957
958 2005-03-16  David Harrison  <harrison@apple.com>
959
960         Reviewed by me (written by Patti Yeh).
961
962         * kwq/KWQAccObject.mm:
963         (-[KWQAccObject doAXNextWordEndTextMarkerForTextMarker:]):
964         Use LeftWordIfOnBoundary instead of RightWordIfOnBoundary.
965
966         (-[KWQAccObject doAXPreviousWordStartTextMarkerForTextMarker:]):
967         Use RightWordIfOnBoundary instead of LeftWordIfOnBoundary.
968
969 2005-03-16  David Harrison  <harrison@apple.com>
970
971         Reviewed by Maciej.
972
973         <rdar://problem/4054590> AX: Dictionary panel does not work when page is scrolled on Safari
974
975         * kwq/KWQAccObject.mm:
976         (-[KWQAccObject doAXTextMarkerForPosition:]):
977         Add in the view's contentsX and contentsY to the point.
978
979 2005-03-16  David Harrison  <harrison@apple.com>
980
981         Reviewed by Maciej.
982
983         <rdar://problem/4048506> Deleting from beginning of editable div deletes other document elements
984         
985         Also changed WebKit.
986         
987         * khtml/editing/visible_units.h:
988         * khtml/editing/visible_units.cpp:
989         (khtml::startOfEditableContent):
990         (khtml::endOfEditableContent):
991         (khtml::inSameEditableContent):
992         (khtml::isStartOfEditableContent):
993         (khtml::isEndOfEditableContent):
994         New.
995         
996         * kwq/WebCoreBridge.h:
997         * kwq/WebCoreBridge.mm:
998         (-[WebCoreBridge canDeleteRange:]):
999         New.
1000
1001 2005-03-16  Ken Kocienda  <kocienda@apple.com>
1002
1003         Reviewed by Darin
1004
1005         Fix for this bug:
1006         
1007         <rdar://problem/4042935> undo doesn't work properly during inline input
1008
1009         * kwq/WebCoreBridge.h: Declare new method below.
1010         * kwq/WebCoreBridge.mm:
1011         (-[WebCoreBridge replaceMarkedTextWithText:]): New method. Wraps calls to TypingCommand::deleteKeyPressed and
1012         TypingCommand::insertText to map the way that international text input works onto the typing undo system.
1013
1014 2005-03-16  David Harrison  <harrison@apple.com>
1015
1016         Reviewed by Darin.
1017
1018         <rdar://problem/4044336> REGRESSION (8A398-8A409): Option-Delete also deletes space to left of deleted word
1019
1020         * khtml/editing/htmlediting.cpp:
1021         (khtml::DeleteSelectionCommand::initializePositionData):
1022         - skip smart delete if the selection to delete already starts or ends with whitespace
1023         
1024         * khtml/khtml_part.cpp:
1025         (KHTMLPart::handleMousePressEventDoubleClick):
1026         - preserve selection on double-click when range is already selected
1027         
1028         * khtml/xml/dom_position.cpp:
1029         (DOM::Position::leadingWhitespacePosition):
1030         (DOM::Position::trailingWhitespacePosition):
1031         - fix considerNonCollapsibleWhitespace action (logic was reversed)
1032         - add non-breaking space to the non-collapsable ones
1033         
1034         * kwq/WebCoreBridge.mm:
1035         (-[WebCoreBridge rangeByExpandingSelectionWithGranularity:]):
1036         (-[WebCoreBridge rangeByAlteringCurrentSelection:direction:granularity:]):
1037         - these methods do not set the selection, so remove calls to setSelectionGranularity
1038           
1039         (-[WebCoreBridge alterCurrentSelection:direction:granularity:]):
1040         (-[WebCoreBridge alterCurrentSelection:verticalDistance:]):
1041         - set the granularity back to character
1042         - the one exception is that we need to keep word granularity
1043           to preserve smart delete behavior when extending by word
1044
1045 2005-03-15  Maciej Stachowiak  <mjs@apple.com>
1046
1047         Reviewed by John.
1048
1049         <rdar://problem/4053266> Pressing return a few times right after a link makes the new blank lines part of the link
1050         
1051         * khtml/editing/htmlediting.cpp:
1052         (khtml::InsertLineBreakCommand::doApply): Use
1053         positionOutsideContainingSpecialElement in the right two places.
1054         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
1055
1056         - move all these helper functions higher in the file
1057         
1058         * khtml/editing/htmlediting.cpp:
1059         (khtml::isSpecialElement):
1060         (khtml::isFirstVisiblePositionInSpecialElement):
1061         (khtml::positionBeforeNode):
1062         (khtml::positionBeforeContainingSpecialElement):
1063         (khtml::maxRangeOffset):
1064         (khtml::isLastVisiblePositionInSpecialElement):
1065         (khtml::positionAfterNode):
1066         (khtml::positionAfterContainingSpecialElement):
1067         (khtml::positionOutsideContainingSpecialElement):
1068
1069 2005-03-14  Maciej Stachowiak  <mjs@apple.com>
1070
1071         Reviewed by Ken.
1072
1073         <rdar://problem/4049925> Pasting right after a link makes pasted content part of the link (without visible style change)
1074         
1075         * khtml/editing/htmlediting.cpp:
1076         (khtml::positionOutsideContainingSpecialElement): made a helper
1077         function that computes a position outside the outermost containing
1078         special element if the passed in position is right at the start or
1079         end of it
1080         (khtml::InsertTextCommand::prepareForTextInsertion): use new helper here
1081         (khtml::ReplaceSelectionCommand::doApply): use it here too: this is the fix
1082         (khtml::positionBeforeNode): made static
1083         (khtml::positionBeforeContainingSpecialElement): made static
1084         (khtml::positionAfterNode): made static
1085         (khtml::positionAfterContainingSpecialElement): made static
1086
1087 2005-03-15  Richard Williamson   <rjw@apple.com>
1088
1089         Fixed <rdar://problem/4053658> Crash getting direction at maps.google.com
1090
1091         Add non nil style() check.
1092
1093         Reviewed by Dave Harrison.
1094
1095         * khtml/rendering/render_table.cpp:
1096         (RenderTableCell::collapsedRightBorder):
1097
1098 2005-03-15  Kevin Decker  <kdecker@apple.com>
1099
1100         Reviewed by John
1101         
1102         Fixed: <rdar://problem/4041374> REGRESSION (185-186): unload handlers (at least those added with addEventListener) are broken
1103
1104         The reason why UNLOAD_EVENT wouldn't dispatch was because the code would delete all event listeners at the detach() phase which is prior to closeURL(). 
1105
1106         This fixes a recent regression from:
1107
1108  <rdar://problem/3977973> pages on ebay leak referenced JavaScript objects -- over time browsing becomes super-slow
1109
1110         * khtml/khtml_part.cpp:
1111         (KHTMLPart::closeURL): After dispatching event handlers, go ahead and remove them from the DOM. 
1112         * khtml/xml/dom_docimpl.cpp:
1113         (DocumentImpl::detach): Took out the call to removeAllEventListenersFromAllNodes(). If we remove all event listeners here then when KHTMLPart::closeURL() checks for even listeners, it will never have any because they'll already be gone. 
1114
1115 2005-03-15  Ken Kocienda  <kocienda@apple.com>
1116
1117         Reviewed by Vicki
1118
1119         Fox for this bug:
1120         
1121         <rdar://problem/4052642> Each delete keystroke is in its own undo group; not included in undo group with other typing
1122
1123         Calling -[WebCore setSelectedDOMRange:range affinity:] had the result of "closing" any active set of typing
1124         keystrokes grouped together in a single undo operation. A change on 27 Jan in WebKit to change the way delete
1125         keystrokes are handled made this feature regress. Previous to that change, the backwards delete
1126         key went through separate code that is no longer in the tree that did not set the selection in the way
1127         it is done now.
1128         
1129         The solution is to add an extra argument to the set-selection call. The WebCoreBridge now offers this method:
1130         -[WebCore setSelectedDOMRange:range affinity:closeTyping:]. Now, callers must indicate whether setting the 
1131         selection will act to close typing or not.
1132
1133         * kwq/WebCoreBridge.h: Changed header accordingly to change method shown below.
1134         * kwq/WebCoreBridge.mm:
1135         (-[WebCoreBridge setSelectedDOMRange:affinity:closeTyping:]): Added closeTyping argument to this method.
1136
1137 2005-03-15  John Sullivan  <sullivan@apple.com>
1138
1139         Reviewed by Vicki.
1140         
1141         - fixed <rdar://problem/4052246> crash in KWQKHTMLPart::createPart() trying to display local file in frame
1142
1143         * kwq/KWQKHTMLPart.mm:
1144         (KWQKHTMLPart::createPart):
1145         Check part for nil before trying to ref. This was probably a longstanding code flaw revealed by
1146         the recent security fix.
1147
1148 2005-03-15  Kevin Decker  <kdecker@apple.com>
1149
1150         Reviewed by Ken and Maciej.
1151
1152         New fix for <rdar://problem/3667701> crash in KHTMLPart::jScriptEnabled()
1153         
1154         The tokenizer has buffers which mean parsing can continue even after loading is supposed to be stopped. If the loading process was aborted, the tokenizer should abort, too.
1155
1156         * khtml/html/htmltokenizer.cpp:
1157         (khtml::HTMLTokenizer::HTMLTokenizer): Initialize loadStopped to false.
1158         (khtml::HTMLTokenizer::write): Go ahead and bail out if loadStopped is true. 
1159         (khtml::HTMLTokenizer::processToken):
1160         * khtml/html/htmltokenizer.h: Added loadStopped flag. Changed the view pointer from a standard pointer to a QGuardedPtr.  This fixes the crash.  Now the tokenizer's handle to the view will now automatically nil-out and never dangle.
1161         * khtml/khtml_part.cpp:
1162         (KHTMLPart::closeURL): Notify the tokenizer to stop parsing. 
1163         * khtml/xml/xml_tokenizer.cpp:
1164         (khtml::XMLTokenizer::XMLTokenizer): Initialize loadStopped to false.
1165         * khtml/xml/xml_tokenizer.h:
1166         (khtml::Tokenizer::stopParsing): Added. 
1167
1168 2005-03-14  David Harrison  <harrison@apple.com>
1169
1170         Reviewed by Darin, Maciej.
1171
1172         <rdar://problem/4046103> REGRESSION (Mail): clicking after style change sets insertion point incorrectly
1173         
1174         Also fixes crash by adding nil check.
1175
1176         * khtml/editing/htmlediting.cpp:
1177         (khtml::MoveSelectionCommand::doApply):
1178         Check the node for nil.
1179         
1180         * khtml/khtml_part.cpp:
1181         (KHTMLPart::khtmlMouseReleaseEvent):
1182         Use the node from the event rather than from the selection.
1183
1184 2005-03-14  Darin Adler  <darin@apple.com>
1185
1186         Reviewed by Harrison.
1187
1188         - fixed <rdar://problem/4049776> Seed: Mail: Disable spellcheck leaves red artifacts
1189
1190         * khtml/xml/dom_docimpl.cpp:
1191         (DocumentImpl::DocumentImpl): Set markers list to be "auto-delete" so they don't all leak.
1192         (DocumentImpl::removeMarker): Remove markers list for a node when the last marker is removed
1193         for that node. Otherwise, we can have empty marker lists for each node forever until the
1194         document goes away.
1195         (DocumentImpl::removeAllMarkers): Added code to dirty the markers.
1196         (DocumentImpl::shiftMarkers): Remove unneeded empty check.
1197
1198         * kwq/WebCoreBridge.h: Added unmarkAllMisspellings for WebKit.
1199         * kwq/WebCoreBridge.mm: (-[WebCoreBridge unmarkAllMisspellings]): Added. Calls removeAllMarkers.
1200
1201 2005-03-14  Richard Williamson   <rjw@apple.com>
1202
1203         Fixed <rdar://problem/4027928> Tiger_8A394:Acrobat crashes while tried to remove the subscription errors by clicking on "Would you like to remove the subscription" from Tracker details view pane
1204
1205         A document may be deleted as a consequence of handling an event,
1206         as was the case with Acrobat.app.  Ensure that the document is still valid
1207         before passing the event on for further handling.
1208
1209         * khtml/xml/dom_nodeimpl.cpp:
1210         (NodeImpl::dispatchUIEvent):
1211
1212 2005-03-14  Ken Kocienda  <kocienda@apple.com>
1213
1214         Reviewed by me
1215
1216         Added a couple of comments about setChanged() to this code based on my experiences with 4047028.
1217
1218         * khtml/css/css_valueimpl.cpp:
1219         (DOM::CSSMutableStyleDeclarationImpl::addParsedProperties)
1220         (DOM::CSSMutableStyleDeclarationImpl::merge)
1221
1222 2005-03-14  Ken Kocienda  <kocienda@apple.com>
1223
1224         Reviewed by John
1225
1226         Fix for this bug:
1227         
1228         <rdar://problem/4047028> Changing quote levels on stylized text causes it to be sent as colored (Blue). Tiger8A410
1229
1230         * khtml/css/css_valueimpl.cpp:
1231         (DOM::CSSMutableStyleDeclarationImpl::removePropertiesInSet): This function now calls setChanged() at the 
1232         end of its loop if any properties were removed. This makes the style system update correctly in response
1233         to changes made by this function. The code to paste removes style from the pasted content in a 
1234         preliminary step, and the fact that the style system did not update properly left unwanted color
1235         declarations in the document.
1236
1237 2005-03-14  Vicki Murley  <vicki@apple.com>
1238
1239         - roll out this change for now, since it was denied by CCC
1240
1241     2005-03-11  David Harrison  <harrison@apple.com>
1242         
1243         Reviewed by Darin.
1244         
1245         <rdar://problem/4046602> WebCore invokes undefined behavior when the spell checker isn't running
1246
1247         * kwq/KWQKHTMLPart.mm:
1248         (KWQKHTMLPart::advanceToNextMisspelling):
1249         (KWQKHTMLPart::markMisspellings):
1250         Nil check checker.
1251
1252 2005-03-14  Ken Kocienda  <kocienda@apple.com>
1253
1254         Reviewed by John
1255
1256         Fix for this bug:
1257         
1258         <rdar://problem/4050403> Mail crashes after pasting and deleting the content of one Excel cell
1259
1260         * khtml/editing/htmlediting.cpp:
1261         (khtml::DeleteSelectionCommand::handleGeneralDelete): Add some null checks to the code. This fixes the crash, although
1262         following the steps described in the bug by John Sullivan on 3/14/05 at 10:49 AM will leave us with a "blank line" in 
1263         the document that cannot be removed (this is actually an empty table). This is undesirable, however, work Maciej is
1264         doing to fix the general-case problem of trying to edit constructs we do not handle well in editing should fix this
1265         particular case, making the deletion of this "blank line" possible. Maciej is doing this work as part of this bug:
1266         <rdar://problem/4036051> Hard to select (and thus delete) an IFRAME in an editable WebView
1267
1268 2005-03-14  Ken Kocienda  <kocienda@apple.com>
1269
1270         Reviewed by Darin
1271
1272         Fix for this bug:
1273         
1274         <rdar://problem/4029632> Mail crashes in DOM::NodeImpl::isBlockFlow() after pasting text with alignment style and BR element from Safari
1275         
1276         The problem is that removeInlineStyle() can remove nodes, and if either the start or end node of the
1277         selection at the time of the call to removeInlineStyle() was in a node that got removed, bad things
1278         would happen. The fix is described below.
1279
1280         * khtml/editing/htmlediting.cpp:
1281         (khtml::maxRangeOffset): Moved this static function to a different place in the file so the code below can use it.
1282         (khtml::ApplyStyleCommand::applyInlineStyle): Calling removeInlineStyle() now has the side effect of 
1283         setting the command's ending selection. Now resets start and end using the ending selection after the call to
1284         removeInlineStyle() as it is done elsewhere in this function.
1285         (khtml::ApplyStyleCommand::removeInlineStyle): Track the removal of the start or end node based on
1286         the positions passed in. If either the start or the end node is removed as part of style removal, 
1287         set an appropriate replacement start or end that is still in the document.
1288
1289 === Safari-406 ===
1290
1291 2005-03-14  Ken Kocienda  <kocienda@apple.com>
1292
1293         Reviewed by Darin
1294
1295         I need to roll out Kevin's change to fix 3667701. It breaks contextual fragments, and hence breaks
1296         paste in editing (among other things).
1297
1298         * khtml/html/htmltokenizer.cpp: Roll out recent change.
1299         (khtml::HTMLTokenizer::write) 
1300         * khtml/html/htmltokenizer.h: Ditto.
1301
1302 2005-03-13  Darin Adler  <darin@apple.com>
1303
1304         Reviewed by Ken and Maciej.
1305
1306         - fixed <rdar://problem/4049040> REGRESSION (403-405): security check prevents user stylesheet from loading (Dictionary.app doesn't work at all!)
1307
1308         * kwq/WebCoreBridge.mm: (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Changed to give "applewebdata:"
1309         documents the same privileges to open local files that "file:" documents have.
1310
1311 2005-03-13  Kevin Decker  <kdecker@apple.com>
1312
1313         Reviewed by mjs.
1314         
1315         Fixed: <rdar://problem/3667701> crash in KHTMLPart::jScriptEnabled()
1316         
1317         The problem here was that the tokenizer would continue to receive chunks of data from the loader already
1318         after the view and part had been destroyed.  Situations like this could arise when clicking on another link 
1319         while still loading the current view, or during self test where we rapidly open, load, and close browser
1320         windows very fast. 
1321
1322         * khtml/html/htmltokenizer.cpp: 
1323         (khtml::HTMLTokenizer::write): Simple nil check against the view. 
1324         * khtml/html/htmltokenizer.h: Changed the view pointer from a standard pointer to a QGuardedPtr.  The tokenizer's
1325         handle to the view will now automatically nil-out and never dangle.
1326
1327 2005-03-13  Darin Adler  <darin@apple.com>
1328
1329         Reviewed by John and Ken.
1330
1331         - fixed <rdar://problem/4044347> REGRESSION (Mail): Control-K in particular message moves insertion point to previous line
1332
1333         Tweaked the deleting code, and added three new deleting layout tests to confirm the new code works.
1334
1335         * khtml/editing/htmlediting.cpp:
1336         (khtml::DeleteSelectionCommand::handleSpecialCaseBRDelete): Removed special case with comment that said it was
1337         for the case where a "selection contains only a BR right after a block ended". This code was being triggered in
1338         more cases than just that one, and in all the cases I tested, the general delete code works fine.
1339         (khtml::DeleteSelectionCommand::handleGeneralDelete): Changed the code that decides whether to delete an entire
1340         block to understand the case where the end block is outside the start block, but contains the start block.
1341         In that case, we want to delete the entire block. Not deleting the block was causing us to delete just the <br>,
1342         and not the enclosing <div> in the case in the bug.
1343
1344         * layout-tests/editing/deleting/delete-line-015-expected.txt: Added.
1345         * layout-tests/editing/deleting/delete-line-015.html: Added.
1346         * layout-tests/editing/deleting/delete-line-016-expected.txt: Added.
1347         * layout-tests/editing/deleting/delete-line-016.html: Added.
1348         * layout-tests/editing/deleting/delete-line-017-expected.txt: Added.
1349         * layout-tests/editing/deleting/delete-line-017.html: Added.
1350         * layout-tests/editing/style/smoosh-styles-002-expected.txt: Updated to improved results. With the code change, the deletion
1351         now deletes more than it used to. The old results had an empty text node and <h1> element that were both 0-sized, and now
1352         we delete both of those.
1353
1354 2005-03-13  Darin Adler  <darin@apple.com>
1355
1356         - fixed <rdar://problem/4049172> REGRESSION (403-405): Gmail: text box in "Invite a friend" section overlaps other sections
1357
1358         Rolled out fix for <rdar://problem/3952698> Function buttons do not display properly with Telia Webmail
1359
1360         * khtml/rendering/render_replaced.cpp: (RenderReplaced::calcMinMaxWidth): Back to previous version of this file.
1361
1362 2005-03-12  Maciej Stachowiak  <mjs@apple.com>
1363
1364         Reviewed by Adele.
1365
1366         <rdar://problem/4046144> RSS pages leave a hole in local file security policy (need to revert feed: exemption)
1367         
1368         * kwq/WebCoreBridge.mm:
1369         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Revert
1370         emergency workaround for Safari RSS, now that a new Syndication
1371         has been submitted.
1372
1373 2005-03-11  Maciej Stachowiak  <mjs@apple.com>
1374
1375         Reviewed by Kevin.
1376
1377         <rdar://problem/4026787> text typed after a link (pasted or Mail Link to this Page) is part of the link, underlined and colored blue
1378         
1379         The concept of this change is every time you type at the very
1380         start or very end of a link (even if nested in further inner
1381         elements), the typed text goes outside the link instead of inside.
1382         
1383         * khtml/editing/htmlediting.cpp:
1384         (khtml::InsertTextCommand::prepareForTextInsertion): Check whether
1385         we are at the first visible position or last visible position of a
1386         special element. For now this only includes HTML A elements that
1387         are links (i.e. they have an href).
1388         (khtml::isSpecialElement): Helper function that identifies special
1389         elements (for now only links).
1390         (khtml::isFirstVisiblePositionInSpecialElement): Checks if a given DOM
1391         position is equivalent to the first visible position in some containing 
1392         editable special element.
1393         (khtml::positionBeforeNode): Returns the DOM position immediately
1394         before a node.
1395         (khtml::positionBeforeContainingSpecialElement): Gives a DOM
1396         position immediately before the outermost editable containing
1397         special element where the passed-in position is equivalent to the
1398         first visible position.
1399         (khtml::maxRangeOffset): Helper to get the maximum allowed
1400         range/position offset for a node, does the right thing based on
1401         whether the node would use a character offset or child offset.
1402         (khtml::isLastVisiblePositionInSpecialElement): Similar to above,
1403         but for end of node instead of start.
1404         (khtml::positionAfterNode): Ditto.
1405         (khtml::positionAfterContainingSpecialElement): Ditto.
1406
1407         Some layout tests changed - I looked over all the diffs and found
1408         that the only changes were "junk nodes" like empty spans and text
1409         nodes moving from one spot in the tree to another. These changes
1410         are all harmless and do not affect layout or future editing.
1411
1412         * layout-tests/editing/inserting/typing-003-expected.txt:
1413         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt:
1414         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt:
1415         * layout-tests/editing/style/remove-underline-after-paragraph-expected.txt:
1416         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold-expected.txt:
1417         * layout-tests/editing/style/remove-underline-expected.txt:
1418         * layout-tests/editing/style/remove-underline-from-stylesheet-expected.txt:
1419         * layout-tests/editing/style/remove-underline-in-bold-expected.txt:
1420         * layout-tests/editing/style/typing-style-003-expected.txt:
1421         * layout-tests/editing/style/unbold-in-bold-expected.txt:
1422         * layout-tests/editing/style/underline-expected.txt:
1423
1424 2005-03-11  Adele Amchan  <adele@apple.com>
1425
1426         backing out fix for <rdar://problem/4021711> REGRESSION (125-188): blank pages when browsing forum at cooperativeresearch.org - cached external script problem
1427
1428         This caused the following regressions (that we know of): 
1429         <rdar://problem/4047445> REGRESSION (Safari-400-403?): Some or all page contents sometimes don't appear (macworld.com)
1430         <rdar://problem/4046153> 8a409: Problem loading Citibank page in Safari 2 (403)
1431         <rdar://problem/4047801> REGRESSION (402-403): .Mac homepage links don't work
1432
1433         * khtml/html/htmltokenizer.cpp:
1434         (khtml::HTMLTokenizer::scriptHandler):
1435
1436 2005-03-11  David Harrison  <harrison@apple.com>
1437
1438         Reviewed by Darin.
1439
1440         <rdar://problem/4046602> WebCore invokes undefined behavior when the spell checker isn't running
1441
1442         * kwq/KWQKHTMLPart.mm:
1443         (KWQKHTMLPart::advanceToNextMisspelling):
1444         (KWQKHTMLPart::markMisspellings):
1445         Nil check checker.
1446
1447 2005-03-11  Ken Kocienda  <kocienda@apple.com>
1448
1449         Reviewed by me
1450
1451         * ForwardingHeaders/editing/visible_units.h: Added.
1452
1453 2005-03-11  Ken Kocienda  <kocienda@apple.com>
1454
1455         Reviewed by John
1456
1457         Fix for this bug:
1458         
1459         <rdar://problem/4045521> Hitting return key with full line selected does not add blank line as it should
1460
1461         * khtml/editing/htmlediting.cpp:
1462         (khtml::InsertParagraphSeparatorCommand::doApply): Removed some "special-case" code from this 
1463         function that would look for a selection that started and ended in a different block, and would
1464         then bail right after the deletion of the selection without inserting a paragraph separator.
1465         This was just wrong. So, the code change is removal only. When the general-case code runs instead
1466         of the erroneous special-case code, the bug goes away.
1467         
1468         New tests:
1469         
1470         * layout-tests/editing/inserting/return-key-with-selection-001-expected.txt: Added.
1471         * layout-tests/editing/inserting/return-key-with-selection-001.html: Added.
1472         * layout-tests/editing/inserting/return-key-with-selection-002-expected.txt: Added.
1473         * layout-tests/editing/inserting/return-key-with-selection-002.html: Added.
1474         * layout-tests/editing/inserting/return-key-with-selection-003-expected.txt: Added.
1475         * layout-tests/editing/inserting/return-key-with-selection-003.html: Added.
1476
1477 2005-03-11  David Harrison  <harrison@apple.com>
1478
1479         Reviewed by Darin.
1480
1481         <rdar://problem/4009446> AX: kAXTextMarkerForPositionParameterizedAttribute not working correctly (required for Dictionary pop-up)
1482
1483         * kwq/KWQAccObject.mm:
1484         (-[KWQAccObject accessibilityAttributeValue:]):
1485         Comment changes.
1486         
1487         (-[KWQAccObject doAXTextMarkerForPosition:]):
1488         Dig into widgets.
1489         
1490         (-[KWQAccObject doAXBoundsForTextMarkerRange:]):
1491         Use the selection's document instead of the top document, to accommodate frames, etc.
1492         
1493         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
1494         Fixed parameter processing to look for NSValue instead of AXValue.
1495
1496 2005-03-11  Ken Kocienda  <kocienda@apple.com>
1497
1498         Reviewed by Harrison
1499
1500         Fix for this bug:
1501         
1502         <rdar://problem/3972665> 8A360: HTML message partially truncated on left hand side, text-indent from Script Editor
1503         
1504         This was fixed, then regressed with Harrison's fix for this bug:
1505         
1506         <rdar://problem/3948453> Can't type accented chars as first character in Stickies widget
1507
1508         * khtml/editing/htmlediting.cpp:
1509         (khtml::ReplaceSelectionCommand::doApply): My now addresses both problems in a way that they no longer
1510         clobber each other.
1511
1512 2005-03-10  Ken Kocienda  <kocienda@apple.com>
1513
1514         Reviewed by John
1515
1516         Fix for these bugs:
1517         
1518         <rdar://problem/4045511> Copying and pasting end-of-paragraph selection puts insertion point in wrong place
1519         <rdar://problem/4045513> Copying and pasting selection starting at end of paragraph can incorrectly remove line break
1520
1521         The copy/paste code before this patch had no notion of a "logical newline" at the start of the selection. We have
1522         had a similar notion for "logical newline" at the end of the selection for quite some time. To fix these bugs, we
1523         need to introduce the same idea for selection starts.
1524
1525         * khtml/editing/htmlediting.cpp:
1526         (khtml::ReplacementFragment::ReplacementFragment): Process the "logical newline" at start as we write it out
1527         in markup. Set the bit we added to this object to signify we have such a newline.
1528         (khtml::ReplaceSelectionCommand::doApply): Many, many changes to introduce the new "logical newline" at start concept.
1529         I also tried to simply the code that sets the start position for inserting content to be pasted. I also improved a
1530         weakness in the smart-paste code. Now, we check before and after the paste for whether we need to add a leading or
1531         trailing space. The code previous to this patch only did a "before" check, with the result that we sometimes added
1532         a second space. In other words, the code did not realize that DOM changes done by pasting could cause formerly
1533         unrendered whitespace to become rendered. Also moved line placeholder clean up code to its own function.
1534         (khtml::ReplaceSelectionCommand::removeLinePlaceholderIfNeeded): New helper that further refines the notion
1535         of when we can remove a line placeholder. The definition is now, "If a line placeholder is at the visible start
1536         and visible end of its line, keep it; otherwise remove it".
1537         * khtml/editing/htmlediting.h: Declare new functions. Rework inlines in ReplacementFragment class to account for
1538         addition of new "logical newline" at start concept.
1539         (khtml::ReplacementFragment::hasInterchangeNewlineAtStart): New accessor.
1540         (khtml::ReplacementFragment::hasInterchangeNewlineAtEnd): Renamed from hasInterchangeNewline(), since before we
1541         only had a bit for the end, hence we did not need to distinguish it from the start.
1542         * khtml/editing/markup.cpp:
1543         (khtml::createMarkup): Added code to detect and write out markup for cases where we have a "logical newline" at start.
1544         * khtml/xml/dom2_rangeimpl.cpp:
1545         (DOM::RangeImpl::startPosition): New helper.
1546         (DOM::RangeImpl::endPosition): Ditto.
1547         * khtml/xml/dom2_rangeimpl.h: Declare new helpers.
1548         
1549         New tests:
1550         * layout-tests/editing/pasteboard/paste-line-endings-001-expected.txt: Added.
1551         * layout-tests/editing/pasteboard/paste-line-endings-001.html: Added.
1552         * layout-tests/editing/pasteboard/paste-line-endings-002-expected.txt: Added.
1553         * layout-tests/editing/pasteboard/paste-line-endings-002.html: Added.
1554         * layout-tests/editing/pasteboard/paste-line-endings-003-expected.txt: Added.
1555         * layout-tests/editing/pasteboard/paste-line-endings-003.html: Added.
1556         * layout-tests/editing/pasteboard/paste-line-endings-004-expected.txt: Added.
1557         * layout-tests/editing/pasteboard/paste-line-endings-004.html: Added.
1558         * layout-tests/editing/pasteboard/paste-line-endings-005-expected.txt: Added.
1559         * layout-tests/editing/pasteboard/paste-line-endings-005.html: Added.
1560         * layout-tests/editing/pasteboard/paste-line-endings-006-expected.txt: Added.
1561         * layout-tests/editing/pasteboard/paste-line-endings-006.html: Added.
1562         * layout-tests/editing/pasteboard/paste-line-endings-007-expected.txt: Added.
1563         * layout-tests/editing/pasteboard/paste-line-endings-007.html: Added.
1564         * layout-tests/editing/pasteboard/paste-line-endings-008-expected.txt: Added.
1565         * layout-tests/editing/pasteboard/paste-line-endings-008.html: Added.
1566         * layout-tests/editing/pasteboard/paste-line-endings-009-expected.txt: Added.
1567         * layout-tests/editing/pasteboard/paste-line-endings-009.html: Added.
1568         * layout-tests/editing/pasteboard/paste-line-endings-010-expected.txt: Added.
1569         * layout-tests/editing/pasteboard/paste-line-endings-010.html: Added.
1570
1571 === Safari-405 ===
1572
1573 2005-03-10  Darin Adler  <darin@apple.com>
1574
1575         Reviewed by Richard.
1576
1577         - fixed <rdar://problem/4037700> Every character typed causes stat call for /usr/share/icu/icudt32b_char.brk
1578
1579         * khtml/rendering/render_text.cpp: (getCharacterBreakIterator): Set boolean "got iterator" to true.
1580
1581 2005-03-10  Darin Adler  <darin@apple.com>
1582
1583         Reviewed by Ken.
1584
1585         - fixed <rdar://problem/4042867> "Bigger" changes the font size of too much text when the selection is on a style-change boundary
1586
1587         * khtml/editing/htmlediting.cpp: (khtml::ApplyStyleCommand::applyRelativeFontStyleChange):
1588         Advance out of the starting text node if we're at the end of it.
1589
1590 2005-03-10  Darin Adler  <darin@apple.com>
1591
1592         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::write): Fixed assertion for nested calls to write.
1593
1594 2005-03-10  David Harrison  <harrison@apple.com>
1595
1596         Reviewed by Darin.
1597
1598         <rdar://problem/4032346> REGRESSION (Mail): changing 1st line of a URL that wraps to two lines doesn't always update 2nd line
1599
1600         * khtml/rendering/bidi.cpp:
1601         (khtml::RenderBlock::matchedEndLine):
1602         Look at first clean line in case line wrap implicitly dirtied it.
1603
1604 2005-03-10  Maciej Stachowiak  <mjs@apple.com>
1605
1606         Reviewed by Vicki.
1607
1608         <rdar://problem/4046018> REGRESSION (TOT): RSS pages don't display anything
1609         
1610         * kwq/WebCoreBridge.mm:
1611         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Exempt
1612         feed: and feeds: pages from the local file security check.
1613
1614 2005-03-10  Darin Adler  <darin@apple.com>
1615
1616         Change written by Steve Peters, reviewed by me.
1617
1618         - fixed <rdar://problem/4045924> improve compareBoundaryPoints to make style changes faster
1619
1620         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::compareBoundaryPoints):
1621         Do early outs in a couple of the loops to make things faster.
1622
1623 2005-03-10  Jens Alfke  <jens@apple.com>
1624
1625         Reviewed by rjw.
1626
1627         Fixes <rdar://problem/4040848> "REGR: Sun security-check demo applet does not load". My earlier fix for 3603191 deferred loading the applet until the </applet> tag is reached, so all <param>s will be available. Unfortunately that meant that if the </applet> tag was missing, the applet would never load at all. So instead, the loading needs to happen when the ID_APPLET tag is popped from the parser stack for any reason.
1628
1629         I've restored the old NodeImpl::closeRenderer() method. Except it's now virtual, with a no-op base implementation, and is overridden by HTMLAppletElementImpl, replacing its setAllParamsAvailable method that I added a few weeks ago when fixing 3603191.
1630
1631         This ensures that the applet will get loaded even if there is no explicit </applet> tag.
1632
1633         The changes to htmlparser.cpp back out my earlier change and restore the lines that were deleted on 8/3/04 when the old closeRenderer was removed.
1634
1635         * khtml/html/html_objectimpl.cpp:
1636         (HTMLAppletElementImpl::closeRenderer):
1637         * khtml/html/html_objectimpl.h:
1638         * khtml/html/htmlparser.cpp:
1639         (KHTMLParser::insertNode):
1640         (KHTMLParser::processCloseTag):
1641         (KHTMLParser::popOneBlock):
1642         * khtml/xml/dom_nodeimpl.h:
1643         (DOM::NodeImpl::closeRenderer):
1644
1645 2005-03-10  Ken Kocienda  <kocienda@apple.com>
1646
1647         Reviewed by John
1648
1649         Fix for this bug:
1650         
1651         <rdar://problem/4024929> REGRESSION (Mail): Pasting text with multiple reply levels removes one level instead of all
1652         
1653         The code to figure out which node to use to merge into an existing line did not drill into the first inline element
1654         as needed to make the feature work as user expect. Instead, it looked at the first node, and if it was a block, it
1655         skipped that node. This worked for some cases (including the important "paste-as-quotation" case) but obviously 
1656         doesn't work for content quoted more than once.
1657         
1658         Now, mergeStartNode() will look for the first node in pasted content that is not a block. It will now also look
1659         for nodes specially marked by Mail as a node added to make "Paste As Quotation" work. It won't skip those. 
1660         
1661         NOTE: This change will break Mail's "Paste As Quotation" feature for TOT WebKit users, but this is only a temporary 
1662         problem that will exist until we sync up with Mail's pending change to mark nodes as needed in its pasteAsQuotation:
1663         method.
1664         
1665         * khtml/editing/html_interchange.h: Add ApplePasteAsQuotation constant used to check for "marked" blockquotes.
1666         * khtml/editing/htmlediting.cpp:
1667         (khtml::ReplacementFragment::mergeStartNode): Look for first node that is either not a block or is marked as
1668         an ApplePasteAsQuotation node.
1669         (khtml::isMailPasteAsQuotationNode): New helper that looks for nodes marked with ApplePasteAsQuotation.
1670         * khtml/editing/htmlediting.h: Updated header for new function.
1671         
1672         This test result changed is an acceptable way.
1673         
1674         * layout-tests/editing/pasteboard/paste-text-013-expected.txt
1675         * layout-tests/editing/pasteboard/paste-text-013.html
1676
1677         NOTE: This change causes a regression in this layout test:
1678
1679         * layout-tests/editing/pasteboard/paste-text-013.html
1680
1681         This problem will need to be fixed separately, and this bug has been filed to track this problem:
1682         <rdar://problem/4045513> Copying and pasting selection starting at end of paragraph can incorrectly remove line break
1683
1684 2005-03-09  Maciej Stachowiak  <mjs@apple.com>
1685
1686         Reviewed by Richard.
1687
1688         <rdar://problem/4040776> Dashboard (Weather widget) is a memory hog
1689         
1690         Change things around so the event listeners for XMLHttpRequest
1691         mark their JS listener objects instead of holding a hard
1692         reference, to avoid an unbreakable reference cycle.
1693
1694         * khtml/ecma/kjs_events.cpp:
1695         (JSAbstractEventListener::JSAbstractEventListener):
1696         (JSAbstractEventListener::~JSAbstractEventListener):
1697         (JSAbstractEventListener::handleEvent):
1698         (JSAbstractEventListener::eventListenerType):
1699         (JSUnprotectedEventListener::JSUnprotectedEventListener):
1700         (JSUnprotectedEventListener::~JSUnprotectedEventListener):
1701         (JSUnprotectedEventListener::listenerObj):
1702         (JSUnprotectedEventListener::windowObj):
1703         (JSUnprotectedEventListener::mark):
1704         (JSEventListener::JSEventListener):
1705         (JSEventListener::~JSEventListener):
1706         (JSEventListener::listenerObj):
1707         (JSEventListener::windowObj):
1708         (JSLazyEventListener::JSLazyEventListener):
1709         * khtml/ecma/kjs_events.h:
1710         * khtml/ecma/kjs_html.h:
1711         * khtml/ecma/kjs_window.cpp:
1712         (Window::getJSEventListener):
1713         (Window::getJSUnprotectedEventListener):
1714         * khtml/ecma/kjs_window.h:
1715         * khtml/ecma/xmlhttprequest.cpp:
1716         (KJS::XMLHttpRequest::putValue):
1717         (KJS::XMLHttpRequest::mark):
1718         * khtml/ecma/xmlhttprequest.h:
1719         * khtml/khtml_part.h:
1720
1721 2005-03-06  Maciej Stachowiak  <mjs@apple.com>
1722
1723         Reviewed by Darin.
1724
1725         <rdar://problem/4005575> Arbitrary file disclosure vulnerability due to ability to load local html from remote content
1726         
1727         * khtml/ecma/kjs_html.cpp:
1728         (KJS::HTMLDocument::putValue):
1729         * khtml/ecma/kjs_window.cpp:
1730         (Window::put):
1731         (WindowFunc::tryCall):
1732         (Location::put):
1733         (LocationFunc::tryCall):
1734         * khtml/khtml_part.cpp:
1735         (KHTMLPart::begin):
1736         (KHTMLPart::scheduleLocationChange):
1737         (KHTMLPart::slotRedirect):
1738         (KHTMLPart::processObjectRequest):
1739         * khtml/khtml_part.h:
1740         * khtml/khtmlpart_p.h:
1741         * kwq/KWQKHTMLPart.mm:
1742         (KWQKHTMLPart::openURLRequest):
1743         (KWQKHTMLPart::urlSelected):
1744         (KWQKHTMLPart::createPart):
1745         * kwq/KWQKHTMLPartBrowserExtension.mm:
1746         (KHTMLPartBrowserExtension::createNewWindow):
1747         * kwq/WebCoreBridge.h:
1748         * kwq/WebCoreBridge.mm:
1749         (hasCaseInsensitivePrefix):
1750         (-[WebCoreBridge didNotOpenURL:pageCache:]):
1751         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]):
1752
1753 2005-03-09  Richard Williamson   <rjw@apple.com>
1754
1755         Fixed <rdar://problem/4032938> Safari: text layout for MS P Gothic font is corrupted
1756
1757         Remove our hacked special case now we have our own cache of
1758         which fonts are fixed  pitch.
1759
1760         Reviewed by Maciej.
1761
1762         * kwq/KWQFont.mm:
1763         (QFont::isFixedPitch):
1764
1765 2005-03-09  David Harrison  <harrison@apple.com>
1766
1767         Reviewed by Maciej.
1768
1769         <rdar://problem/4037141> REGRESSION (Mail): Pasting deletes preceding blank lines with certain steps
1770
1771         * khtml/editing/htmlediting.cpp:
1772         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
1773         Add check for anonymous text after blocks.
1774
1775 2005-03-08  Ken Kocienda  <kocienda@apple.com>
1776
1777         Reviewed by John
1778
1779         Fix for these bugs:
1780         
1781         <rdar://problem/4039661> crash in ApplyStyleCommand::applyBlockStyle pasting contents of webpage into Mail or Blot
1782         <rdar://problem/4039672> hang in moveParagraphContentsToNewBlockIfNecessary after pasting contents of webpage into Blot
1783
1784         * khtml/editing/htmlediting.cpp:
1785         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Fix for 4039672. Iteration needs to do
1786         a traverseNextSibling(), not a traverseNextNode(). The latter might iterate into a child that already got moved, and
1787         the code can infinite loop as a result.
1788         (khtml::ApplyStyleCommand::applyBlockStyle): Fix for 4039661. This function iterates over a set of nodes to apply
1789         block styles. Before, the iteration would go from the start to the end of the selection, and apply block styles
1790         as it went. However, the act of applying style could confuse the iteration. Now I iterate and store the relevant
1791         nodes in QPtrList before doing any style manipulation, and then iterate that set of nodes.
1792
1793 2005-03-08  Darin Adler  <darin@apple.com>
1794
1795         Change written by Hyatt, reviewed by me.
1796
1797         - fixed <rdar://problem/3952698> Function buttons do not display properly with Telia Webmail
1798
1799         * khtml/rendering/render_replaced.cpp: (RenderReplaced::calcMinMaxWidth):
1800         Only use a minWidth of 0 for images with a percentage value. Other replaced elements aren't scalable
1801         so their minWidth should be their calculated width. This has been wrong all along, but it's a relatively
1802         safe change because it only affects replaced elements' min-width.
1803
1804 2005-03-08  David Harrison  <harrison@apple.com>
1805
1806         Reviewed by Ken.
1807
1808         <rdar://problem/4039006> REGRESSION (Mail): Command-left-arrow goes to the start of the wrong line in particular message
1809
1810         * khtml/editing/visible_units.cpp:
1811         (khtml::startOfLine):
1812         Use firstLeafChild() instead of firstChild().
1813
1814 2005-03-08  Richard Williamson   <rjw@apple.com>
1815
1816         Fixed by Tom Madden.
1817
1818         Fixed <rdar://problem/4038586> 8A402: Osaka-Mono text overlaps when typing with input method
1819
1820         We weren't clearing the "all ascii" flag when setting text on
1821         RenderText.
1822
1823         Reviewed by Richard Williamson.
1824
1825         * khtml/rendering/render_text.cpp:
1826         (RenderText::setText):
1827
1828 2005-03-08  Darin Adler  <darin@apple.com>
1829
1830         Reviewed by Ken and Maciej.
1831
1832         - fixed <rdar://problem/3988809> REGRESSION (Mail): wide space characters are turned into plain old spaces when typed or pasted
1833
1834         Changed the few places where it matters to use a "collapsible whitespace" concept instead of
1835         the general whitespace concept. This means treating only ' ' and '\n' specially instead of
1836         including other space characters, which matches what the space-collapsing logic does in RenderText,
1837         although it really needs to behave differently based on whitespace mode.
1838
1839         * khtml/editing/visible_text.h: (khtml::isCollapsibleWhitespace): Added. This returns true only for
1840         ' ' and '\n' since they are the only characters collapsed once text is in the DOM. But really it
1841         can't do the job ignoring white-space mode, so some day it must go.
1842
1843         * khtml/editing/html_interchange.cpp: (convertHTMLTextToInterchangeFormat): Changed to use
1844         isCollapsibleWhitespace and removed unnecessary calls to latin1().
1845
1846         * khtml/editing/htmlediting.cpp:
1847         (khtml::isNBSP): Removed unnecessary creation/destruction of QChar each time this is called.
1848         (khtml::nextCharacterIsCollapsibleWhitespace): Renamed from isWS and changed to use isCollapsibleWhitespace.
1849         (khtml::DeleteSelectionCommand::fixupWhitespace): Use isCollapsibleWhitespace instead of isWS,
1850         since we only want to do our NBSP tricks for collapsible whitespace.
1851         (khtml::InsertTextCommand::input): Changed use of isTab to instead say == "\t" since that does the
1852         same thing and is arguably just as clear. Changed use of isWS to == " " since the input text can't
1853         include any "\n" characters, and really a plain old space is the only collapsible thing that can
1854         be passed in. Use isCollapsibleWhitespace instead of isWS since we want to do NBSP tricks only for
1855         collapsible whitespace, not all whitespace.
1856         (khtml::InsertTextCommand::insertSpace): Use isCollapsibleWhitespace instead of isWS since we want
1857         to do NBSP tricks only for collapsible whitespace, not all whitespace.
1858         (khtml::RebalanceWhitespaceCommand::doApply): Ditto.
1859
1860         * khtml/xml/dom_position.h: Changed treatNBSPAsWhiteSpace parameters to considerNonCollapsibleWhitespace
1861         parameters. The most common callers are only interested in collapsible whitespace, and the smart copy
1862         and paste callers want to include all whitespace, including non-breaking spaces and all the Unicode spaces.
1863         * khtml/xml/dom_position.cpp:
1864         (DOM::Position::leadingWhitespacePosition): Rename the parameter, and use either QChar::isSpace or
1865         isCollapsibleWhitespace depending on the boolean passed in.
1866         (DOM::Position::trailingWhitespacePosition): Ditto.
1867
1868 2005-03-07  John Sullivan  <sullivan@apple.com>
1869
1870         Reviewed by Darin.
1871         
1872         - <rdar://problem/4040868> REGRESSION (Mail, 403-403+): Drag and drop deletes text, 
1873         many other bad editing problems
1874
1875         * khtml/rendering/render_text.cpp:
1876         (RenderText::caretMaxOffset):
1877         A "-" should have been a "+" in this method that was tweaked an hour ago. Editing
1878         was completely horked.
1879
1880 2005-03-07  Richard Williamson   <rjw@apple.com>
1881
1882         Additional nil check from fix for 4040749.
1883
1884         * khtml/rendering/render_box.cpp:
1885         (RenderBox::setStyle):
1886
1887 2005-03-07  Richard Williamson   <rjw@apple.com>
1888
1889         Additional nil check from fix for 4040749.
1890
1891         * khtml/rendering/render_layer.cpp:
1892         (RenderLayer::updateLayerPosition):
1893
1894 2005-03-07  David Harrison  <harrison@apple.com>
1895
1896         Reviewed by Darin.
1897
1898         <rdar://problem/4033202> REGRESSION (Mail): Can't arrow up at a particular spot in a particular Mail message
1899
1900         Doublecheck that new position is really on a different line, because the VisiblePosition constructor does not.
1901         Filed <rdar://problem/4040763> for that problem.
1902
1903         * khtml/editing/visible_units.cpp:
1904         (khtml::previousLinePosition):
1905
1906 2005-03-07  Richard Williamson   <rjw@apple.com>
1907
1908         Fixed <rdar://problem/4040749> REGRESSION (125-178): opacity style not working, breaks fading images on okcupid.com
1909
1910         When layers are dynamically created/removed as a result of changing opacity they weren't being correctly
1911         sized and positioned.  This happens whenever opacity goes from < 1 to 1.
1912
1913         Reviewed by Darin.
1914
1915         * khtml/rendering/render_box.cpp:
1916         (RenderBox::setStyle):
1917         * khtml/rendering/render_layer.cpp:
1918         (RenderLayer::updateLayerPosition):
1919
1920 2005-03-07  Christy Warren  <kali@apple.com>
1921
1922         Reviewed by Darin
1923
1924         * khtml/rendering/render_text.cpp:
1925         (RenderText::caretMinOffset): modified to handle BIDI case by checking all text boxes for min offset
1926         (RenderText::caretMaxOffset): modified to handle BIDI case by checking all text boxes for max offset
1927
1928 2005-03-07  David Harrison  <harrison@apple.com>
1929
1930         Reviewed by Ken.
1931
1932         <rdar://problem/4029225> REGRESSION (Mail): Crash if hit return after dragging in attachment - DeleteSelectionCommand::initializePositionData
1933
1934         Work around the fact that the height() of a BR is 0 if there are no text elements on the line, even if there are replaced elements.
1935         Filed <rdar://problem/4040358> RenderBR height() is not accurate.
1936         
1937         * khtml/editing/htmlediting.cpp:
1938         (khtml::ReplaceSelectionCommand::doApply):
1939         When height is 0, double check that the placeholder is the first position on the line.
1940
1941 === Safari-403 ===
1942
1943 2005-03-07  Ken Kocienda  <kocienda@apple.com>
1944
1945         Reviewed by Vicki
1946     
1947         Fix for this bug:
1948         
1949         <rdar://problem/4040136> Expose SPI for WebCore's functions to create document fragments from plain text and markup strings
1950
1951         * kwq/DOMHTML.mm: Add two new SPI functions.
1952         (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:])
1953         (-[DOMHTMLDocument _createDocumentFragmentWithText:])
1954         * kwq/DOMPrivate.h: Declare the new SPI here, a privately-exported header, so Mail can make use of it.
1955
1956 2005-03-07  Ken Kocienda  <kocienda@apple.com>
1957
1958         Reviewed by John
1959
1960         Fix for this bug:
1961         
1962         <rdar://problem/4039676> REGRESSION (Mail): in reply, <cr> on pasted text (without trailing newline) is eaten when pasted above date
1963
1964         * khtml/editing/htmlediting.cpp:
1965         (khtml::ReplaceSelectionCommand::doApply): Code to "eat" a <br> element, that was creating an otherwise empty line, was running
1966         when it should not. If the content being pasted in does not end in a "logical" newline itself, then the <br> already
1967         in the content needs to be preserved. A simple one-line change now sees to this.
1968         
1969         * layout-tests/editing/pasteboard/paste-text-010-expected.txt: This test now has an extra, but harmless,
1970         <br> at the end of a paragraph. This makes sense given the code change.
1971
1972         New test:
1973         * layout-tests/editing/pasteboard/paste-text-018-expected.txt: Added.
1974         * layout-tests/editing/pasteboard/paste-text-018.html: Added.
1975
1976 2005-03-07  Ken Kocienda  <kocienda@apple.com>
1977
1978         Reviewed by John
1979
1980         Fix for this bug:
1981         
1982         <rdar://problem/4035648> REGRESSION (Mail): line feed in source HTML file causes bad copy/paste behavior
1983
1984         The createMarkup() function in markup.cpp iterates over the nodes in a range,
1985         and does some bookkeeping to figure out when to add close tags to the markup.
1986         Some code added at the start of the loop to prevent markup from being written
1987         for unrendered nodes short-circuited the rest of the loop, and so prevented
1988         the close-tag-writing code from running when it should.
1989
1990         This is why the "plain" text wound up inside of the bold tag in the example
1991         above. The addition of the unrendered return character caused an incorrect
1992         delay in the close tag for the bold element from being written out, with the
1993         result being that it wound up including additional content.
1994
1995         The fix is to add checks for node renderers throughout the loop at the points
1996         where markup is written out for each node. This allows the additional close
1997         tag logic to run as needed.
1998
1999         All layout tests pass with this change.
2000
2001         * khtml/editing/markup.cpp:
2002         (khtml::createMarkup)
2003
2004         New test:
2005         
2006         * layout-tests/editing/pasteboard/paste-4035648-fix-expected.txt: Added.
2007         * layout-tests/editing/pasteboard/paste-4035648-fix.html: Added.
2008
2009 2005-03-06  Christy Warren  <kali@appple.com>
2010
2011         Reviewed by Ken
2012
2013         * khtml/rendering/render_text.cpp:
2014         (lastRendererOnPrevLine): helper for RenderText::caretRect
2015         (RenderText::caretRect): added code to properly handle bidi ordered text boxes
2016
2017 2005-03-06  Christy Warren  <kali@apple.com>
2018
2019         Reviewed by Darin.
2020
2021         * khtml/editing/visible_position.cpp: Eliminated code that cuts off searching through the text boxes based on an assumption that breaks under bidi
2022         (khtml::VisiblePosition::isCandidate):
2023         * kwq/KWQFontMetrics.mm:
2024         (QFontMetrics::checkSelectionPoint): Made the initialization of the WebCoreStyle honor the reversed flag
2025
2026 2005-03-05  John Sullivan  <sullivan@apple.com>
2027
2028         Reviewed by Maciej.
2029         
2030         - fixed <rdar://problem/4038417> Mail crashed in StyleChange::checkForLegacyHTMLStyleChange 
2031         when composing a reply
2032
2033         * khtml/editing/htmlediting.cpp:
2034         (khtml::StyleChange::checkForLegacyHTMLStyleChange):
2035         Added missing nil check.
2036
2037 2005-03-05  Darin Adler  <darin@apple.com>
2038
2039         Reviewed by Don.
2040
2041         - fixed <rdar://problem/4038478> Crash in renderer viewing RSS feed at feed://wvs.topleftpixel.com/index.rdf
2042
2043         * khtml/xml/dom_docimpl.cpp: (widgetForNode): Check for nil before going from node to renderer.
2044
2045 2005-03-05  Darin Adler  <darin@apple.com>
2046
2047         Reviewed by Richard.
2048
2049         - fixed <rdar://problem/4037700> Every character typed causes stat call for /usr/share/icu/icudt32b_char.brk
2050
2051         * khtml/rendering/render_text.cpp:
2052         (getCharacterBreakIterator): Added. Helper that sets up an iterator for the passed-in text.
2053         Shares a single global iterator (fast, albeit not thread-safe).
2054         (RenderText::previousOffset): Changed to call getCharacterBreakIterator.
2055         (RenderText::nextOffset): Ditto.
2056
2057 2005-03-05  Ken Kocienda  <kocienda@apple.com>
2058
2059         Reviewed by Darin
2060
2061         Fix for this bug:
2062         
2063         <rdar://problem/4038267> REGRESSION (Mail): Crash copying and pasting end of paragraph
2064
2065         Code to handle content that has a "logical" newline at the end of the pasted content, and the code
2066         to adjust the selection at the end of the paste operation made an assumption that at least one
2067         node had been inserted by the paste command. This is not necessarily true in the case where the sole content
2068         in the pasted content is one of these "logical" newlines. Adjust some code around so that we don't deref
2069         null, but still adjust the selection correctly for this case. In each of the two functions below, some
2070         null checks have been added, and some code has been rearranged a little bit to continue on through
2071         the end of completeHTMLReplacement, even if no nodes have been inserted. The patch looks bigger and more
2072         complicated than the conceptual change.
2073
2074         * khtml/editing/htmlediting.cpp:
2075         (khtml::ReplaceSelectionCommand::doApply)
2076         (khtml::ReplaceSelectionCommand::completeHTMLReplacement)
2077         
2078         * layout-tests/editing/pasteboard/paste-4038267-fix-expected.txt: Added.
2079         * layout-tests/editing/pasteboard/paste-4038267-fix.html: Added.
2080
2081 2005-03-05  Darin Adler  <darin@apple.com>
2082
2083         Reviewed by John.
2084
2085         - fixed <rdar://problem/4025918> images copied from Safari with relative src URLs aren't pasted into Mail messages (KURL resolves base URLs incorrectly)
2086
2087         * kwq/KWQKURL.mm: (KURL::KURL): Add a slash at the start of the path if a relative part is adding
2088         a path onto a URL that has "pre-path" bits like host name, but no path yet. This doesn't come up
2089         for http because in that case we add a trailing "/" as part of canonicalization.
2090
2091 2005-03-04  John Sullivan  <sullivan@apple.com>
2092
2093         Reviewed by Kevin.
2094         
2095         - fixed <rdar://problem/4033705> REGRESSION (Mail): Copy/Paste from Excel 
2096         crashes Mail in KWQKHTMLPart::fontForSelection(bool*) const + 232
2097
2098         * kwq/KWQKHTMLPart.mm:
2099         (KWQKHTMLPart::fontForSelection):
2100         Check for nil startNode, not just nil renderer.
2101
2102 2005-03-04  David Harrison  <harrison@apple.com>
2103
2104         Reviewed by Ken, Richard.
2105
2106         <rdar://problem/3996383> REGRESSION (Mail): Deleting all of first line also deletes line ending
2107
2108         Problem was the placeholder check was based on 0 height block, but the block in this
2109         case is the BODY, which has other content even though the paragraph is gone.
2110         
2111         * khtml/editing/htmlediting.cpp:
2112         (khtml::CompositeEditCommand::insertBlockPlaceholder):
2113         Now does insert instead of append!
2114     
2115         (khtml::CompositeEditCommand::appendBlockPlaceholder):
2116         New.  Actually does append.
2117         
2118         (khtml::CompositeEditCommand::addBlockPlaceholderIfNeeded):
2119         Renamed from insertBlockPlaceholderIfNeeded because it can insert or append.  Also accepts "force insert" flag.
2120         
2121         (khtml::CompositeEditCommand::removeBlockPlaceholder):
2122         Renamed for succinctness from removeBlockPlaceholderIfNeeded.
2123         
2124         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
2125         (khtml::DeleteSelectionCommand::moveNodesAfterNode):
2126         Use renamed methods.
2127         
2128         (khtml::DeleteSelectionCommand::doApply):
2129         Use addBlockPlaceholderIfNeeded "force insert" flag if deleting whole paragraphs did not leave an empty one.
2130         
2131         (khtml::InsertParagraphSeparatorCommand::doApply):
2132         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
2133         (khtml::InsertTextCommand::input):
2134         Use renamed methods.
2135         
2136         * khtml/editing/htmlediting.h:
2137         Renamed and new methods per above.
2138         
2139
2140 2005-03-04  Chris Blumenberg  <cblu@apple.com>
2141
2142         Fixed: <rdar://problem/4032840> REGRESSION (Mail): crash in RemoveNodeCommand after pasting attachment at end of message
2143
2144         Reviewed by darin.
2145
2146         * khtml/editing/visible_units.cpp:
2147         (khtml::endOfParagraph): don't consider text nodes that have no rendered characters
2148
2149 2005-03-04  Richard Williamson   <rjw@apple.com>
2150
2151         Fixed <rdar://problem/4034764> REGRESSION(125-188)Viewing text/plain page and going back/forward corrupts HTML pages (google.com)
2152
2153         The parse mode wasn't be restored to the document when going
2154         back.
2155
2156         Reviewed by Hyatt.
2157
2158         * kwq/KWQKHTMLPart.mm:
2159         (KWQKHTMLPart::openURLFromPageCache):
2160         * kwq/KWQPageState.h:
2161         * kwq/KWQPageState.mm:
2162         (-[KWQPageState initWithDocument:URL:windowProperties:locationProperties:interpreterBuiltins:]):
2163
2164 2005-03-04  Ken Kocienda  <kocienda@apple.com>
2165
2166         Reviewed by me
2167
2168         * layout-tests/editing/style/create-block-for-style-012-expected.txt: Shame on me!
2169         I landed my last fix without running layout tests. This one changes in a subtle, but
2170         acceptable way.
2171
2172 2005-03-04  Ken Kocienda  <kocienda@apple.com>
2173
2174         Reviewed by Harrison
2175
2176         Fix for this bug:
2177         
2178         <rdar://problem/4032543> REGRESSION (Mail): Mail hangs when quoted text is pasted twice
2179         
2180         This code change fixes the bug in a non-obvious way. The root cause of the problem was
2181         that a VisiblePosition created using an affinity originating in Mail code caused 
2182         two VisiblePosition objects that should have been equal to differ only in their 
2183         affinities, which in turn caused us to run a code path that should not have run.
2184
2185         * khtml/editing/visible_position.cpp:
2186         (khtml::VisiblePosition::VisiblePosition): Added copy constructor.
2187         (khtml::VisiblePosition::next): Factored out inline code that used to be here into new
2188         setAffinityUsingLinePosition() function.
2189         (khtml::isEqualIgnoringAffinity): New helper to handle cases when affinity in equality check does
2190         not matter. However, we want to know about such cases where a VisiblePosition differs only by affinity, 
2191         and the code will assert in development when this happens.
2192         (khtml::isNotEqualIgnoringAffinity): Ditto, but not. :)
2193         (khtml::setAffinityUsingLinePosition): New helper function mentioned above. This will "correct"
2194         upstream affinity to downstream if the affinity does not make a difference for the position.
2195         * khtml/editing/visible_position.h:
2196         * khtml/editing/visible_range.h: Wacky bug. The operator== for this class took VisiblePosition classes!
2197         * khtml/editing/visible_units.cpp:
2198         (khtml::isStartOfParagraph): Now performs equality check without regard to affinity.
2199         (khtml::isEndOfParagraph): Ditto.
2200         (khtml::isStartOfBlock): Ditto.
2201         (khtml::isEndOfBlock): Ditto.
2202         * kwq/WebCoreBridge.mm:
2203         (-[WebCoreBridge setSelectedDOMRange:affinity:]): Adjusts the affinity using setAffinityUsingLinePosition()
2204         if necessary.
2205
2206 2005-03-04  Darin Adler  <darin@apple.com>
2207
2208         Reviewed by John.
2209
2210         - fixed <rdar://problem/4036817> REGRESSION: ctrl-y broken when a line + carriage return cut
2211
2212         * khtml/editing/htmlediting.h: Added insertTextRunWithoutNewlines.
2213         * khtml/editing/htmlediting.cpp:
2214         (khtml::InsertTextCommand::input): Added assertion to make sure strings with newlines don't get
2215         down to this level.
2216         (khtml::TypingCommand::insertText): Added. Takes the name of the old function, but is a new
2217         level that breaks runs into lines and inserts each one separately.
2218         (khtml::TypingCommand::insertTextRunWithoutNewlines): Renamed old insertText to this. 
2219
2220         * khtml/dom/dom_string.h: Made substring be a const member function.
2221         * khtml/dom/dom_string.cpp: (DOM::DOMString::substring): Made this const.
2222
2223 2005-03-04  Darin Adler  <darin@apple.com>
2224
2225         Reviewed by John.
2226
2227         - fixed <rdar://problem/4020413> REGRESSION (Mail): can't use fonts with names that start with "#" in Mail (Korean fonts)
2228
2229         * khtml/css/css_valueimpl.cpp:
2230         (DOM::isLegalIdentifier): Added. Commented out and not used.
2231         (DOM::quoteStringIfNeeded): Quotes the string if needed. For now only if it starts with "#".
2232         (DOM::CSSPrimitiveValueImpl::cssText): Call quoteStringIfNeeded when asked for cssText for an arbitrary string, since we
2233         need text you can re-parse.
2234         (DOM::FontFamilyValueImpl::cssText): Ditto.
2235
2236         * khtml/editing/markup.cpp:
2237         (khtml::startMarkup): Added comments about lack of quoting for attributes.
2238         (khtml::createMarkup): Ditto.
2239
2240 2005-03-04 Adele Amchan  <adele@apple.com>
2241  
2242        Reviewed by Maciej
2243
2244         Fix for <rdar://problem/4021711> REGRESSION(125-188) blank pages when browsing forum at cooperativeresearch.org - cached external script problem
2245
2246         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::scriptHandler): set flag needToRefCachedScript so we can make sure 
2247         notifyFinished is called after pendingSrc is set up with the right data from the cached script
2248
2249 2005-03-04  Ken Kocienda  <kocienda@apple.com>
2250
2251         Reviewed by John
2252
2253         Fix for this bug:
2254         
2255         <rdar://problem/4029632> Tiger 8A398:- Mail crashes in DOM::NodeImpl::isBlockFlow() after pasting text with alignment style and BR element from Safari
2256
2257         * khtml/editing/htmlediting.cpp:
2258         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): VisiblePosition constructor
2259         was failing to yield a position for a node just pasted into the document since a layout was needed
2260         for the calculation to come out right. Layout added. Crash gone.
2261
2262 === Safari-402 ===
2263
2264 2005-03-03  Chris Blumenberg  <cblu@apple.com>
2265
2266         Fixed: <rdar://problem/3992803> Cannot navigate through list items with the keyboard, you're stuck in the same <li> block unless you click out
2267
2268         Reviewed by harrison.
2269
2270         * khtml/rendering/render_line.cpp:
2271         (khtml::RootInlineBox::closestLeafChildForXPos): avoid returning list markers when possible. Also improved heuristic for returning the best InlineBox given the passed X position.
2272
2273
2274 2005-03-03  Ken Kocienda  <kocienda@apple.com>
2275
2276         Reviewed by John
2277         
2278         Fix for this bug:
2279         
2280         <rdar://problem/4035198> Pasting text with different styles does not get reproducible results
2281
2282         I had a good idea yesterday to improve the way we "fixup" styles after
2283         pasting, but i chose a poor data structure to do it, a map of
2284         nodes-to-styles. In the fixup step, I iterated over the map elements and
2285         did the fixup. However, since the order in which the items would come
2286         out of the map is indeterminate, we got unpredictable results.
2287
2288         So, the concept was good, but the implementation was flawed. I have
2289         fixed this mapping to be a list instead, so the order that nodes are
2290         evaluated in the fixup step is document order. This works nicely.
2291
2292         * khtml/editing/htmlediting.cpp:
2293         (khtml::ReplacementFragment::~ReplacementFragment): No longer need to explicity deref nodes and
2294         styles saved away for later fixup. This is now handled by the new NodeDesiredStyle class.
2295         (khtml::ReplacementFragment::computeStylesUsingTestRendering): Now calls computeAndStoreNodeDesiredStyle,
2296         function renamed from mapDesiredStyleForNode.
2297         Now accepts a QValueList<NodeDesiredStyle> in place of the old map.
2298         (khtml::NodeDesiredStyle::NodeDesiredStyle): New class that represents a node-to-style mapping.
2299         (khtml::NodeDesiredStyle::~NodeDesiredStyle): Ditto.
2300         (khtml::NodeDesiredStyle::operator=): Ditto.
2301         (khtml::ReplaceSelectionCommand::doApply): Now calls computeAndStoreNodeDesiredStyle,
2302         function renamed from mapDesiredStyleForNode.
2303         (khtml::ReplaceSelectionCommand::fixupNodeStyles): Now operates on a QValueList<NodeDesiredStyle> in 
2304         place of the old map.
2305         (khtml::computeAndStoreNodeDesiredStyle): Renamed from mapDesiredStyleForNode.  Now operates on a 
2306         QValueList<NodeDesiredStyle> in place of the old map.
2307         * khtml/editing/htmlediting.h:
2308         (khtml::NodeDesiredStyle): New class that represents a node-to-style mapping.
2309         (khtml::ReplacementFragment::desiredStyles): Now returns a QValueList<NodeDesiredStyle> in place of the old map.
2310
2311         * layout-tests/editing/style/typing-style-003-expected.txt: Results changed in an acceptable way.
2312
2313 2005-03-02  Darin Adler  <darin@apple.com>
2314
2315         Reviewed by Maciej.
2316
2317         - fixed <rdar://problem/4029741> REGRESSION (188-189): <input type=text> are cleared when you hide/show them
2318
2319         * khtml/html/html_formimpl.h: Added detach functions for both input and text area elements, since
2320         both have m_valueMatchesRenderer flags.
2321         * khtml/html/html_formimpl.cpp:
2322         (DOM::HTMLInputElementImpl::detach): Set m_valueMatchesRenderer to false, since the renderer is going away.
2323         (DOM::HTMLTextAreaElementImpl::detach): Ditto.
2324
2325 2005-03-02  Ken Kocienda  <kocienda@apple.com>
2326
2327         Reviewed by Hyatt
2328
2329         Fix for this bug:
2330         
2331         <rdar://problem/4006151> in reply, caret moves to next line after toggling bold style then typing
2332
2333         * khtml/editing/htmlediting.cpp:
2334         (khtml::ApplyStyleCommand::applyInlineStyle): Defer cleaning up empty style until the end of the
2335         function. In some situations, the render tree can get confused when we do this removal up front.
2336         I wish I understood the reasons more deeply, but this bit of code shuffling seems harmless, and 
2337         fixes the bug.
2338
2339 2005-03-02  Darin Adler  <darin@apple.com>
2340
2341         Reviewed by Maciej.
2342
2343         - fixed <rdar://problem/4024966> crash happened twice in [KWQTextField setHasFocus:] + 0xe8
2344
2345         Added more nil checks to the widget implementations. Anywhere a widget pointer is used, do a nil check,
2346         rather than relying on high level assumptions about which calls can and can't destroy the HTML element
2347         (and hence the widget). The case in the bug seems to be a case where scrolling destroyed the element.
2348         We can't be sure this fixes the bug, but we can be relatively sure we didn't introduce any new problems,
2349         because this just avoids nil-dereferencing.
2350
2351         * kwq/KWQButton.mm:
2352         (-[KWQButton becomeFirstResponder]):
2353         (-[KWQButton nextKeyView]):
2354         (-[KWQButton previousKeyView]):
2355         * kwq/KWQListBox.mm:
2356         (-[KWQTableView mouseDown:]):
2357         (-[KWQTableView becomeFirstResponder]):
2358         (-[KWQTableView numberOfRowsInTableView:]):
2359         (-[KWQTableView tableViewSelectionDidChange:]):
2360         (-[KWQTableView tableView:shouldSelectRow:]):
2361         (-[KWQTableView selectionShouldChangeInTableView:]):
2362         * kwq/KWQScrollBar.mm:
2363         (-[KWQScrollBar scroll:]):
2364         * kwq/KWQSlider.mm:
2365         (-[KWQSlider mouseDown:]):
2366         (-[KWQSlider slide:]):
2367         (-[KWQSlider becomeFirstResponder]):
2368         (-[KWQSlider nextKeyView]):
2369         (-[KWQSlider previousKeyView]):
2370         * kwq/KWQTextArea.mm:
2371         (-[KWQTextAreaTextView becomeFirstResponder]):
2372         (-[KWQTextAreaTextView resignFirstResponder]):
2373         (-[KWQTextAreaTextView mouseDown:]):
2374         * kwq/KWQTextField.mm:
2375         (-[KWQTextFieldController action:]):
2376         (-[KWQTextFieldController controlTextDidEndEditing:]):
2377         (-[KWQTextFieldController controlTextDidChange:]):
2378         (-[KWQTextFieldController textView:didHandleEvent:]):
2379         (-[KWQTextFieldController setHasFocus:]):
2380
2381 2005-03-02  Richard Williamson   <rjw@apple.com>
2382
2383         Fixed <rdar://problem/4031483> Leak (RenderObject::createInlineBox) reproducible with Stock widget
2384
2385         We were leaking inline block line boxes.  Argh!
2386
2387         Reviewed by Hyatt.
2388
2389         * khtml/rendering/render_flow.cpp:
2390         (RenderFlow::dirtyLineBoxes):
2391         * khtml/rendering/render_line.cpp:
2392         (khtml::InlineBox::deleteLine):
2393
2394 2005-03-02  Chris Blumenberg  <cblu@apple.com>
2395
2396         Fixed: <rdar://problem/3976872> REGRESSION (Mail): Pasted plain text doesn't get the proper style if pasted into newlines
2397
2398         Reviewed by kocienda.
2399
2400         * khtml/editing/htmlediting.cpp:
2401         (khtml::EditCommand::styleAtPosition): new, factored out from calculateStyleBeforeInsertion
2402         (khtml::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): call styleAtPosition
2403         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand): clear new m_insertionStyle ivar
2404         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand): deref new m_insertionStyle  ivar
2405         (khtml::ReplaceSelectionCommand::doApply): store the style so it later be applied when matching style
2406         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): apply style from m_insertionStyle when matching style
2407         * khtml/editing/htmlediting.h:
2408
2409 2005-03-02  Maciej Stachowiak  <mjs@apple.com>
2410
2411         Reviewed by Darin.
2412
2413         <rdar://problem/4031718> REGRESSION (401-401+): Safari reproducible crash setting up scope in JSLazyEventListener::parseCode authenticating to bugweb
2414         
2415         * khtml/ecma/kjs_events.cpp:
2416         (JSLazyEventListener::parseCode): If originalNode is NULL, don't
2417         mess with the scope chain.
2418         
2419         * khtml/html/html_baseimpl.cpp:
2420         (HTMLBodyElementImpl::parseHTMLAttribute): For handlers that are
2421         delcared on body but set on the document, pass NULL to avoid
2422         swizzling the scope chain. It turns out that this is what browsers
2423         do, and it finesses the crash.
2424
2425 2005-03-02  David Harrison  <harrison@apple.com>
2426
2427         Reviewed by Ken.
2428
2429         <rdar://problem/3948453> Can't type accented chars as first character in Stickies widget
2430
2431         * khtml/editing/htmlediting.cpp:
2432         (khtml::ReplaceSelectionCommand::doApply):
2433
2434 2005-03-02  Ken Kocienda  <kocienda@apple.com>
2435         Reviewed by John
2436
2437         Fix for this bug:
2438         
2439         <rdar://problem/4020574> REGRESSION (Mail): copy/paste first part of reply-quoted text alters downstream style
2440         
2441         The problem was that the operation to move nodes following the newly-pasted nodes did not preserve the
2442         style of these moved nodes. I have generalized some of the functions that compute and preserve styles
2443         for nodes and then apply these styles after a DOM operation.
2444
2445         * khtml/editing/htmlediting.cpp:
2446         (khtml::ReplacementFragment::~ReplacementFragment): Call new derefNodesAndStylesInMap() helper function
2447         in place of old code that had this deref'ing inline.
2448         (khtml::ReplacementFragment::computeStylesUsingTestRendering): Now calls new mapDesiredStyleForNode() helper
2449         function place of old code that had this style computation inline.
2450         (khtml::ReplacementFragment::removeStyleNodes): Updated comment for new helper name.
2451         (khtml::ReplaceSelectionCommand::doApply): Now calls new helpers in place of helpers whose names were changed,
2452         or in place of pre-refactored inline code.
2453         (khtml::ReplaceSelectionCommand::fixupNodeStyles): Renamed from applyStyleToInsertedNodes(). Now generalized
2454         to take the map of nodes to use for the fixup. This makes it possible to call this code with different maps,
2455         and that is needed to fix the bug.
2456         (khtml::mapDesiredStyleForNode): New helper function to compute the inheritable styles for a given node
2457         and map this style to the given node in the given map. This function now also includes the code that was
2458         in the removeBlockquoteColorsIfNeeded(). This latter helper has now been removed.
2459         (khtml::derefNodesAndStylesInMap): Simple helper to deref map members.
2460         * khtml/editing/htmlediting.h:
2461         (khtml::ReplacementFragment::desiredStyles): New helper to return map of nodes-to-desiredStyles.
2462
2463 2005-03-01  Ken Kocienda  <kocienda@apple.com>
2464
2465         Reviewed by Hyatt
2466
2467         Fix for this bug:
2468
2469         <rdar://problem/4011358> REGRESSION(Mail): after dragging text to mail message and deleting, typing or dragging new text doesn't work
2470
2471         * khtml/editing/visible_position.cpp:
2472         (khtml::VisiblePosition::isCandidate): Insertion point disappearing was due to a failed
2473         check here after deleting all the content in the body element. The special "empty block"
2474         needs to add check for DOM children. A block may have straggling anonymous render children in
2475         some cases, and so the check needs to be (!DOM-kids || !render-kids).
2476
2477         Also, I botched the last checkin trying to split these two patches in my tree. Wrong layout tests 
2478         got checked in, I checked in a conflict marker in the Changelog, etc. I fixed everything with this checkin.
2479
2480 2005-03-01  Ken Kocienda  <kocienda@apple.com>
2481  
2482         Reviewed by Maciej
2483
2484         Improved fix for this bug:
2485         
2486         <rdar://problem/3996605> Insert paragraph command puts new block in wrong place, creating difficult-to-handle HTML
2487
2488         Maciej and I discussed this situation at length, and we came up with a better fix than I did earlier.
2489
2490         * khtml/editing/htmlediting.cpp:
2491         (khtml::InsertParagraphSeparatorCommand::doApply): Simplify one special case so that it only handles the 
2492         "last in block" situation. Remove special case for "downstream node is in different block" and handle
2493         this case with a little bit of special code in the general insertion case.
2494
2495         Results studied to make sure there were no problems.
2496
2497         * layout-tests/editing/deleting/delete-3959464-fix-expected.txt
2498         * layout-tests/editing/inserting/insert-div-001-expected.txt
2499         * layout-tests/editing/inserting/insert-div-002-expected.txt
2500         * layout-tests/editing/inserting/insert-div-004-expected.txt
2501         * layout-tests/editing/inserting/insert-div-005-expected.txt
2502         * layout-tests/editing/inserting/insert-div-009-expected.txt
2503         * layout-tests/editing/inserting/insert-div-014-expected.txt
2504         * layout-tests/editing/inserting/insert-div-018-expected.txt
2505         * layout-tests/editing/inserting/insert-div-024-expected.txt
2506         * layout-tests/editing/pasteboard/paste-text-011-expected.txt
2507         * layout-tests/editing/pasteboard/paste-text-013-expected.txt
2508         * layout-tests/editing/pasteboard/paste-text-015-expected.txt
2509         * layout-tests/editing/style/block-style-004-expected.txt
2510         * layout-tests/editing/style/block-style-005-expected.txt
2511         * layout-tests/editing/style/block-style-006-expected.txt
2512
2513         New test:
2514         
2515         * layout-tests/editing/inserting/insert-div-027.html
2516         * layout-tests/editing/inserting/insert-div-027-expected.txt
2517
2518 2005-03-01  David Hyatt  <hyatt@apple.com>
2519
2520         Fix for 4030890, regression with <sup> on Google.  Fix some bogus != comparison checks in verticalPositionHint.
2521         
2522         Reviewed by John
2523
2524         (RenderObject::getVerticalPosition):
2525         
2526 2005-03-01  Chris Blumenberg  <cblu@apple.com>
2527
2528         Fixed: <rdar://problem/4030669> smart delete does not delete spaces from pasted content
2529
2530         Reviewed by rjw.
2531
2532         * khtml/editing/htmlediting.cpp:
2533         (khtml::DeleteSelectionCommand::initializePositionData): pass true for treatNBSPAsWhiteSpace to leadingWhitespacePosition and trailingWhitespacePosition when testing whether or not we have to delete those characters as well.
2534         * khtml/editing/jsediting.cpp: pass true for smartDelete when the selection granularity is WORD. This allows us to write smart delete layout tests.
2535         * layout-tests/editing/deleting/smart-delete-001-expected.txt: Added.
2536         * layout-tests/editing/deleting/smart-delete-001.html: Added.
2537         * layout-tests/editing/deleting/smart-delete-002-expected.txt: Added.
2538         * layout-tests/editing/deleting/smart-delete-002.html: Added.
2539
2540 2005-03-01  Richard Williamson   <rjw@apple.com>
2541
2542         Fixed <rdar://problem/4029772> Weather widgets use a lot of memory (more that other widgets)
2543
2544         The string objects created by KWQHeaderStringFromDictionary() leaked.
2545
2546         Reviewed by John Louch.
2547
2548         * kwq/KWQLoader.mm:
2549         (KWQHeaderStringFromDictionary):
2550
2551 2005-03-01  Jens Alfke  <jens@apple.com>
2552
2553         Reviewed by Darin.
2554
2555         <rdar://problem/4004531> Simple Sun Signed Applet throws exceptions; doesn't run
2556         Two fixes for the way we extract the parameter-y goodness from <object> tags.
2557
2558         * khtml/rendering/render_frames.cpp:
2559         (RenderPartObject::updateWidget):
2560
2561 2005-03-01  Richard Williamson   <rjw@apple.com>
2562
2563         Fixed <rdar://problem/3990258> REGRESSION (125.12-181): top of picture that spans two pages is cut off on print from Safari
2564
2565         The problem was due to incorrect "object truncation" in  RenderFlow::paintLines.  
2566         We attempt to push objects down if they don't fit on a page at
2567         paint time.  If the attempt to push object down failed we just
2568         didn't paint at all.
2569
2570         Reviewed by Hyatt.
2571
2572         * khtml/rendering/render_flow.cpp:
2573         (RenderFlow::paintLines):
2574
2575 2005-03-01  Chris Blumenberg  <cblu@apple.com>
2576
2577         Fixed: <rdar://problem/4030669> smart delete does not delete spaces from pasted content
2578
2579         Reviewed by rjw.
2580
2581         * khtml/editing/htmlediting.cpp:
2582         (khtml::DeleteSelectionCommand::initializePositionData): pass true for treatNBSPAsWhiteSpace to leadingWhitespacePosition and trailingWhitespacePosition when testing whether or not we have to delete those characters as well.
2583         * khtml/editing/jsediting.cpp: pass true for smartDelete when the selection granularity is WORD. This allows us to write smart delete layout tests.
2584         * layout-tests/editing/deleting/smart-delete-001-expected.txt: Added.
2585         * layout-tests/editing/deleting/smart-delete-001.html: Added.
2586         * layout-tests/editing/deleting/smart-delete-002-expected.txt: Added.
2587         * layout-tests/editing/deleting/smart-delete-002.html: Added.
2588
2589 2005-03-01  Ken Kocienda  <kocienda@apple.com>
2590
2591         Reviewed by Vicki
2592
2593         Fix for this bug:
2594         
2595         <rdar://problem/4030068> Trailing <return> gets eaten when pasted at the end of a document
2596
2597         * khtml/editing/htmlediting.cpp:
2598         (khtml::ReplaceSelectionCommand::doApply): Add code to handle formerly-unhandled end-of-document case.
2599
2600 2005-03-01  Maciej Stachowiak  <mjs@apple.com>
2601
2602         Reviewed by Vicki.
2603
2604         <rdar://problem/4003774> REGRESSION(125-181): JavaScript problems @ Yankee/Dixie quiz
2605         
2606         Reworked how scopes are set up for event handlers to match other
2607         browser. This includes the following changes:
2608
2609         - Special scope entries are set up at the time the event handler
2610         is created, not at the time it fires.
2611
2612         - Special scope is only set up for event handlers set in the html
2613         source through an html attribute, not for handlers set using
2614         addEventHandler or setting JS properties like onclick through
2615         JavaScript.
2616
2617         - Special scope is based on the DOM node on which the handler is
2618         an attribute, not the event target.
2619
2620         This fixes the regression while allowing the fix to
2621         <rdar://problem/3798453> (DIG: getting variable with same name as
2622         DOM element attribute gets attribute value instead) to keep
2623         working correctly.
2624         
2625         * khtml/ecma/kjs_events.cpp:
2626         (JSEventListener::handleEvent):
2627         (JSLazyEventListener::JSLazyEventListener):
2628         (JSLazyEventListener::parseCode):
2629         * khtml/ecma/kjs_events.h:
2630         * khtml/ecma/kjs_proxy.cpp:
2631         (KJSProxyImpl::createHTMLEventHandler):
2632         * khtml/ecma/kjs_proxy.h:
2633         * khtml/ecma/kjs_window.cpp:
2634         (Window::getJSLazyEventListener):
2635         * khtml/ecma/kjs_window.h:
2636         * khtml/html/html_baseimpl.cpp:
2637         (HTMLBodyElementImpl::parseHTMLAttribute):
2638         (HTMLFrameElementImpl::parseHTMLAttribute):
2639         (HTMLFrameSetElementImpl::parseHTMLAttribute):
2640         * khtml/html/html_elementimpl.cpp:
2641         (HTMLElementImpl::parseHTMLAttribute):
2642         * khtml/html/html_formimpl.cpp:
2643         (DOM::HTMLFormElementImpl::parseHTMLAttribute):
2644         (DOM::HTMLButtonElementImpl::parseHTMLAttribute):
2645         (DOM::HTMLInputElementImpl::parseHTMLAttribute):
2646         (DOM::HTMLLabelElementImpl::parseHTMLAttribute):
2647         (DOM::HTMLSelectElementImpl::parseHTMLAttribute):
2648         (DOM::HTMLTextAreaElementImpl::parseHTMLAttribute):
2649         * khtml/html/html_imageimpl.cpp:
2650         (HTMLImageElementImpl::parseHTMLAttribute):
2651         * khtml/html/html_objectimpl.cpp:
2652         (HTMLObjectElementImpl::parseHTMLAttribute):
2653         * khtml/khtml_part.cpp:
2654         (KHTMLPart::createHTMLEventListener):
2655         * khtml/khtml_part.h:
2656         * khtml/xml/dom_docimpl.cpp:
2657         (DocumentImpl::createHTMLEventListener):
2658         * khtml/xml/dom_docimpl.h:
2659
2660 === Safari-401 ===
2661
2662 2005-03-01  Chris Blumenberg  <cblu@apple.com>
2663
2664         Backed out my patch since the tree was closed.
2665
2666         * khtml/editing/htmlediting.cpp:
2667         (khtml::DeleteSelectionCommand::initializePositionData):
2668         * khtml/editing/jsediting.cpp:
2669
2670 2005-03-01  Chris Blumenberg  <cblu@apple.com>
2671
2672         Fixed: <rdar://problem/4030669> smart delete does not delete spaces from pasted content
2673
2674         Reviewed by rjw.
2675
2676         * khtml/editing/htmlediting.cpp:
2677         (khtml::DeleteSelectionCommand::initializePositionData): pass true for treatNBSPAsWhiteSpace to leadingWhitespacePosition and trailingWhitespacePosition when testing whether or not we have to delete those characters as well.
2678         * khtml/editing/jsediting.cpp: pass true for smartDelete when the selection granularity is WORD. This allows us to write smart delete layout tests.
2679         * layout-tests/editing/deleting/smart-delete-001-expected.txt: Added.
2680         * layout-tests/editing/deleting/smart-delete-001.html: Added.
2681         * layout-tests/editing/deleting/smart-delete-002-expected.txt: Added.
2682         * layout-tests/editing/deleting/smart-delete-002.html: Added.
2683
2684 2005-03-01  Ken Kocienda  <kocienda@apple.com>
2685
2686         Reviewed by Vicki
2687
2688         Fix for this bug:
2689         
2690         <rdar://problem/4030068> Trailing <return> gets eaten when pasted at the end of a document
2691
2692         * khtml/editing/htmlediting.cpp:
2693         (khtml::ReplaceSelectionCommand::doApply): Add code to handle formerly-unhandled end-of-document case.
2694
2695 2005-03-01  David Harrison  <harrison@apple.com>
2696
2697         Reviewed by Chris.
2698
2699         <rdar://problem/3915560> Mail would like an SPI to enable "smart" text paste/drop
2700
2701         * kwq/WebCoreBridge.h:
2702         * kwq/WebCoreBridge.mm:
2703         (-[WebCoreBridge smartDeleteRangeForProposedRange:]):
2704         (-[WebCoreBridge smartInsertForString:replacingRange:beforeString:afterString:]):
2705         New.
2706
2707 2005-03-01  Chris Blumenberg  <cblu@apple.com>
2708
2709         Fixed: <rdar://problem/4030404> selection granularity should be set when extending selection via JS
2710
2711         Reviewed by kocienda.
2712
2713         * khtml/ecma/kjs_window.cpp:
2714         (SelectionFunc::tryCall): set the granularity on the part. This will allow us to write smart paste layout tests.
2715         * layout-tests/editing/pasteboard/smart-paste-001-expected.txt: Added.
2716         * layout-tests/editing/pasteboard/smart-paste-001.html: Added.
2717         * layout-tests/editing/pasteboard/smart-paste-002-expected.txt: Added.
2718         * layout-tests/editing/pasteboard/smart-paste-002.html: Added.
2719         * layout-tests/editing/pasteboard/smart-paste-003-expected.txt: Added.
2720         * layout-tests/editing/pasteboard/smart-paste-003.html: Added.
2721         * layout-tests/editing/pasteboard/smart-paste-004-expected.txt: Added.
2722         * layout-tests/editing/pasteboard/smart-paste-004.html: Added.
2723         * layout-tests/editing/pasteboard/smart-paste-005-expected.txt: Added.
2724         * layout-tests/editing/pasteboard/smart-paste-005.html: Added.
2725         * layout-tests/editing/pasteboard/smart-paste-006-expected.txt: Added.
2726         * layout-tests/editing/pasteboard/smart-paste-006.html: Added.
2727         * layout-tests/editing/pasteboard/smart-paste-007-expected.txt: Added.
2728         * layout-tests/editing/pasteboard/smart-paste-007.html: Added.
2729
2730 2005-03-01  Chris Blumenberg  <cblu@apple.com>
2731
2732         Fixed: <rdar://problem/4029934> smart paste with plain text can add too many spaces
2733
2734         Reviewed by kocienda.
2735
2736         * khtml/editing/htmlediting.cpp:
2737         (khtml::ReplaceSelectionCommand::doApply): pass true for treatNBSPAsWhitespace to leadingWhitespacePosition and trailingWhitespacePosition
2738         * khtml/xml/dom_position.cpp:
2739         (DOM::isWS): take treatNBSPAsWhitespace param
2740         (DOM::Position::leadingWhitespacePosition): ditto
2741         (DOM::Position::trailingWhitespacePosition): ditto
2742         * khtml/xml/dom_position.h:
2743
2744 2005-03-01  Ken Kocienda  <kocienda@apple.com>
2745
2746         Reviewed by John
2747
2748         Fix for this bug:
2749         
2750         <rdar://problem/3996605> Insert paragraph command puts new block in wrong place, creating difficult-to-handle HTML
2751
2752         * khtml/editing/htmlediting.cpp:
2753         (khtml::InsertParagraphSeparatorCommand::doApply): Look for the upstream-most block to insert after
2754         when at the visible end of a block. This helps to avoid some undesirable sequences of markup which
2755         Dave says will be vary hard to render. Changing the command in this way avoids the "limitations"
2756         of the render tree by not asking it to render markup we do not want to make anyway.
2757         
2758         All these tests change, but either in insignificant ways, or for the better.
2759         
2760         * layout-tests/editing/deleting/delete-3959464-fix-expected.txt:
2761         * layout-tests/editing/inserting/insert-div-001-expected.txt:
2762         * layout-tests/editing/inserting/insert-div-002-expected.txt:
2763         * layout-tests/editing/inserting/insert-div-004-expected.txt:
2764         * layout-tests/editing/inserting/insert-div-005-expected.txt:
2765         * layout-tests/editing/inserting/insert-div-009-expected.txt:
2766         * layout-tests/editing/inserting/insert-div-024-expected.txt:
2767         * layout-tests/editing/pasteboard/paste-text-011-expected.txt:
2768         * layout-tests/editing/pasteboard/paste-text-013-expected.txt:
2769         * layout-tests/editing/pasteboard/paste-text-015-expected.txt:
2770         * layout-tests/editing/style/block-style-004-expected.txt:
2771         * layout-tests/editing/style/block-style-005-expected.txt:
2772         * layout-tests/editing/style/block-style-006-expected.txt:
2773         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt:
2774         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt:
2775         * layout-tests/editing/style/remove-underline-after-paragraph-expected.txt:
2776         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold-expected.txt:
2777
2778         New test to check specific problem mentioned in the bug.
2779
2780         * layout-tests/editing/inserting/insert-div-026-expected.txt: Added.
2781         * layout-tests/editing/inserting/insert-div-026.html: Added.
2782
2783 2005-02-28  Maciej Stachowiak  <mjs@apple.com>
2784
2785         Reviewed by Darin.
2786
2787         <rdar://problem/4002864> REGRESSION(125-146) getElementById in onload fails in a test case involving external resources
2788         
2789         Moved management of elementById hashtable from attach/detach to
2790         insertedIntoDocument/removedFromDocument, to avoid being thrown
2791         off by temporary detaches due to style recalcs.
2792         
2793         * khtml/xml/dom_elementimpl.cpp:
2794         (ElementImpl::insertedIntoDocument):
2795         (ElementImpl::removedFromDocument):
2796         (ElementImpl::attach):
2797         (ElementImpl::updateId):
2798         * khtml/xml/dom_elementimpl.h:
2799
2800         Make sure that insertedIntoDocument is called before firing any
2801         DOM events.
2802         
2803         * khtml/xml/dom_nodeimpl.cpp:
2804         (NodeBaseImpl::dispatchChildInsertedEvents): 
2805
2806 2005-02-28  David Hyatt  <hyatt@apple.com>
2807
2808         Fix for 4028999, safari crashes when resetting if mallocsribble is on.  Clip rects were being cleared using dead
2809         render objects.  Change the ordering.
2810         
2811         Reviewed by rjw
2812
2813         * khtml/rendering/render_box.cpp:
2814         (RenderBox::detach):
2815         * khtml/rendering/render_layer.cpp:
2816         (RenderLayer::~RenderLayer):
2817
2818 2005-02-28  Chris Blumenberg  <cblu@apple.com>
2819
2820         Fixed: <rdar://problem/4024786> REGRESSION (Mail): "Smart paste" plain-text word into Blot leaves insertion point misplaced
2821
2822         Reviewed by kocienda.
2823
2824         * khtml/editing/htmlediting.cpp:
2825         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Call updateLayout so caretMinOffset and caretMaxOffset return correct values.
2826
2827 2005-02-28  John Sullivan  <sullivan@apple.com>
2828
2829         Reviewed by Ken.
2830         
2831         - WebCore part of fix for <rdar://problem/4023490> REGRESSION (125-185): Tabbing through links 
2832         on frameset page gets stuck at end (tivofaq.com)
2833
2834         * kwq/WebCoreBridge.h:
2835         add nextValidKeyViewOutsideWebFrameViews (code is in WebKit)
2836
2837 2005-02-28  Ken Kocienda  <kocienda@apple.com>
2838
2839         Reviewed by John
2840
2841         Fix for this bug:
2842         
2843         <rdar://problem/3972665> 8A360: HTML message partially truncated on left hand side, text-indent from Script Editor
2844
2845         * khtml/css/css_computedstyle.cpp: inheritableProperties array now defined in css_valueimpl.cpp.
2846         * khtml/css/css_valueimpl.cpp: Define inheritableProperties array here.
2847         (DOM::CSSMutableStyleDeclarationImpl::copyBlockProperties): Use new name for blockProperties, and use the new
2848         constant for the number of items in the array.
2849         (DOM::CSSMutableStyleDeclarationImpl::removeBlockProperties): Ditto.
2850         (DOM::CSSMutableStyleDeclarationImpl::removeInheritableProperties): New function.
2851         * khtml/css/css_valueimpl.h: Declare inheritableProperties array and numInheritableProperties extern so they
2852         can be defined in css_valueimpl.cpp and used in css_computedstyle.cpp.
2853         * khtml/editing/htmlediting.cpp:
2854         (khtml::ReplacementFragment::removeStyleNodes): This code was misguided, and removed too much style from HTML
2855         elements. Now, it removes from HTML elements only the styles that we replace later with a call to applyStyle().
2856         Also, add ID_B to list of inline "style" nodes we are willing to remove. Leaving it off was an oversight.
2857
2858         * layout-tests/editing/pasteboard/paste-text-011-expected.txt: ID_B fix made this result change, without any
2859         visible change in the test.
2860         
2861         New test:
2862         
2863         * layout-tests/editing/style/smoosh-styles-003.html
2864         * layout-tests/editing/style/smoosh-styles-003-expected.txt
2865
2866 2005-02-28  Richard Williamson   <rjw@apple.com>
2867
2868         Fixed <rdar://problem/4026985> CrashTracer: ...14 crashes at com.apple.WebCore: -[KWQPageState invalidate] + 32
2869
2870         Added more nil checking and ASSERTS.
2871         Without a reproducible case this is hard to definitively resolve.
2872
2873         Reviewed by John Sullivan.
2874
2875         * kwq/KWQPageState.mm:
2876         (-[KWQPageState invalidate]):
2877
2878 2005-02-28  Richard Williamson   <rjw@apple.com>
2879
2880         Fixed <rdar://problem/4027702> 3.5% performance regression btwn Safari-188 and Safari-400
2881
2882         I inadvertently checked in some debugging code that disabled
2883         style sharing.  Backed out that change.
2884
2885         * khtml/css/cssstyleselector.cpp:
2886         (khtml::CSSStyleSelector::styleForElement):
2887
2888 2005-02-28  Chris Blumenberg  <cblu@apple.com>
2889
2890         Fixed: <rdar://problem/4026639> www.bmw.ca configurator does not work with Safari
2891
2892         Reviewed by john.
2893
2894         * khtml/ecma/kjs_html.cpp:
2895         (KJS::HTMLElement::tryGet): when frameset.<name of frame child> is called, return the window object of the frame child
2896
2897 2005-02-28  Ken Kocienda  <kocienda@apple.com>
2898
2899         Reviewed by Chris
2900
2901         Fix for this bug:
2902         
2903         <rdar://problem/4026906> Paste of HTML table content can break table structure
2904
2905         * khtml/editing/htmlediting.cpp:
2906         (khtml::ReplacementFragment::pruneEmptyNodes): Call new isProbablyTableStructureNode() function to prevent
2907         removal of empty table structure nodes.
2908         (khtml::ReplacementFragment::removeUnrenderedNodesUsingTestRendering): Ditto.
2909         (khtml::isProbablyTableStructureNode): New helper function.
2910         * khtml/editing/htmlediting.h: Declare new helper.
2911
2912 2005-02-28  Chris Blumenberg  <cblu@apple.com>
2913
2914         Fixed: <rdar://problem/4023566> Stickies: Crash in ReplacementFragment::insertFragmentForTestRendering on paste
2915
2916         Reviewed by kocienda.
2917
2918         * khtml/editing/htmlediting.cpp:
2919         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): ref and deref the element while it is "floating"
2920         (khtml::ReplacementFragment::insertFragmentForTestRendering): ditto
2921         (khtml::floatRefdElement): new, keeps an element alive while its ref count is 0
2922         (khtml::createDefaultParagraphElement): removed commented out code
2923         (khtml::createBlockPlaceholderElement): ref the element and return it as "floating"
2924         (khtml::createFontElement): ditto
2925         (khtml::createStyleSpanElement): ditto
2926         * khtml/editing/htmlediting.h:
2927
2928 2005-02-27  Maciej Stachowiak  <mjs@apple.com>
2929
2930         Reviewed by Vicki.
2931
2932         <rdar://problem/3993557> REGRESSION (125-180-ish): getElementsByTagName no longer works with namespace designations
2933         
2934         * khtml/xml/dom_nodeimpl.cpp:
2935         (NodeBaseImpl::getElementsByTagNameNS): When no namespace is specified, find elements
2936         of the specified name in any namespace to match Mozilla and earlier Safari behavior.
2937
2938 2005-02-25  Darin Adler  <darin@apple.com>
2939
2940         Reviewed by Adele.
2941
2942         - fixed <rdar://problem/4025618> Crash while searching at hollywoodvideo.com
2943
2944         * khtml/html/html_formimpl.h: Added valueWithDefault.
2945         * khtml/html/html_formimpl.cpp:
2946         (DOM::HTMLInputElementImpl::appendFormData): Call valueWithDefault instead of going at the render object
2947         to try to get the default value; there may be no render object if this is display:none.
2948         (DOM::HTMLInputElementImpl::valueWithDefault): Added. Knows about the defaults for "submit" and "reset"
2949         buttons; otherwise just returns the value as-is.
2950
2951         * khtml/rendering/render_form.h: Removed the defaultLabel member functions.
2952         * khtml/rendering/render_form.cpp:
2953         (RenderSubmitButton::rawText): Call valueWithDefault instead of using defaultLabel function here on
2954         the render side. The DOM needs to know how to deal with the default anyway for form submission.
2955         (RenderSubmitButton::defaultLabel): Removed.
2956         (RenderResetButton::defaultLabel): Removed.
2957         (RenderPushButton::defaultLabel): Removed.
2958
2959 2005-02-25  Darin Adler  <darin@apple.com>
2960
2961         Reviewed by John.
2962
2963         - fixed <rdar://problem/4025088> window onblur and onfocus don't fire when text field has focus
2964
2965         * kwq/KWQKHTMLPart.h: Added setWindowHasFocus function and m_windowHasFocus data member.
2966         * kwq/KWQKHTMLPart.mm:
2967         (KWQKHTMLPart::setDisplaysWithFocusAttributes): Took out the code that sends the focus and blur events.
2968         (KWQKHTMLPart::setWindowHasFocus): Put that code here instead.
2969
2970         * kwq/WebCoreBridge.h: Added setWindowHasFocus: method to the bridge.
2971         * kwq/WebCoreBridge.mm: (-[WebCoreBridge setWindowHasFocus:]): Added. Calls method on the part.
2972
2973 2005-02-25  Darin Adler  <darin@apple.com>
2974
2975         Reviewed by John.
2976
2977         - re-fixed <rdar://problem/3665430> horizontal scroll bar of text area does not show, even when text is wide in "no wrap" mode
2978
2979         * kwq/KWQTextArea.mm: (-[KWQTextArea _updateTextViewWidth]): Don't change the text view width
2980         to match the text area's width in the "wrap" case.
2981
2982 2005-02-25  Ken Kocienda  <kocienda@apple.com>
2983
2984         Reviewed by Hyatt
2985
2986         Fix for this bug:
2987         
2988         <rdar://problem/4021518> 8A394 Mail crashes during paste: khtml::RootInlineBox::closestLeafChildForXPos
2989
2990         * khtml/editing/visible_units.cpp:
2991         (khtml::previousLinePosition): Adding an updateLayout call at the start of the function fixes the crash, since
2992         we caught line boxes in a not-completely-updated state.
2993         (khtml::nextLinePosition): Ditto.
2994
2995 2005-02-25  David Hyatt  <hyatt@apple.com>
2996
2997         Fix for 4010774, make sure to avoid an O(N^2) algorithm in nextRenderer() that is triggered when large
2998         DOM subtrees are inserted into documents via one insert/append call.
2999         
3000         Reviewed by kocienda
3001
3002         * khtml/xml/dom_nodeimpl.cpp:
3003         (NodeImpl::nextRenderer):
3004
3005 2005-02-25  Richard Williamson   <rjw@apple.com>
3006
3007         Fixed <rdar://problem/3382926> Bidi neutrals at RTL/LTR boundaries not handled correctly.
3008
3009         Second pass at fixing 3382926 w/o causing layout regressions.  Same concept:
3010         if directionality of text's element is RTL and first character has neutral directionality
3011         then set the initial directionality to RTL.
3012
3013         Reviewed by Hyatt.
3014
3015         * khtml/rendering/bidi.cpp:
3016         (khtml::RenderBlock::bidiReorderLine):
3017         (khtml::RenderBlock::determineStartPosition):
3018
3019 === Safari-400 ===
3020
3021 2005-02-25  Ken Kocienda  <kocienda@apple.com>
3022
3023         Reviewed by me
3024
3025         Roll out Chris' change to fix this bug:
3026         
3027         <rdar://problem/4023566> Stickies: Crash in ReplacementFragment::insertFragmentForTestRendering on paste
3028         
3029         That code change is responsible for all these new crashers:
3030         
3031         <rdar://problem/4025177> crash copying safari.apple.com into Blot document
3032         <rdar://problem/4025184> crash in DOM::NodeImpl::parentNode copying "New!" from google.com to Blot
3033         <rdar://problem/4025214> crash in DOM::NodeImpl::getRect loading paste-match-style-001.html
3034
3035         Since we wish to close the tree for a build right now, I am rolling out rather than investigating.
3036
3037         * khtml/editing/htmlediting.cpp:
3038         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded)
3039         (khtml::ReplacementFragment::insertFragmentForTestRendering)
3040         (khtml::createDefaultParagraphElement)
3041         (khtml::createBlockPlaceholderElement)
3042         (khtml::createFontElement)
3043         (khtml::createStyleSpanElement)
3044         * khtml/editing/htmlediting.h
3045
3046 2005-02-25  Ken Kocienda  <kocienda@apple.com>
3047
3048         Reviewed by John
3049
3050         Fix for this bug:
3051         
3052         <rdar://problem/4020108> Pasting text into message makes Mail crash reproducibly
3053
3054         Note that, even with this fix, development build will crash until this bug is fixed:
3055         <rdar://problem/4024996> Applying block styles can cause assertion failure in inline style removal
3056         
3057         This will not crash deployment builds, so I am going to land.
3058
3059         * khtml/editing/htmlediting.cpp:
3060         (khtml::ApplyStyleCommand::applyBlockStyle): Applying block styles can make the loop to reach beyondEnd
3061         fail since the structure of the document can change. Cache the next node first before operating on it,
3062         as we do elsewhere.
3063
3064 2005-02-25  Vicki Murley <vicki@apple.com>
3065
3066         - recommit this change, since rolling it out did NOT fix the performance regression!
3067
3068     2005-02-23  Darin Adler  <darin@apple.com>
3069
3070         Reviewed by John.
3071
3072         - fixed <rdar://problem/4011405> REGRESSION (180-181): Unconfirmed text disappears when text focus moves
3073
3074         The key was to change things around so that we don't push text from the DOM to the widget
3075         unless the DOM has actually been changed. This prevents the code path that wipes out inline input
3076         during the blur process.
3077
3078         * khtml/html/html_formimpl.cpp:
3079         (DOM::HTMLInputElementImpl::HTMLInputElementImpl): Start m_valueMatchesRenderer as false.
3080         (DOM::HTMLInputElementImpl::parseHTMLAttribute): Set m_valueMatchesRenderer to false when a
3081         new value is set here.
3082         (DOM::HTMLInputElementImpl::setValue): Set m_valueMatchesRenderer to false when a new value
3083         is set here.
3084         (DOM::HTMLInputElementImpl::setValueFromRenderer): Added. Sets m_value, sets m_valueMatchesRenderer
3085         to true, and also sends out the input event. It's better to have this here than in the renderer code.
3086         (DOM::HTMLTextAreaElementImpl::HTMLTextAreaElementImpl): Start m_valueIsValid as false (replaces
3087         m_dirtyvalue) and m_valueMatchesRenderer as false.
3088         (DOM::HTMLTextAreaElementImpl::updateValue): Added. Factored this out from the value function. Uses
3089         the new booleans and keeps them up to date, specifically setting m_valueMatchesRenderer based on
3090         where the value came from.
3091         (DOM::HTMLTextAreaElementImpl::value): Updated to call updateValue to do most of the work.
3092         (DOM::HTMLTextAreaElementImpl::setValue): Set both m_valueIsValid and m_valueMatchesRenderer.
3093         (DOM::HTMLTextAreaElementImpl::setDefaultValue): Take parameter by reference.
3094
3095         * khtml/html/html_formimpl.h: Added setValueFromRenderer, valueMatchesRenderer, setValueMatchesRenderer,
3096         and m_valueMatchesRenderer to input element. For textarea element, made some parameters pass DOMString
3097         by reference, and added invalidateValue, updateValue, valueMatchesRenderer, and setValueMatchesRenderer.
3098
3099         * khtml/rendering/render_form.cpp:
3100         (RenderLineEdit::updateFromElement): Don't re-get the value from the DOM if valueMatchesRenderer
3101         is true.
3102         (RenderLineEdit::slotTextChanged): Call setValueFromRenderer instead of manipulating the DOM
3103         directly.
3104         (RenderTextArea::detach): Call updateValue instead of calling value for its side effect.
3105         (RenderTextArea::handleFocusOut): Ditto.
3106         (RenderTextArea::updateFromElement): Call updateValue and then not re-get the value from the
3107         DOM if valueMatchesRenderer is true.
3108         (RenderTextArea::slotTextChanged): Call invalidateValue instead of directly setting m_dirtyvalue to true.
3109
3110 2005-02-25  Chris Blumenberg  <cblu@apple.com>
3111
3112         Fixed: <rdar://problem/4023566> Stickies: Crash in ReplacementFragment::insertFragmentForTestRendering on paste
3113
3114         Reviewed by darin.
3115
3116         * khtml/editing/htmlediting.cpp:
3117         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded):
3118         (khtml::ReplacementFragment::insertFragmentForTestRendering):
3119         (khtml::floatRefdElement):
3120         (khtml::createDefaultParagraphElement):
3121         (khtml::createBlockPlaceholderElement):
3122         (khtml::createFontElement):
3123         (khtml::createStyleSpanElement):
3124         * khtml/editing/htmlediting.h:
3125
3126 2005-02-25  Darin Adler  <darin@apple.com>
3127
3128         * kwq/character-sets.txt: Checked in updated file. This new file has no effect, because none of the
3129         changes affect character sets that we support, but it's good to have the latest file in here, and
3130         completely safe because I checked that the generated files have not changed.
3131
3132 2005-02-25  Vicki Murley <vicki@apple.com>
3133
3134         Reviewed by Darin.
3135  
3136         - back out this change, since it causes a 3.5% performance regression
3137
3138     2005-02-23  Darin Adler  <darin@apple.com>
3139
3140         Reviewed by John.
3141
3142         - fixed <rdar://problem/4011405> REGRESSION (180-181): Unconfirmed text disappears when text focus moves
3143
3144         The key was to change things around so that we don't push text from the DOM to the widget
3145         unless the DOM has actually been changed. This prevents the code path that wipes out inline input
3146         during the blur process.
3147
3148         * khtml/html/html_formimpl.cpp:
3149         (DOM::HTMLInputElementImpl::HTMLInputElementImpl): Start m_valueMatchesRenderer as false.
3150         (DOM::HTMLInputElementImpl::parseHTMLAttribute): Set m_valueMatchesRenderer to false when a
3151         new value is set here.
3152         (DOM::HTMLInputElementImpl::setValue): Set m_valueMatchesRenderer to false when a new value
3153         is set here.
3154         (DOM::HTMLInputElementImpl::setValueFromRenderer): Added. Sets m_value, sets m_valueMatchesRenderer
3155         to true, and also sends out the input event. It's better to have this here than in the renderer code.
3156         (DOM::HTMLTextAreaElementImpl::HTMLTextAreaElementImpl): Start m_valueIsValid as false (replaces
3157         m_dirtyvalue) and m_valueMatchesRenderer as false.
3158         (DOM::HTMLTextAreaElementImpl::updateValue): Added. Factored this out from the value function. Uses
3159         the new booleans and keeps them up to date, specifically setting m_valueMatchesRenderer based on
3160         where the value came from.
3161         (DOM::HTMLTextAreaElementImpl::value): Updated to call updateValue to do most of the work.
3162         (DOM::HTMLTextAreaElementImpl::setValue): Set both m_valueIsValid and m_valueMatchesRenderer.
3163         (DOM::HTMLTextAreaElementImpl::setDefaultValue): Take parameter by reference.
3164
3165         * khtml/html/html_formimpl.h: Added setValueFromRenderer, valueMatchesRenderer, setValueMatchesRenderer,
3166         and m_valueMatchesRenderer to input element. For textarea element, made some parameters pass DOMString
3167         by reference, and added invalidateValue, updateValue, valueMatchesRenderer, and setValueMatchesRenderer.
3168
3169         * khtml/rendering/render_form.cpp:
3170         (RenderLineEdit::updateFromElement): Don't re-get the value from the DOM if valueMatchesRenderer
3171         is true.
3172         (RenderLineEdit::slotTextChanged): Call setValueFromRenderer instead of manipulating the DOM
3173         directly.
3174         (RenderTextArea::detach): Call updateValue instead of calling value for its side effect.
3175         (RenderTextArea::handleFocusOut): Ditto.
3176         (RenderTextArea::updateFromElement): Call updateValue and then not re-get the value from the
3177         DOM if valueMatchesRenderer is true.
3178         (RenderTextArea::slotTextChanged): Call invalidateValue instead of directly setting m_dirtyvalue to true.
3179
3180 2005-02-25  Darin Adler  <darin@apple.com>
3181
3182         Reviewed by Chris.
3183
3184         - fixed <rdar://problem/4024786> REGRESSION (Mail): "Smart paste" plain-text word into Blot leaves insertion point misplaced
3185
3186         * khtml/editing/htmlediting.cpp: (khtml::ReplaceSelectionCommand::doApply):
3187         Use the insertNodeAfterAndUpdateNodesInserted and insertNodeBeforeAndUpdateNodesInserted
3188         functions to add the leading and trailing spaces for smart paste.
3189
3190 2005-02-25  David Hyatt  <hyatt@apple.com>
3191
3192         Back out fix for 3382926, since it breaks LTR text inside RTL contexts.
3193         
3194         Reviewed by john
3195
3196         * khtml/rendering/bidi.cpp:
3197         (khtml::BidiIterator::direction):
3198
3199 2005-02-25  David Hyatt  <hyatt@apple.com>
3200
3201         Fix for 3975039, scrolling is slow in huge RSS views.  Optimize the calculation of clip rects for overflow:hidden
3202         layers.  Also optimize layer movement when scrolling overflow sections.
3203         
3204         Reviewed by darin
3205
3206         * khtml/rendering/render_layer.cpp:
3207         (throw):
3208         (ClipRects::operator delete):
3209         (ClipRects::detach):
3210         (RenderLayer::RenderLayer):
3211         (RenderLayer::~RenderLayer):
3212         (RenderLayer::updateLayerPosition):
3213         (RenderLayer::removeOnlyThisLayer):
3214         (RenderLayer::insertOnlyThisLayer):
3215         (RenderLayer::scrollToOffset):
3216         (RenderLayer::hitTest):
3217         (RenderLayer::calculateClipRects):
3218         (RenderLayer::calculateRects):
3219         (RenderLayer::containsPoint):
3220         (RenderLayer::clearClipRects):
3221         (RenderLayer::clearClipRect):
3222         * khtml/rendering/render_layer.h:
3223         (khtml::ClipRects::m_refCnt):
3224         (khtml::ClipRects::overflowClipRect):
3225         (khtml::ClipRects::fixedClipRect):
3226         (khtml::ClipRects::posClipRect):
3227         (khtml::ClipRects::ref):
3228         (khtml::ClipRects::deref):
3229         (khtml::RenderLayer::clipRects):
3230         * khtml/rendering/render_object.cpp:
3231         (RenderObject::setStyle):
3232
3233 2005-02-24  Maciej Stachowiak  <mjs@apple.com>
3234
3235         Reviewed by Darin and Dave a while ago.
3236
3237         <rdar://problem/3996685> REGRESSION: Crash in KWQVectorImpl::at loading http://maps.google.com/mapfiles/homepanel.xsl
3238         
3239         * kwq/WebCoreBridge.mm:
3240         (formElementFromDOMElement): Check for isHTMLElement() as well as
3241         id() == ID_FORM. This seems like an impossible situation, but
3242         papering over it seems more expedient for the time being.
3243
3244 2005-02-24  Richard Williamson   <rjw@apple.com>
3245
3246         Fixed <rdar://problem/3382926> Bidi neutrals at RTL/LTR boundaries not handled correctly.
3247
3248         Use mirror characters correctly when rendering with RTL directionality.
3249
3250         Reviewed by Hyatt.
3251
3252         * khtml/rendering/bidi.cpp:
3253         (khtml::BidiIterator::direction):
3254
3255 2005-02-24  Richard Williamson   <rjw@apple.com>
3256
3257         Fixed <rdar://problem/3985889> REGRESSION (125-180): setting <img> src to GIF that already animated does not animate; just shows final frame
3258         
3259         Reviewed by Hyatt.
3260
3261         * WebCore.pbproj/project.pbxproj:
3262         * khtml/html/html_imageimpl.cpp:
3263         (HTMLImageLoader::updateFromElement):
3264         * khtml/rendering/render_image.cpp:
3265         (RenderImage::resetAnimation):
3266         * khtml/rendering/render_image.h:
3267         * khtml/rendering/render_list.cpp:
3268         (RenderListMarker::setStyle):
3269         (RenderListMarker::paint):
3270         * khtml/rendering/render_list.h:
3271         * kwq/KWQPixmap.h:
3272         * kwq/KWQPixmap.mm:
3273         (QPixmap::QPixmap):
3274         (QPixmap::resetAnimation):
3275         * kwq/WebCoreImageRenderer.h:
3276
3277 2005-02-24  Chris Blumenberg  <cblu@apple.com>
3278
3279         Fixed: <rdar://problem/4020110> Safari crashes in setAllData while taking a www.zoomerang.com survey
3280
3281         Reviewed by rjw.
3282
3283         * kwq/KWQResourceLoader.mm:
3284         (-[KWQResourceLoader finishJobAndHandle:]): clear the job after we've deleted to avoid reentrancy
3285
3286 2005-02-24  Darin Adler  <darin@apple.com>
3287
3288         Reviewed by Vicki.
3289
3290         - fixed <rdar://problem/4023360> REGRESSION (186-187): image file upload is broken at pep.apple.com
3291
3292         * khtml/html/html_formimpl.cpp: (DOM::HTMLInputElementImpl::appendFormData): Return true after
3293         setting up the form data for an uploaded file. The old code would fall through to the ISINDEX
3294         case and send double form data (the filename instead of the file contents the second time).
3295
3296 2005-02-24  David Harrison  <harrison@apple.com>
3297
3298         Reviewed by Ken.
3299         
3300         <rdar://problem/3990849> AX: textMarkerRange for an AXUIElement within an AXWebArea
3301
3302         * kwq/KWQAccObject.mm:
3303         (-[KWQAccObject textMarkerRange]):
3304         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
3305         (-[KWQAccObject doAXTextMarkerRangeForUIElement:]):
3306         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
3307         Added AXTextMarkerRangeForUIElement, or you can send textMarkerRange to the UIElement itself.
3308
3309 2005-02-24  David Harrison  <harrison@apple.com>
3310
3311         Reviewed by Vicki.
3312
3313         <rdar://problem/4004279> 3 AXSelectedTextChanged notifications are firing each time I type a character
3314
3315         * khtml/xml/dom_docimpl.cpp:
3316         (DocumentImpl::updateSelection):
3317         Send notification only if the selection is not null.  This safely ignores transitory selections set during editing.
3318
3319 2005-02-24  Darin Adler  <darin@apple.com>
3320
3321         Reviewed by John.
3322
3323         - fixed <rdar://problem/3987619> in some cases, text doesn't resize with Format->Style->Bigger/Smaller
3324
3325         * khtml/editing/htmlediting.cpp:
3326         (khtml::ApplyStyleCommand::applyRelativeFontStyleChange): Only call nodeFullySelected for non-text nodes.
3327         Text nodes are already split so they're either in the range and full selected or out of the range.
3328         And nodeFullySelected doesn't work for text nodes.
3329         (khtml::ApplyStyleCommand::nodeFullySelected): Add an assertion, since this function only works for elements,
3330         not text nodes.
3331         (khtml::ApplyStyleCommand::nodeFullyUnselected): Ditto.
3332
3333         - make big improvement in <rdar://problem/3953636> Mail hung for ~10sec changing font of 84328 characters: khtml::ApplyStyleCommand::nodeFullySelected
3334