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