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