WebCore:
[WebKit-https.git] / WebCore / ChangeLog
1 2007-09-12  Justin Garcia  <justin.garcia@apple.com>
2
3         Reviewed by Tristan.
4
5         <rdar://problem/5469868> 
6         GoogleDocs: A hang occurs when applying list styling to a selection in a <table>
7         
8         When list insertion moves selected paragraphs into list items, it relies on 
9         the selection preservation code inside moveParagraphs to iterate over the 
10         selected paragraphs.  If a selection is ever restored incorrectly (before
11         the original, or inside the original) list insertion will go into an infinite loop.
12         
13         In this hang, a table was selected and the selection preservation code incorrectly
14         restored a selection, placing it inside the table.
15         
16         The bug was that a TextIterator, when being used for selection preservation, must
17         emit a character between every VisiblePosition in the Range used to create the
18         iterator.
19         
20         * editing/TextIterator.cpp:
21         (WebCore::TextIterator::TextIterator): Renamed the boolean that we use for 
22         selection preservation.  It used to be m_emitForReplacedElements because
23         we believed that replaced elements were the only case where TextIterators
24         should have emitted differently when used for selection preservation.
25         (WebCore::TextIterator::handleReplacedElement): Ditto.
26         (WebCore::TextIterator::shouldRepresentNodeOffsetZero): Represent the 
27         position before block tables, but only if we are emitting for selection 
28         preservation.
29         (WebCore::TextIterator::shouldEmitSpaceBeforeAndAfterNode): We should emit 
30         a space before and after block tables if we are emitting for selection 
31         preservation (because we have VisiblePositions before and after them).
32         (WebCore::TextIterator::handleNonTextNode): Use a renamed variable.
33         * editing/TextIterator.h: Made shouldEmitSpaceBeforeAndAfterNode a member
34         function, because whether or not we emit spaces before and after a block
35         table depends we're emitting for selection preservation.
36
37 2007-09-12  Beth Dakin  <bdakin@apple.com>
38
39         Reviewed by Hyatt.
40
41         Fix for <rdar://problem/5464998> REGRESSION (9A543): Using Sort 
42         options takes you back to search screen on zappos.com
43
44         The current mechanism for preserving form elements across removes 
45         did not work in the case where the input was moved by the parser to 
46         be out of scope of the form. This fixes that problem by having the 
47         parser keep track of the preserve boolean rather than the current 
48         form element.
49
50         * dom/Tokenizer.h:
51         (WebCore::Tokenizer::isHTMLTokenizer): New function.
52         * html/HTMLFormElement.cpp:
53         (WebCore::HTMLFormElement::HTMLFormElement): Get rid of 
54         m_preserveAcrossRemove.
55         * html/HTMLFormElement.h:
56         (WebCore::HTMLFormElement::isMalformed): Get rid of 
57         m_preserveAcrossRemove.
58         * html/HTMLGenericFormElement.cpp:
59         (WebCore::HTMLGenericFormElement::removedFromTree): Ask the parser 
60         if it is currently handling residual style rather than asking the 
61         form if it wants to preserveAcrossRemove.
62         * html/HTMLParser.cpp:
63         (WebCore::HTMLParser::HTMLParser): New boolean to initialize.
64         (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Set 
65         m_handlingResidualStyleAcrossBlocks to true at the beginning and 
66         false at the end.
67         * html/HTMLParser.h:
68         (WebCore::HTMLParser::isHandlingResidualStyleAcrossBlocks):
69         * html/HTMLTokenizer.h:
70         (WebCore::HTMLTokenizer::isHTMLTokenizer):
71         (WebCore::HTMLTokenizer::htmlParser):
72
73 2007-09-12  George Staikos  <staikos@kde.org>
74
75         Fix compilation in some configurations for patch I reviewed and missed
76         this option on.
77
78         * platform/qt/CursorQt.cpp:
79         (WebCore::Cursor::Cursor):
80
81 2007-09-12  Brady Eidson  <beidson@apple.com>
82
83         Reviewed by Tim Hatcher and Kevin Decker
84
85         <rdar://problem/5367045> - Launch time regression due to accessing resource from a different bundle
86
87         When the default icon was moved from WebKit to WebCore, we had to access an entirely new bundle on launch which
88         measurably increased time during launch accessing the disk.
89
90         Instead of moving it back to the WebKit bundle, lets make launch time even faster by compiling in the icon.
91
92         * Resources/urlIcon.tiff: Removed.
93
94         * WebCore.xcodeproj/project.pbxproj: Removed urlIcon.tiff
95
96         * loader/icon/IconDatabase.cpp:
97         (WebCore::IconDatabase::defaultIcon): Compile in the icon data here.
98
99 2007-09-12  Adam Roben  <aroben@apple.com>
100
101         Always specify that slider thumbs are small when painting with SafariTheme
102
103         This is the only size we support.
104
105         Reviewed by Sam.
106
107         * rendering/RenderThemeSafari.cpp:
108         (WebCore::RenderThemeSafari::paintSliderThumb):
109
110 2007-09-12  Brady Eidson  <beidson@apple.com>
111
112         Reviewed by Darin
113
114         <rdar://problem/5474753> - ASSERT in IconDatabase ReadySQLStatement
115
116         * loader/icon/IconDatabase.cpp:
117         (WebCore::readySQLStatement): This is a LOG_ERROR situation, not really an ASSERT situation
118
119 2007-09-12  Adam Roben  <aroben@apple.com>
120
121         Don't ask SafariTheme to draw focus rings around text controls
122
123         We do this ourselves.
124
125         Reviewed by Oliver.
126
127         * rendering/RenderThemeSafari.cpp:
128
129 2007-09-11  Brady Eidson  <beidson@apple.com>
130
131         Reviewed by Darin
132
133         <rdar://problem/5475639> and http://bugs.webkit.org/show_bug.cgi?id=15185 -
134         Prevent two WebKits from fighting over the database schema in the future in case it ever changes again
135
136         By telling the "older schema" WebKit to simply close itself and not bother to do any icon related stuff
137         if the database schema is newer, we prevent the possibility of an older webkit run side-by-side with a newer
138         WebKit causing icon database issues.
139
140         * loader/icon/IconDatabase.cpp:
141         (WebCore::IconDatabase::defaultDatabaseFilename): Rev the icon database filename to be "WebpageIcons.db"  The name is
142           more appropriate for what is actually stored in the file, and since we're already not converting v5 to v6 icons, 
143           making this leap now makes sense and gives us a good "future-proof" baseline
144         (WebCore::isValidDatabase): Change the validity check to be "less then" instead of "not equal to" - the
145           "greater than" case is now handled in performOpenInitialization()
146         (WebCore::IconDatabase::performOpenInitialization): If the schema version is greater than the current, then
147           close the database as to not conflict with the newer version.  Also noted that the integrity check failure 
148           should actually close the sql database, not the icondatabase
149         (WebCore::IconDatabase::syncThreadMainLoop): If termination has already been requested, skip straight to cleanup
150         (WebCore::IconDatabase::cleanupSyncThread): More correctly set the "sync thread running" flag to false here,
151           as the thread can now decide to exit on its own
152
153 2007-09-12  Mike Fenton <mike@staikos.net>
154
155         Reviewed by George Staikos.
156
157         Patch from Mike Fenton to allow custom cursors.
158
159         * platform/qt/CursorQt.cpp:
160
161 2007-09-11  Kevin Decker <kdecker@apple.com>
162
163         Reviewed by Oliver Hunt.
164
165         Fixed: <rdar://problem/5472402> crash due to infinite recursion in expandUseElementsInShadowTree on SVG from wikipedia
166
167         * ksvg2/svg/SVGUseElement.cpp: Added SVG_EXPERIMENTAL #ifdef for expandUseElementsInShadowTree().
168         (WebCore::SVGUseElement::buildPendingResource): Ditto.
169         (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements): Tweaked an ASSERT to not fire on non-experimental builds.
170         * ksvg2/svg/SVGUseElement.h: Added SVG_EXPERIMENTAL #ifdef for expandUseElementsInShadowTree().
171
172 2007-09-11  Brady Eidson  <beidson@apple.com>
173
174         Reviewed by Maciej
175
176         Fix for <rdar://problem/5473046> - Crash when resetting all icons
177
178         Originally I'd written the "reset all icons" to be synchronous on the main thread, but it
179         was decided that it should be async since it involved I/O.  Turns out it needs to be... both!
180         Synchronous removal of all in-memory records of icons, and then continue and clean up the 
181         on-disk database on the background thread.
182
183         Also, it turns out that resetting all the page url retain counts should *not* be part of 
184         "reset all icons" because it breaks various contracts the API makes about maintaining retain counts.
185
186         The problem that occured here was removing all the icons, then all the history items that were 
187         removed as part of "Reset Safari..." would try to release their icon, but their icon doesn't exist
188         anymore.
189
190         We get around this by simply leaving the in-memory page url records and retain counts alone - they
191         are still wiped from disk.
192
193         * loader/icon/IconDatabase.cpp:
194         (WebCore::IconDatabase::removeAllIcons): Clear in-memory records of all icons then tell the thread to
195           wipe the on-disk tables
196         (WebCore::IconDatabase::removeAllIconsOnThread): Only do the disk cleanup - in-memory maintenance is
197           handled on the main thread
198         (WebCore::IconDatabase::cleanupSyncThread): Now that it's possible for new "icons to be written to disk"
199           to appear while on-disk deleting is occuring, let the cleanup procedure perform 1 final write *after*
200           it does the remove all icons
201         * loader/icon/IconDatabase.h: Removed unused lock and condition
202
203         * loader/icon/PageURLRecord.cpp:
204         (WebCore::PageURLRecord::setIconRecord): Allow setting a NULL icon record, so a PageURLRecord can be
205           cleared as part of removeAllIcons()
206
207 2007-09-11  Tristan O'Tierney  <tristan@apple.com>
208
209         Reviewed by David Harrison.
210         
211         <rdar://problem/5467203> CrashTracer: [USER] 1 crash in Mail at <unknown binary>: WebCore::Range::startContainer const
212
213         * editing/SelectionController.cpp:
214         (WebCore::SelectionController::addRange):
215         (WebCore::SelectionController::setSelectedRange):
216         Added a check to make sure the passed in Range* value is not null
217         before performing operations on it.
218
219 2007-09-11  Justin Garcia  <justin.garcia@apple.com>
220
221         Reviewed by Maciej.
222         
223         <rdar://problem/5458246> 
224         GoogleDocs: A hang occurs when applying list styling to selection that contains a <HR>
225         
226         List insertion moves selected paragraphs into list items, and relies on the selection
227         preservation code inside moveParagraphs to iterate over the selected paragraphs.
228         When list insertion would try to listify a paragraph that came after a list item 
229         containing an <hr>, the selection preservation code would set an incorrect ending 
230         selection because of a TextIterator bug, and we would try to listify the same 
231         paragraph over and over.
232         
233         * editing/CompositeEditCommand.cpp:
234         (WebCore::CompositeEditCommand::moveParagraphs): Pass range compliant equivalents to
235         the Range constructor here.  The position [hr, 0] is not a valid DOM Range endpoint 
236         for example.
237         * editing/TextIterator.cpp:
238         (WebCore::shouldEmitSpaceForNode): Added.
239         (WebCore::TextIterator::handleNonTextNode): Emit a space to represent a horizontal rule,
240         since it has VisiblePositions before and after it, but only for TextIterators used for
241         selection preservation, so innerText will be unaffected.
242
243 2007-09-11  Ada Chan  <adachan@apple.com>
244
245         <rdar://problem/5472130> Support NTLM authentication via CFNetwork.
246
247         Reviewed by Darin.
248
249         * platform/network/ProtectionSpace.h:
250         (WebCore::):
251         * platform/network/cf/AuthenticationCF.cpp:
252         (WebCore::createCF):
253         (WebCore::core):
254
255 2007-09-11  Darin Adler  <darin@apple.com>
256
257         Rubber-stamped by Dave Harrison.
258
259         - fixed pasteboard types here to match WebKit and use constants instead of
260           WebKitSystemInterface
261
262         * platform/mac/PasteboardMac.mm: Use constants for all pasteboard type strings.
263
264         * platform/mac/WebCoreSystemInterface.h: Removed wkCreateURLPasteboardFlavorTypeName
265         and wkCreateURLNPasteboardFlavorTypeName.
266
267 2007-09-11  Sven Herzberg  <sven@imendio.com>
268
269         Reviewed by Mark.
270
271         Remove unnecessary fields in FontPlatformData
272         http://bugs.webkit.org/show_bug.cgi?id=15177
273
274         * platform/gdk/FontDataGdk.cpp: removed the destroy code of the fields
275         that have been removed
276         * platform/gdk/FontPlatformData.h: removed m_fontFace, m_fontMatrix
277         and m_options; hask on m_scaledFont
278         * platform/gdk/FontPlatformDataGdk.cpp: simplified setFont() by using
279         m_scaledFont only; turned the former struct members into local
280         variables
281
282 2007-09-11  George Staikos  <staikos@kde.org>
283
284         Reviewed by Anders.
285
286         Work around gcc bug with some old gcc versions.
287
288         * platform/qt/WidgetQt.cpp:
289         (WebCore::Widget::convertToContainingWindow):
290         (WebCore::Widget::convertFromContainingWindow):
291
292 2007-09-10  Mitz Pettel  <mitz@webkit.org>
293
294         Reviewed by Maciej Stachowiak.
295
296         - fix http://bugs.webkit.org/show_bug.cgi?id=15157
297           Image defined in background-position: top center gets unexpectedly truncated
298           <rdar://problem/5469095>
299
300         Test: fast/repaint/body-background-image.html
301
302         * rendering/RenderBox.cpp:
303         (WebCore::RenderBox::imageChanged): Refined the logic for when the root takes
304         over painting the background, to match paintBoxDecorations(). In particular,
305         if the root has defined a background, the body should paint its own background.
306
307 2007-09-10  David Harrison  <harrison@apple.com>
308
309         Reviewed by Kevin and Tristan.
310
311         Tests added:
312         * editing/pasteboard/paste-into-anchor-text.html: Added.
313         * editing/pasteboard/paste-table-cells.html: Added.
314
315         Source changes:
316         * editing/CompositeEditCommand.cpp:
317         (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
318         Nil check enclosingAnchor.
319         
320         * editing/ReplaceSelectionCommand.cpp:
321         (WebCore::ReplaceSelectionCommand::removeNodeAndPruneAncestors):
322         New. Keeps m_firstNodeInserted and m_lastLeafInserted updated.
323         
324         (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):
325         Added a comment.
326         
327         (WebCore::ReplaceSelectionCommand::removeRedundantStyles):
328         Let ReplaceSelectionCommand::removeNodeAndPruneAncestors() update the nodes.
329          
330         (WebCore::ReplaceSelectionCommand::doApply):
331         Pass originalVisPosBeforeEndBR to shouldRemoveEndBR()
332         
333         (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR):
334         Don't remove the br if nothing was inserted.
335         
336         * editing/ReplaceSelectionCommand.h:
337         Add VisiblePosition parameter to shouldRemoveEndBR()
338         
339         * editing/markup.cpp:
340         (WebCore::createMarkup):
341         Wrap orphan tr element with a table element, just like we were doing
342         for tobody elements.
343
344 2007-09-10  David Kilzer  <ddkilzer@apple.com>
345
346         Rubberstamped by Kevin Decker.
347
348         No test required since there is no change in functionality.
349
350         * history/BackForwardList.cpp:
351         (WebCore::BackForwardList::BackForwardList): Fix misspelling of DefaultCapacitiy to DefaultCapacity.
352
353 2007-09-10  Mitz Pettel  <mitz@webkit.org>
354
355         Reviewed by Adele Peterson.
356
357         - fix http://bugs.webkit.org/show_bug.cgi?id=15156
358           REGRESSION (r24594-r24668): The bottom of styled <select> button text is clipped out
359           <rdar://problem/5464301>
360
361         Test: fast/forms/menulist-clip.html
362
363         * rendering/RenderMenuList.cpp:
364         (WebCore::RenderMenuList::controlClipRect): Use correct coordinates for
365         the inner block's content rect.
366
367 2007-09-10  Brady Eidson  <beidson@apple.com>
368
369         Reviewed by Darin, Sam, Oliver, Geoff, probably others - what a fun one to review!
370
371         <rdar://problem/5471641> - URLs get the wrong icon
372
373         Turns out sqlite3_reset() doesn't clear bindings, so previously bound icons were being
374         written out for pages without icons.  Easy fix!
375
376         * loader/icon/IconDatabase.cpp:
377         (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase): For null icons, manually
378           bind NULL - otherwise, the previously bound icon will be written out to disk
379
380         * loader/icon/SQLStatement.cpp:
381         (WebCore::SQLStatement::bindNull): Access to sqlite3_bind_null
382         * loader/icon/SQLStatement.h:
383
384 2007-09-10  Anders Carlsson  <andersca@apple.com>
385
386         Reviewed by Oliver and Darin.
387
388         <rdar://problem/5468613>
389         Using shockwave pages first time after plugin install crashed safari in PluginPing.
390         
391         Only restore the window proc if the plugin didn't override it.
392         
393         * plugins/win/PluginViewWin.cpp:
394         (WebCore::PluginViewWin::stop):
395
396 2007-09-10  Justin Garcia  <justin.garcia@apple.com>
397
398         Reviewed by Darin.
399
400         <rdar://problem/5467405> 
401         Revert back behavior of -webkit-user-select to fix widget selection problems
402         
403         Rolled out r25086 and r25057.  I will be re-opening:
404         <rdar://problem/5333725> -webkit-user-select: none makes selection difficult
405         Which we will either to defer or fix by introducing a new value of -webkit-user-select.
406         <rdar://problem/5370059> REGRESSION: Cannot type into edit fields on a form (sccsheriff.org)
407         Which we will either defer or fix with Adele's patch that doesn't involve making 
408         -webkit-user-select inherited.
409
410         * css/CSSComputedStyleDeclaration.cpp:
411         (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
412         * css/CSSStyleSelector.cpp:
413         (WebCore::CSSStyleSelector::adjustRenderStyle):
414         (WebCore::CSSStyleSelector::applyProperty):
415         * editing/SelectionController.cpp:
416         (WebCore::SelectionController::selectAll):
417         * page/EventHandler.cpp:
418         (WebCore::EventHandler::selectClosestWordFromMouseEvent):
419         (WebCore::EventHandler::handleMousePressEventTripleClick):
420         (WebCore::EventHandler::handleMousePressEventSingleClick):
421         (WebCore::EventHandler::updateSelectionForMouseDrag):
422         (WebCore::EventHandler::selectCursor):
423         (WebCore::EventHandler::canMouseDownStartSelect):
424         * page/EventHandler.h:
425         * rendering/RenderObject.cpp:
426         (WebCore::selectStartNode):
427         (WebCore::RenderObject::canSelect):
428         (WebCore::RenderObject::shouldSelect):
429         (WebCore::RenderObject::draggableNode):
430         * rendering/RenderObject.h:
431         * rendering/RenderStyle.cpp:
432         (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
433         (WebCore::StyleRareNonInheritedData::operator==):
434         (WebCore::StyleRareInheritedData::StyleRareInheritedData):
435         (WebCore::StyleRareInheritedData::operator==):
436         (WebCore::RenderStyle::diff):
437         * rendering/RenderStyle.h:
438         (WebCore::):
439         (WebCore::RenderStyle::userSelect):
440         (WebCore::RenderStyle::setUserSelect):
441         (WebCore::RenderStyle::initialUserSelect):
442
443 2007-09-10  Antti Koivisto  <antti@apple.com>
444
445         Reviewed by Kevin.
446
447         Fix <rdar://problem/5444866>
448         REGRESSION: missing text in Acrobat "Getting Started" screen due to change in load ordering of large resources
449         
450         Make external scripts loaded using file: wait until all style sheet loads have completed before executing. 
451         Fixes a class of problems where there is a dependency between script and stylesheet and results would effectively 
452         get randomized based on which order the resources arrived. In Tiger file loads were effectively serialized by
453         lower level components, which is why this regressed. 
454
455         Test: http/tests/local/stylesheet-and-script-load-order.html
456
457         * dom/Document.cpp:
458         (WebCore::Document::removePendingSheet):
459         * dom/Tokenizer.h:
460         (WebCore::Tokenizer::executeScriptsWaitingForStylesheets):
461         * html/HTMLTokenizer.cpp:
462         (WebCore::HTMLTokenizer::HTMLTokenizer):
463         (WebCore::HTMLTokenizer::begin):
464         (WebCore::HTMLTokenizer::executeScriptsWaitingForStylesheets):
465         (WebCore::HTMLTokenizer::notifyFinished):
466         * html/HTMLTokenizer.h:
467
468 2007-09-08  David Smith  <catfish.man@gmail.com>
469
470         Reviewed by Maciej Stachowiak.
471         
472         http://bugs.webkit.org/show_bug.cgi?id=15148
473         Bug 15148: Poor performance on crazy DOM raytracer
474         
475         Switch data structures to avoid quadratic behavior.
476
477         * rendering/RenderBlock.cpp:
478         (WebCore::RenderBlock::layoutPositionedObjects): Update for ListHashSet
479         (WebCore::RenderBlock::markPositionedObjectsForLayout): Update for ListHashSet
480         (WebCore::RenderBlock::insertPositionedObject): Use ListHashSet to avoid expensive uniqueing
481         (WebCore::RenderBlock::removePositionedObject): Update for ListHashSet
482         (WebCore::RenderBlock::removePositionedObjects): Update for ListHashSet
483         (WebCore::RenderBlock::lowestPosition): Update for ListHashSet
484         (WebCore::RenderBlock::rightmostPosition): Update for ListHashSet
485         (WebCore::RenderBlock::leftmostPosition): Update for ListHashSet
486         (WebCore::RenderBlock::rightBottom): Update for ListHashSet
487         * rendering/RenderBlock.h: Change m_positionedObjects from DeprecatedPtrList to ListHashSet
488
489 2007-09-09  Brady Eidson <beidson@apple.com>
490
491         Rubberstamped by Darin
492
493         pthread_main_np() is a Darwin thing, not a Mac thing
494
495         * loader/icon/IconDatabase.cpp:
496         (WebCore::IconDatabase::IconDatabase):
497
498 2007-09-09  Holger Hans Peter Freyther  <zecke@selfish.org>
499
500         Build fix for Gtk+ by adding WebCore::callOnMainThread to the TemporaryLinkStubs.
501
502         * platform/gdk/TemporaryLinkStubs.cpp:
503         (WebCore::callOnMainThread):
504
505 2007-09-08  George Staikos  <staikos@kde.org>
506
507         Reviewed by Olliej.
508
509         Separate out and implement FileSystem functions,  and stub out the
510         icondatabase function for future implementation.
511
512         * WebCore.pro:
513         * platform/qt/FileSystemQt.cpp: Added.
514         (WebCore::fileExists):
515         (WebCore::deleteFile):
516         * platform/qt/TemporaryLinkStubs.cpp:
517         * platform/qt/ThreadingQt.cpp: Added.
518         (WebCore::callOnMainThread):
519
520 2007-09-08  Mark Rowe  <mrowe@apple.com>
521
522         Build fix for when ENABLE(ICONDATABASE) is not set.
523
524         * loader/icon/IconDatabaseNone.cpp:
525         (WebCore::IconDatabase::~IconDatabase):
526
527 2007-09-08  Mark Rowe  <mrowe@apple.com>
528
529         More fixes for the Qt and Gtk builds.
530
531         * WebCore.pro: Update for file changes.
532         * loader/icon/IconDatabase.cpp: Include errno.h for EDEADLK.
533         * loader/icon/PageURLRecord.h:
534
535 2007-09-08  Justin Garcia  <justin.garcia@apple.com>
536
537         Backing my change back in without the changes to VisiblePosition::next 
538         and previous that weren't necessary to fix the bug and were causing some
539         layout test failures.  Most of the failures appeared to be fixes but I
540         want more time to investigate and have to move to on to another task.
541
542         * editing/Selection.cpp:
543         (WebCore::Selection::validate):
544         * editing/visible_units.cpp:
545         (WebCore::endOfWord):
546
547 2007-09-08  Brady Eidson  <beidson@apple.com>
548
549         Reviewed by Mark Rowe
550
551         Fix the _NSAutoreleaseNoPool() errors on launch - We were using NSFileManager on the secondary
552         thread with no NSAutoreleasePool in place
553
554         * loader/icon/IconDatabase.cpp:
555         (WebCore::IconDatabase::iconDatabaseSyncThread):
556
557 2007-09-08  Sam Weinig  <sam@webkit.org>
558
559         Add fix to the correct file.
560
561         * loader/icon/SQLDatabase.h:
562         * loader/icon/SQLStatement.h:
563
564 2007-09-08  Sam Weinig  <sam@webkit.org>
565
566         Fix Windows build.
567
568         * loader/icon/SQLStatement.h: Disable boolean conversion warning.
569
570 2007-09-08  Brady Eidson  <beidson@apple.com>
571
572         Build fix for non-Mac platforms that use Icon Database
573
574         * loader/icon/IconDatabase.cpp:
575         (WebCore::IconDatabase::IconDatabase): Apparently only Mac has the beauty that is pthread_main_np()
576
577 2007-09-08  Mark Rowe  <mrowe@apple.com>
578
579         Build fix.
580
581         * WebCore.xcodeproj/project.pbxproj: Headers used up in WebKit need to be be "private" rather than "project".
582
583 2007-09-08  Brady Eidson  <beidson@apple.com>
584
585         Reviewed by Darin
586
587         <rdar://problem/5434431> - Asynchronous Icon Database
588
589         The IconDatabase API was originally designed to be fully asynchronous - if an icon wasn't read in from disk
590         when you asked for it, you would be notified when it was.
591
592         Safari 2 did writes on a background thread, but reads blocked the main thread.
593
594         The current WebCore implementation using SQLite attempted to get rid of the background thread by defering expensive 
595         writes via timers, but falls short in moderate to extreme usage cases
596
597         Time to make the IconDatabase live up to it's fully asynchronous destiny.
598
599         This should -
600         - Make the browser instantly usable while converting Safari 2 icons in the background occurs
601         - Remedy any UI slowness/blocking when on slow network home directories
602         - Remedy random UI slowness, pauses, and stutters do to random I/O occurring at the exact wrong time or under heavy
603           disk usage from swapping or other apps on the system
604         - Allow certain long-running procedures to be interruptible (Safari 2 import, reading icons in from disk when trying to quit, etc)
605
606         This will have a noticeable effect on current Safari 2 and Safari 3 beta browsers, including icons not appearing in bookmarks, history,
607         or the location field the first time they're asked for, as current released Safari's don't properly listen for these async notifations.  
608         The second time such a menu or view is brought up, the icon should be there.
609
610         Additionally this includes a SQLite schema change which will be a lot more efficient but will result in the loss of current SQLite icons.
611         Converting from Safari 2 style icons will still work.
612
613         WebCore, welcome to multi-threadedness
614
615         * WebCore.exp:
616         * WebCore.xcodeproj/project.pbxproj:
617         * WebCore.vcproj/WebCore.vcproj:
618
619         * loader/DocumentLoader.cpp:
620         (WebCore::DocumentLoader::iconLoadDecisionAvailable): Called when an Icon becomes available that was requested by this 
621           DocumentLoader (to support the webView:didReceiveIcon: delegate call in WebKit)
622         * loader/DocumentLoader.h:
623
624         * loader/FrameLoader.cpp:
625         (WebCore::FrameLoader::iconLoadDecisionAvailable): Called from the DocumentLoaders who get notified - if the FrameLoader 
626           ends up not caring because the WebView has transitioned to a new page, nothing occurs.  Otherwise, the FrameLoader possibly
627           starts it Icon Loader and possibly sends the webView:didReceiveIcon: delegate call
628         (WebCore::FrameLoader::startIconLoader): Instead of "Yes, load the icon now" or "No, don't load it" there is a third possibility -
629           "You might be asked to load your icon later."  Add supporting logic for receiving this state, and being called a second time
630           when the load decision is finally available.
631         * loader/FrameLoader.h:
632
633         * loader/FrameLoaderClient.h: Added "registerForIconNotification" which is a way to tell WebViews "The icon you are interested in might
634           become available via the generic WebIconDatabaseDidAddIconNotification instead of a targeted delegate call"
635           A WebView can then receive the generic notification and pass on it's own targeted delegate call.
636
637         * loader/icon/IconDataCache.cpp: Removed.
638         * loader/icon/IconDataCache.h: Removed.
639
640         * loader/icon/IconDatabase.cpp:
641         (WebCore::urlForLogging): Cut a URL down in length for sane logging and debugging
642         (WebCore::defaultClient): Return the default, empty IconDatabaseClient incase the API doesn't set one.
643
644         Following block of methods are for the Main thread's usage -
645         (WebCore::IconDatabase::setClient):
646         (WebCore::makeAllDirectories): Small optimization that checks to see if the entire path exists already, and doesn't try to loop
647           through each patch component if the full path is already present
648         (WebCore::IconDatabase::open): Makes all directories to the target path and kicks off the background thread - nothing more.
649         (WebCore::IconDatabase::close): Signals the thread to quit and waits for it to do so
650         (WebCore::IconDatabase::removeAllIcons): Purge the icon database
651         (WebCore::IconDatabase::iconForPageURL):
652         (WebCore::IconDatabase::readIconForPageURLFromDisk):
653         (WebCore::IconDatabase::iconURLForPageURL):
654         (WebCore::IconDatabase::defaultIcon):
655         (WebCore::IconDatabase::retainIconForPageURL):
656         (WebCore::IconDatabase::releaseIconForPageURL):
657         (WebCore::IconDatabase::setIconDataForIconURL):
658         (WebCore::IconDatabase::setIconURLForPageURL):
659         (WebCore::IconDatabase::loadDecisionForIconURL): Determine if an icon loader should load now.  If the decision is "maybe later", then
660           mark the DocumentLoader to be notified later when the final decision is available.
661         (WebCore::IconDatabase::iconDataKnownForIconURL): Determine if the actual image data has been read from disk (or set from the loader) for 
662           icon URL in question
663         (WebCore::IconDatabase::setEnabled):
664         (WebCore::IconDatabase::isEnabled):
665         (WebCore::IconDatabase::setPrivateBrowsingEnabled):
666         (WebCore::IconDatabase::isPrivateBrowsingEnabled):
667         (WebCore::IconDatabase::delayDatabaseCleanup): Restore this method from a year ago, as asynchronous pruning of icons can now occur on a 
668           background thread.
669         (WebCore::IconDatabase::allowDatabaseCleanup):
670         (WebCore::IconDatabase::checkIntegrityBeforeOpening):
671         (WebCore::IconDatabase::pageURLMappingCount):
672         (WebCore::IconDatabase::retainedPageURLCount):
673         (WebCore::IconDatabase::iconRecordCount):
674         (WebCore::IconDatabase::iconRecordCountWithData):
675         (WebCore::IconDatabase::IconDatabase):
676         (WebCore::IconDatabase::~IconDatabase):
677         (WebCore::IconDatabase::notifyPendingLoadDecisions): Tell all the registered DocumentLoaders "Hey, we've read in all URL mappings from disk,
678           so check to see if you are interested in any of them"
679         (WebCore::IconDatabase::notifyPendingLoadDecisionsInternal):
680         (WebCore::IconDatabase::wakeSyncThread): Wake the sync thread, if it is idle
681         (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Even though we're on a background thread, we still defer writing out to disk during
682           periods of high activity
683         (WebCore::IconDatabase::syncTimerFired): Call wakeSyncThread()
684
685         Following block of methods may be used by either thread -
686         (WebCore::IconDatabase::isOpen):
687         (WebCore::IconDatabase::databasePath):
688         (WebCore::IconDatabase::defaultDatabaseFilename):
689         (WebCore::IconDatabase::getOrCreateIconRecord):
690         (WebCore::IconDatabase::getOrCreatePageURLRecord):
691
692         Following block of methods are used by the secondary thread only -
693         (WebCore::IconDatabase::importIconURLForPageURL): For the Safari 2 import procedure - write a URL mapping directly out to disk
694         (WebCore::IconDatabase::importIconDataForIconURL): For the Safari 2 import procedure - write an Icon directly out to disk
695         (WebCore::IconDatabase::shouldStopThreadActivity): To check and see if the thread should stop what it is doing now to do something
696           more important (such as quit, or delete all icons)
697         (WebCore::IconDatabase::iconDatabaseSyncThreadStart):
698         (WebCore::IconDatabase::iconDatabaseSyncThread): Entry point for the background thread
699         (WebCore::databaseVersionNumber):
700         (WebCore::isValidDatabase):
701         (WebCore::createDatabaseTables):
702         (WebCore::IconDatabase::performOpenInitialization): Open and validate the SQLite database, making sure it's schema jives with what
703           is expected
704         (WebCore::IconDatabase::checkIntegrity):
705         (WebCore::IconDatabase::performURLImport): Import all the Page URL -> Icon URL mappings from the database.  Done "1st thing" on startup,
706           this is necessary to be able to give the loader decisions about whether or not it should load icons from the network
707         (WebCore::IconDatabase::syncThreadMainLoop): Main loop - sleeps until woken up, then does a read cycle and a write cycle until both cycles
708           do no work - then it goes back to sleep.
709         (WebCore::IconDatabase::readFromDatabase): Reads icons from the database that clients are waiting on
710         (WebCore::IconDatabase::writeToDatabase): Writes any changes page -> icon url mappings to disk, as well as any new image data that has 
711           been received from the loader
712         (WebCore::IconDatabase::pruneUnretainedIcons): Done only once, and only after the first write to the database, this procedure removes all
713           icons and page URLs from disk that haven't been retained by any client.  Note that the prune can be delayed by utilizing delayDatabaseCleanup()
714         (WebCore::IconDatabase::checkForDanglingPageURLs): Usually part of the prune procedure, prunes any pages who point to icons that no longer exist 
715           in the database
716         (WebCore::IconDatabase::removeAllIconsOnThread): Completely purge both the on-disk and in memory records of all icons
717         (WebCore::IconDatabase::deleteAllPreparedStatements): Part of removeAllIcons and the thread cleanup procedure
718         (WebCore::IconDatabase::cleanupSyncThread): Write out any last remaining writes to disk, close the database, and then end the thread
719         (WebCore::IconDatabase::imported): Checks the DB to see if the Safari 2 import has occured
720         (WebCore::IconDatabase::setImported): Sets the "Safari 2 imported" flag
721         (WebCore::readySQLStatement):
722         (WebCore::IconDatabase::setIconURLForPageURLInSQLDatabase): This and the following "SQLDatabase" suffixed methods are pretty self explanatory
723         (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
724         (WebCore::IconDatabase::removePageURLFromSQLDatabase):
725         (WebCore::IconDatabase::getIconIDForIconURLFromSQLDatabase):
726         (WebCore::IconDatabase::addIconURLToSQLDatabase):
727         (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):
728         (WebCore::IconDatabase::removeIconFromSQLDatabase):
729         (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase):
730         * loader/icon/IconDatabase.h:
731
732         * loader/icon/IconDatabaseClient.h: Added.
733         (WebCore::IconDatabaseClient::~IconDatabaseClient):
734         (WebCore::IconDatabaseClient::performImport): Perform the Safari 2 import, implemented by WebKit
735         (WebCore::IconDatabaseClient::dispatchDidRemoveAllIcons): Send the API notification
736         (WebCore::IconDatabaseClient::dispatchDidAddIconForPageURL): Ditto
737
738         * loader/icon/IconDatabaseNone.cpp: Best attempt to keep non icon-DB platforms building
739         (WebCore::IconDatabase::defaultDatabaseFilename):
740         (WebCore::IconDatabase::readIconForPageURLFromDisk):
741         (WebCore::IconDatabase::loadDecisionForIconURL):
742         (WebCore::IconDatabase::iconDataKnownForIconURL):
743         (WebCore::IconDatabase::setIconURLForPageURL):
744         (WebCore::IconDatabase::isEnabled):
745         (WebCore::IconDatabase::delayDatabaseCleanup):
746         (WebCore::IconDatabase::allowDatabaseCleanup):
747         (WebCore::IconDatabase::setClient):
748
749         * loader/icon/IconRecord.cpp: Added.
750         (WebCore::IconRecord::IconRecord): IconRecord used to be "IconDataCache" - it is merely a container for the url, timestamp, and image for a site icon.
751           It is Shared, and therefore ref counted - PageURLRecords are the owning containers.  This is a tricky way to track how many page urls are retaining 
752           an IconRecord and therefore tracking when we should try to get rid of one.
753         (WebCore::IconRecord::~IconRecord):
754         (WebCore::IconRecord::image):
755         (WebCore::IconRecord::setImageData):
756         (WebCore::IconRecord::loadImageFromResource):
757         (WebCore::IconRecord::imageDataStatus): Return whether the image data hasn't been read yet, exists in memory, or is absent (site with no icon)
758         (WebCore::IconRecord::snapshot): Returns a snapshot of the icon's data - url, timestamp, and image data - to be written to disk
759         * loader/icon/IconRecord.h: Added.
760         (WebCore::IconSnapshot::IconSnapshot):
761         (WebCore::IconRecord::getTimestamp):
762         (WebCore::IconRecord::setTimestamp):
763         (WebCore::IconRecord::iconURL):
764         (WebCore::IconRecord::retainingPageURLs):
765
766         * loader/icon/PageURLRecord.cpp: Added.
767         (WebCore::PageURLRecord::PageURLRecord): PageURLRecord is fundamentally a pairing of a Page URL to an Icon.  It has manual ref counting for the sake
768           of "retainIconForPageURL" and "releaseIconForPageURL", and can provide a quick snapshot of it's Page URL -> Icon URL mapping for writing to
769           the database
770         (WebCore::PageURLRecord::setIconRecord):
771         (WebCore::PageURLRecord::snapshot):
772         * loader/icon/PageURLRecord.h: Added.
773         (WebCore::PageURLSnapshot::PageURLSnapshot):
774         (WebCore::PageURLRecord::url):
775         (WebCore::PageURLRecord::PageURLRecord::iconRecord):
776         (WebCore::PageURLRecord::retain):
777         (WebCore::PageURLRecord::release):
778         (WebCore::PageURLRecord::retainCount):
779
780         * platform/SharedBuffer.cpp:
781         (WebCore::SharedBuffer::copy): Added a deep copy method for the purposes of handing icon data across the thread boundary into the icon database
782         * platform/SharedBuffer.h:
783
784         * platform/graphics/svg/SVGImageEmptyClients.h:
785         (WebCore::SVGEmptyFrameLoaderClient::registerForIconNotification):
786
787         * platform/win/TemporaryLinkStubs.cpp:
788         (WebCore::callOnMainThread): Only other IconDatabase utilizing platform - keep their build going
789
790 2007-09-07  David Kilzer  <ddkilzer@apple.com>
791
792         Reviewed by Timothy Hatcher.
793
794         Housekeeping.  No test required.
795
796         * bindings/objc/WebScriptObjectInternal.h: Removed unused file.
797         * bindings/objc/WebScriptObjectPrivate.h: Updated copyright statement.
798
799 2007-09-07  Justin Garcia  <justin.garcia@apple.com>
800         
801         Rolling out my changes from r25421 while I investigate the layout test failures
802         they caused.
803         
804         * editing/Selection.cpp:
805         (WebCore::Selection::validate):
806         * editing/VisiblePosition.cpp:
807         (WebCore::VisiblePosition::next):
808         (WebCore::VisiblePosition::previous):
809         (WebCore::VisiblePosition::lastEditablePositionAtOrBefore):
810         (WebCore::VisiblePosition::firstEditablePositionAtOrAfter):
811         * editing/VisiblePosition.h:
812         * editing/visible_units.cpp:
813         (WebCore::endOfWord):
814         (WebCore::previousWordPosition):
815         (WebCore::nextWordPosition):
816         (WebCore::startOfLine):
817         (WebCore::endOfLine):
818         (WebCore::previousSentencePosition):
819         (WebCore::nextSentencePosition):
820
821 2007-09-05  Geoffrey Garen  <ggaren@apple.com>
822
823         Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.
824         
825         Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no 
826         memory cache, or a very tiny one
827
828         Added a client callback to notify WebKit when the first navigation has
829         taken place. "Navigation" here means a transition from one page to 
830         another that ends up in the back/forward list.
831         
832         WebKit Mac uses this notification to grow its cache model under certain
833         circumstances.
834         
835         * loader/FrameLoader.cpp:
836         (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
837         * loader/FrameLoaderClient.h:
838
839         * platform/graphics/svg/SVGImageEmptyClients.h:
840         (WebCore::SVGEmptyFrameLoaderClient::didPerformFirstNavigation): Ah, 
841         SVGEmptyFrameLoaderClient, my old friend. 
842
843 2007-09-07  Adele Peterson  <adele@apple.com>
844
845         Reviewed by Dave Harrison.
846
847         Fix for <rdar://problem/5428427> Wrong characters are re-converted after doing reconversion with Kotoeri
848
849         Revert change for<rdar://problem/5279521> and add nil checks for the result of TextIterator::rangeFromLocationAndLength
850         TextIterator::exitNode shouldn't require the m_lastTextNode to be true, but we can't change that without making the logic in _web_attributedStringFromRange match.
851         We'll get that for free when we switch to use TextIterator in _web_attributedStringFromRange.
852
853         * editing/ApplyStyleCommand.cpp: (WebCore::ApplyStyleCommand::applyBlockStyle): Added nil checks.
854         * editing/IndentOutdentCommand.cpp: (WebCore::IndentOutdentCommand::indentRegion): ditto.
855         * editing/TextIterator.cpp: (WebCore::TextIterator::exitNode): Re-added check for m_lastTextNode before emitting newline.
856
857 2007-09-07  Ada Chan  <adachan@apple.com>
858
859         <rdar://problem/5395928> Need to be able to handle context menu item selection by index
860         
861         Reviewed by Beth.
862
863         * platform/ContextMenu.h: Added method to retrieve context menu item by index
864         * platform/win/ContextMenuWin.cpp:
865         (WebCore::ContextMenu::ContextMenu): call setPlatformDescription() since that will handle
866         adding the MNS_NOTIFYBYPOS style to the context menu.
867         (WebCore::contextMenuItemByIdOrPosition): helper method so we don't have to duplicate code
868         between itemWithAction() and itemAtIndex().
869         (WebCore::ContextMenu::itemWithAction):
870         (WebCore::ContextMenu::itemAtIndex):
871         (WebCore::ContextMenu::setPlatformDescription): add MNS_NOTIFYBYPOS style to the context menu
872         so we will get notified by menu position through WM_MENUCOMMAND when the item is selected.
873
874 2007-09-07  Justin Garcia  <justin.garcia@apple.com>
875
876         Reviewed by Darin.
877         
878         <rdar://problem/5057506> Double-clicking after ToDo content doesn't select the paragraph break
879         
880         * editing/Selection.cpp:
881         (WebCore::Selection::validate):
882         Moved the code that moves across a paragraph boundary
883         when expanding selections by word granularity from
884         endOfWord to here.
885         In the word and paragraph granularity cases, if the 
886         end of the selection is at the end of the last paragraph 
887         in the last cell of a block table, expand it so that 
888         it ends at the start of the paragraph after the table, 
889         instead of just after the table, so that ToDo content 
890         gets the same double/tripled click behavior that normal 
891         paragraphs get (added two testcases).
892         When expanding the selection to include paragraph
893         breaks, pass VisiblePosition::next true so that it
894         doesn't change editability.
895         * editing/VisiblePosition.cpp:
896         (WebCore::VisiblePosition::next): Renamed the bool because it's now also
897         used to keep non-editable positions non-editable.
898         (WebCore::VisiblePosition::previous): Ditto.
899         (WebCore::VisiblePosition::lastPositionWithSameEditabilityAtOrBefore):
900         Renamed this function and made it also work with non-editable positions.
901         (WebCore::VisiblePosition::firstPositionWithSameEditabilityAtOrAfter):
902         Ditto.
903         * editing/VisiblePosition.h:
904         * editing/visible_units.cpp:
905         (WebCore::endOfWord): Called the renamed function.
906         (WebCore::previousWordPosition): Ditto.
907         (WebCore::nextWordPosition): Ditto.
908         (WebCore::startOfLine): Ditto.
909         (WebCore::endOfLine): Ditto.
910         (WebCore::previousSentencePosition): Ditto.
911         (WebCore::nextSentencePosition): Ditto.
912
913 2007-09-07  Brady Eidson  <beidson@apple.com>
914
915         Reviewed by Sam
916
917         <rdar://problem/5089241> - ASSERT and other funky effects in IconLoader with large 404 pages
918
919         There were two problems:
920         1 - I originally didn't expect SubresourceLoader to keep pulling in data after it received a 404 response,
921             but if the server sends back a complex 404 page, the loader did just that.  That could result in the 
922             IconLoader "finishing" twice
923         2 - In this case, the long messy 404 page would be committed to the database as image data.  This would 
924             result in wasted space on disk, wasted space in RAM, and wasting processor time trying to parse 50k+
925             of HTML as image data
926
927         Fix is two parts - 1, monitor the "m_loadIsInProgress" flag and 2, make ::finishLoading() take an actual 
928         SharedBuffer argument that is what should be committed to the database so the ResourceHandle is unnecessary
929
930         * loader/icon/IconLoader.cpp:
931         (WebCore::IconLoader::didReceiveResponse): If the response is not valid, commit null data 
932         (WebCore::IconLoader::didFail): If we've already finished loading once (the 404 response), don't
933           finish again!
934         (WebCore::IconLoader::didFinishLoading): Ditto
935         (WebCore::IconLoader::finishLoading): Take a SharedBuffer argumnt as the actual data to commit
936         * loader/icon/IconLoader.h: Add a SharedBuffer arg to ::finishLoading()
937
938 2007-09-07  Brady Eidson  <beidson@apple.com>
939
940         Reviewed by Darin
941
942         Inline the in-header definitions for non-Mac platforms
943
944         * platform/AutodrainedPool.h:
945         (WebCore::AutodrainedPool::AutodrainedPool):
946         (WebCore::AutodrainedPool::~AutodrainedPool):
947         (WebCore::AutodrainedPool::cycle):
948
949 2007-09-07  Brady Eidson  <beidson@apple.com>
950
951         Reviewed by Darin
952
953         Add some AutoreleasePool and Threading utilities in preparation for the multi-threaded
954         fix for <rdar://problem/5434431>
955
956         AutodrainedPool wraps an NSAutoreleasePool and tracks a "cycle" count.  This allows clients
957         in WebCore to simply call ::cycle() and after a preset number of iterations the pool will drain
958         and recreate the underlying NSAutoreleasePool
959    
960         Threading utilities include C++ wrappers for pthread mutexes and conditions, as well as a generic
961         "callOnMainThread()" function for any non-main thread to use.
962
963         * platform/AutodrainedPool.h: Added.  
964         (WebCore::AutodrainedPool::AutodrainedPool): Empty implementations for all non-mac platforms
965         (WebCore::AutodrainedPool::~AutodrainedPool): ditto
966         (WebCore::AutodrainedPool::cycle): ditto
967         * platform/mac/AutodrainedPool.mm: Added.
968         (WebCore::AutodrainedPool::AutodrainedPool): 
969         (WebCore::AutodrainedPool::~AutodrainedPool):
970         (WebCore::AutodrainedPool::cycle): Keep track of number of cycles, and drain/recreate the pool if the
971           cycle limit is hit
972
973         * platform/Threading.h: Added.
974         (WebCore::Mutex::Mutex): C++ wrapper for pthread_mutex
975         (WebCore::Mutex::~Mutex):
976         (WebCore::Mutex::lock):
977         (WebCore::Mutex::tryLock):
978         (WebCore::Mutex::unlock):
979         (WebCore::MutexLocker::MutexLocker): Handles automatically locking/unlocking a Mutex (for early returns
980           from a function, for example)
981         (WebCore::MutexLocker::~MutexLocker):
982         (WebCore::ThreadCondition::ThreadCondition): C++ wrapper for pthread_condition
983         (WebCore::ThreadCondition::~ThreadCondition):
984         (WebCore::ThreadCondition::wait):
985         (WebCore::ThreadCondition::signal):
986         (WebCore::ThreadCondition::broadcast):
987         * platform/mac/Threading.mm: Added.
988         (-[WebCoreFunctionWrapper initWithFunction:]): Obj-C implementation of "callOnMainThread"
989         (-[WebCoreFunctionWrapper _call]):
990         (WebCore::callOnMainThread):
991
992 2007-09-07  George Staikos  <staikos@kde.org>
993
994         Fix typo.
995
996         * loader/ProgressTracker.h:
997         (WebCore::ProgressTracker::totalPageAndResourceBytesToLoad):
998
999 2007-09-07  Qing Zhao  <qing@staikos.net>
1000
1001         Reviewed by Anders and George.
1002
1003         Add accessors for these two variables.
1004
1005         * loader/ProgressTracker.h:
1006         (WebCore::ProgressTracker::totalPageAndResourseBytesToLoad):
1007         (WebCore::ProgressTracker::totalBytesReceived):
1008
1009 2007-09-06  Tristan O'Tierney  <tristan@apple.com>
1010
1011         Reviewed by Maciej Stachowiak.
1012         
1013         <rdar://problem/5333496> Back button stopped working on sfgate.com (14957)
1014         
1015         This fix is specifically targted to address sfgate.com and reuters.com with minimal
1016         impact to other areas of the frameloader.  It does not cause any regression tests to fail.
1017         I've added two layout tests: One to detect this particular bug, and one to address
1018         a secondary issue: if an iframe navigation occurs during onload by a timeout an
1019         additional history item is added, similarly to firefox.  We tried to match firefox
1020         more than IE with this fix but did gain a little bit of IE compatability.
1021
1022         Tests: http/tests/navigation/onload-navigation-iframe-timeout.html
1023                http/tests/navigation/onload-navigation-iframe.html
1024
1025         * dom/Document.h:
1026         (WebCore::Document::processingLoadEvent):
1027         Return the m_processingLoadEvent boolean so FrameLoader knows
1028         that the document is in the middle of calling <body onload>
1029         
1030         * html/HTMLFrameOwnerElement.cpp:
1031         (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
1032         * html/HTMLFrameOwnerElement.h:
1033         (WebCore::HTMLFrameOwnerElement::createdByParser):
1034         (WebCore::HTMLFrameOwnerElement::setCreatedByParser):
1035         Added support for a new member variable of frame elements: m_createdByParser.
1036         This lets us specifically target the fix to only iframes created via JS
1037         and not in-document.
1038         
1039         * loader/FrameLoader.cpp:
1040         (WebCore::FrameLoader::FrameLoader):
1041         Initialize m_navigationDuringLoad to false
1042         
1043         (WebCore::FrameLoader::provisionalLoadStarted):
1044         Determine if the load we're about to start is occuring during
1045         an onload.
1046         
1047         (WebCore::FrameLoader::updateHistoryForStandardLoad):
1048         If the current frameloader is for a child frame, and the navigation is occuring
1049         during an onload update the current history item rather than adding a new one.
1050         
1051         * loader/FrameLoader.h:
1052         Added a new member variable, m_navigationDuringLoad to track
1053         the navigation status during the on load, rather than trying to determine
1054         the status after (which is nearly impossible due to a new runloop spin).
1055
1056 2007-09-06  David Kilzer  <ddkilzer@apple.com>
1057
1058         Reviewed by Darin.
1059
1060         The implementation of BackForwardList::clearPageCache() was removed in r21793.
1061         It's now safe to remove it from the header.
1062
1063         * history/BackForwardList.h: Removed clearPageCache().
1064
1065 2007-09-06  Anders Carlsson  <andersca@apple.com>
1066
1067         Reviewed by Ada.
1068
1069         <rdar://problem/5457844>
1070         Crash when using mouse wheel with plug-ins disabled.
1071
1072         Null check the widget.
1073
1074         * page/EventHandler.cpp:
1075         (WebCore::EventHandler::handleWheelEvent):
1076
1077 2007-09-06  Anders Carlsson  <andersca@apple.com>
1078
1079         Reviewed by Mitz.
1080
1081         Small tweak.
1082         
1083         * plugins/win/PluginStreamWin.cpp:
1084         (WebCore::PluginStreamWin::startStream):
1085
1086 2007-09-06  Anders Carlsson  <andersca@apple.com>
1087
1088         Reviewed by Adam and Steve.
1089
1090         <rdar://problem/5459321>
1091         ADOBE: Safari 3 on Windows is passing bogus values in stream->headers in NPP_NewStream, causing Flash Player to crash.
1092         
1093         Serialize the headers into a stream and pass it to NPP_NewStream in stream->headers.
1094         
1095         * plugins/win/PluginStreamWin.cpp:
1096         (WebCore::PluginStreamWin::startStream):
1097         * plugins/win/PluginStreamWin.h:
1098
1099 2007-09-06  Darin Adler  <darin@apple.com>
1100
1101         Reviewed by Hyatt.
1102
1103         - fix http://bugs.webkit.org/show_bug.cgi?id=15153
1104           REGRESSION: Assertion failure in FrameView::scheduleRelayout() (m_frame->view() == this)
1105
1106         Back out the willRemove() part of the previous patch.
1107         It was incorrect and not needed to fix the bug anyway.
1108
1109         * dom/Document.cpp: (WebCore::Document::detach): Remove willRemove().
1110
1111         * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Put the willRemove() call
1112         back here where it was originally before the previous fix.
1113
1114         * history/CachedPage.cpp: (WebCore::CachedPage::clear):
1115         * page/Frame.cpp:
1116         (WebCore::Frame::setView):
1117         (WebCore::Frame::setDocument):
1118         Added FIXMEs about the fact that we call detach() on the document but not willRemove().
1119
1120 2007-09-05  Timothy Hatcher  <timothy@apple.com>
1121
1122         Reviewed by Darin.
1123
1124         Changed the blocked exception log message to match AppKit's blocked exception message.
1125
1126         * platform/mac/BlockExceptions.mm:
1127         (ReportBlockedObjCException):
1128
1129 2007-09-06  Darin Adler  <darin@apple.com>
1130
1131         Reviewed by Hyatt.
1132
1133         - <rdar://problem/5457865> REGRESSION (9A527): Safari crashes when opening a page
1134           that immediately redirects to a PDF
1135
1136         I don't know how to make an automated test that trips over this.
1137
1138         The immediate cause of this regression was making a back/forward list entry in
1139         this case. Earlier, the quick redirect would not results in a separate entry.
1140         That's possibly a bug too, but it's better to fix the crash first.
1141
1142         The page cache was putting the document into a strange state: Still attached but
1143         with the renderer set to 0. There was no good reason to do this, so got rid of it.
1144         Moved the responsibility to the caller of not calling detach() when moving into
1145         the page cache. This is more of a frame loader thing than a document thing.
1146
1147         * dom/Document.cpp: (WebCore::Document::detach): Added assertions that this is
1148         only called on a document that's attached and not in the page cache. Also moved
1149         the call to willRemove in here, so that callers can't make the mistake of not
1150         calling that function. Removed the incorrectly-positioned code that made this
1151         function do less if it was called on a document in the page cache.
1152
1153         * history/CachedPage.cpp: (WebCore::CachedPage::clear): Removed the code to handle
1154         a document with a renderer of 0. There was no need to put the document into this
1155         state. Any document in the page cache will always be "attached".
1156
1157         * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Added a check to prevent
1158         from calling an unnecessary cancelParsing() on a document that's in the page cache
1159         and guard the call to detach() with a check of attached(), like all other calls to
1160         detach() on DOM objects.
1161
1162         * page/Frame.cpp:
1163         (WebCore::Frame::setView): Added a missing check of attached(), like all other
1164         calls to detach() on DOM objects. Also added code to not call detach() on the
1165         document when it's in the page cache.
1166         (WebCore::Frame::setDocument): This call site already had the attached() check,
1167         but was missing the page cache check.
1168
1169 2007-09-05  David Harrison  <harrison@apple.com>
1170
1171         Reviewed by Darin.
1172
1173         Follow up on my fix for <rdar://problem/5306171>.
1174         My first patch (r25373) broke svg/custom/stroke-width-click.svg.
1175
1176         * editing/TextIterator.cpp:
1177         (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
1178         Add currPos.isNotNull() check because positions in non-html content (like svg)
1179         do not have visible positions, and we don't want to emit for them either.
1180
1181 2007-09-06  Mitz Pettel  <mitz@webkit.org>
1182
1183         Reviewed by Adam Roben.
1184
1185         - fix http://bugs.webkit.org/show_bug.cgi?id=14685
1186           <rdar://problem/5349755> text-align affects <select> button but not its drop-down menu
1187
1188         * platform/PlatformString.h:
1189         (WebCore::String::defaultWritingDirection):
1190         * platform/StringImpl.cpp:
1191         (WebCore::StringImpl::defaultWritingDirection): Moved textDirectionForParagraph()
1192         from RenderMenuList.cpp here.
1193         * platform/StringImpl.h:
1194         * platform/win/PopupMenuWin.cpp:
1195         (WebCore::PopupMenu::itemWritingDirectionIsNatural): Changed to return 'true'.
1196         (WebCore::PopupMenu::paint): Changed to use natural directionality for menu
1197         items.
1198         * rendering/RenderMenuList.cpp:
1199         (WebCore::RenderMenuList::adjustInnerStyle): Use defaultWritingDirection.
1200
1201 2007-09-06  Maciej Stachowiak  <mjs@apple.com>
1202
1203         Reviewed by Oliver Hunt.
1204
1205         - fixed <rdar://problem/5455457> REGRESSION (9A527-9A535): Colloquy crash on launch in WebCoreScriptDebugger initWithDelegate (with announce.js plug-in installed)
1206
1207         * page/mac/FrameMac.mm:
1208         (WebCore::Frame::windowScriptObject): Ensure that -[WebView
1209         windowScriptObject] and -[WebFrame windowObject] return null until
1210         the windowScriptObjectAvailable: delegate method is sent.
1211
1212 2007-09-05  David Harrison  <harrison@apple.com>
1213
1214         Reviewed by Kevin Decker.
1215
1216         <rdar://problem/5306171> Mail: The first return after an attachment in multipart/mixed message is lost
1217
1218         Test added: editing/selection/toString-1.html
1219         
1220         Source changes:
1221         * editing/TextIterator.cpp:
1222         (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
1223         - Remove outdated and erroneous check for m_lastTextNode.
1224         - Fix VisiblePosition check to look for line diff. Simple position diff gives the
1225         wrong answer when the start is table/0 and the current is the first position
1226         inside the content of the table.
1227
1228 2007-09-04  Marvin Decker  <marv.decker@gmail.com>
1229
1230         Reviewed by Maciej Stachowiak.
1231
1232         http://bugs.webkit.org/show_bug.cgi?id=15072
1233         Bug 15072: Fix ImageDecoder.cpp to not copy incoming data
1234
1235         Change ImageDecoder::setData to take a SharedBuffer*.
1236
1237         * platform/graphics/cairo/ImageSourceCairo.cpp:
1238         (WebCore::ImageSource::setData):
1239         * platform/image-decoders/ImageDecoder.h:
1240         (WebCore::RGBA32Buffer::bytes):
1241         (WebCore::RGBA32Buffer::height):
1242         (WebCore::ImageDecoder::setData):
1243         * platform/image-decoders/gif/GIFImageDecoder.cpp:
1244         (WebCore::GIFImageDecoder::setData):
1245         (WebCore::GIFImageDecoder::frameCount):
1246         (WebCore::GIFImageDecoder::decode):
1247         (WebCore::GIFImageDecoder::decodingHalted):
1248         (WebCore::GIFImageDecoder::initFrameBuffer):
1249         * platform/image-decoders/gif/GIFImageDecoder.h:
1250         * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
1251         (WebCore::JPEGImageDecoder::setData):
1252         (WebCore::JPEGImageDecoder::decode):
1253         * platform/image-decoders/jpeg/JPEGImageDecoder.h:
1254         * platform/image-decoders/png/PNGImageDecoder.cpp:
1255         (WebCore::PNGImageDecoder::setData):
1256         (WebCore::PNGImageDecoder::decode):
1257         (WebCore::PNGImageDecoder::headerAvailable):
1258         (WebCore::PNGImageDecoder::rowAvailable):
1259         * platform/image-decoders/png/PNGImageDecoder.h:
1260
1261 2007-09-04  David Hyatt  <hyatt@apple.com>
1262
1263         Fix for <rdar://problem/5271213>, resizing iChat window is slower than in
1264         Tiger. This patch implements a fast scaling mode that can be used by
1265         WebViews, e.g., during window resizing.
1266
1267         Reviewed by John Sullivan
1268
1269         * WebCore.exp:
1270         * WebCore.xcodeproj/project.pbxproj:
1271         * page/Frame.cpp:
1272         (WebCore::FramePrivate::FramePrivate):
1273         * page/Page.cpp:
1274         (WebCore::Page::Page):
1275         (WebCore::Page::inLowQualityImageInterpolationMode):
1276         (WebCore::Page::setInLowQualityImageInterpolationMode):
1277         * page/Page.h:
1278         * platform/graphics/GraphicsContext.cpp:
1279         (WebCore::GraphicsContext::drawImage):
1280         * platform/graphics/GraphicsContext.h:
1281         (WebCore::GraphicsContext::setUseLowQualityImageInterpolation):
1282         (WebCore::GraphicsContext::useLowQualityImageInterpolation):
1283         * platform/graphics/cg/GraphicsContextCG.cpp:
1284         (WebCore::GraphicsContext::setUseLowQualityImageInterpolation):
1285         (WebCore::GraphicsContext::useLowQualityImageInterpolation):
1286         * rendering/RenderImage.cpp:
1287         (WebCore::RenderImage::paint):
1288
1289 2007-09-04  Brady Eidson  <beidson@apple.com>
1290
1291         Reviewed by Adam
1292
1293         Some SQLite tweaks for debugging
1294         -In debug builds, track the thread that opened the database and enforce that any statements
1295          that operate on the SQLDatabase do so from the thread that opened it
1296         -Track whether or not a transaction is in progress for the SQLDatabase to find cases where
1297          someone opens a new transaction while there is still one outstanding (a SQLite logic error)
1298
1299         * loader/icon/SQLDatabase.cpp:
1300         (WebCore::SQLDatabase::SQLDatabase): 
1301         (WebCore::SQLDatabase::open): Track the opening thread.  Also, return false if the DB failed to
1302           open instead of trying to run a PRAGMA on it!
1303         (WebCore::SQLDatabase::close): Reset the opening thread
1304         * loader/icon/SQLDatabase.h:
1305         (WebCore::SQLDatabase::transactionInProgress): 
1306         (WebCore::SQLDatabase::sqlite3Handle): For access to the raw sqlite3* handle to do a thread
1307           safety check
1308
1309         * loader/icon/SQLStatement.cpp:
1310         (WebCore::SQLStatement::prepare): Use the new sqlite3Handle accessor
1311         (WebCore::SQLStatement::step): Ditto
1312
1313         * loader/icon/SQLTransaction.cpp:
1314         (WebCore::SQLTransaction::SQLTransaction): Removed the c'tor form that could automatically
1315           begin the transaction - never used and shouldn't be in practice!
1316         (WebCore::SQLTransaction::begin): Maintain the transaction-in-progress flag on the DB
1317         (WebCore::SQLTransaction::commit): Ditto
1318         (WebCore::SQLTransaction::rollback): Ditto
1319         * loader/icon/SQLTransaction.h:
1320
1321 2007-09-04  David Harrison  <harrison@apple.com>
1322
1323         Reviewed by Maciej and John.
1324
1325         <rdar://problem/5452675> CrashTracer: [USER] 10 crashes in Mail at com.apple.WebCore: WebCore::Node::nodeIndex const + 6
1326
1327         * editing/InsertParagraphSeparatorCommand.cpp:
1328         (WebCore::InsertParagraphSeparatorCommand::doApply):
1329         Adjust pos to pos.downstream() after the refNode is calculated, but before the insertion. Doing it earlier
1330         undid the logic of positionAvoidingSpecialElementBoundary(). The downstream is still needed just to set the
1331         ending selection.
1332
1333 2007-09-04  Antti Koivisto  <antti@apple.com>
1334
1335         Reviewed by Maciej.
1336         
1337         Fix <rdar://problem/5452112>
1338         REGRESSION: Initially focused textfield on www.mac.com login page has no insertion point, and doesn't accept typed characters
1339         
1340         Use updateLayoutIgnorePendingStylesheets() instead of updateLayout(). We need to have rendering to set input focus.
1341
1342         Test: fast/forms/focus-style-pending.html
1343
1344         * dom/Element.cpp:
1345         (WebCore::Element::focus):
1346
1347 2007-09-04  Girish Ramakrishnan  <girish@trolltech.com>
1348
1349         Reviewed by Simon.
1350
1351         Fixed Qt build on Windows
1352
1353         * html/HTMLFormElement.cpp:
1354         (WebCore::pathGetFilename):
1355
1356 2007-09-03  David Harrison  <harrison@apple.com>
1357
1358         Reviewed by Kevin Decker.
1359
1360         <rdar://problem/5456785> REGRESSION (r15963-r15970): Heading text not placed in VoiceOver Item Chooser (15132)
1361
1362         * bridge/mac/WebCoreAXObject.mm:
1363         (-[WebCoreAXObject title]):
1364         For headings, return the text under the element instead of nil.
1365
1366 2007-08-20  Oleg Sukhodolsky <son.two@gmail.com>
1367
1368         Reviewed by Mark.
1369
1370         WebKitQt/WebCoreSupport should not be added to INCLUDEPATH for gdk-port
1371
1372         * WebCore.pro:
1373
1374 2007-09-03  Mark Rowe  <mrowe@apple.com>
1375
1376         Reviewed by Tim Hatcher.
1377
1378         <rdar://problem/5452164> Production build with in symbols directory has no debug info
1379
1380         Enable debug symbol generation on all build configurations.  Production builds are stripped
1381         of symbols by Xcode during deployment post-processing.
1382
1383         * Configurations/Base.xcconfig:
1384         * WebCore.xcodeproj/project.pbxproj:
1385
1386 2007-09-02  Brady Eidson  <beidson@apple.com>
1387
1388         Reviewed by John Sullivan and Mark Rowe
1389
1390         Groundwork for support for monitoring IconDatabase in-memory statistics
1391
1392         * WebCore.exp:
1393         * loader/icon/IconDatabase.cpp:
1394         (WebCore::IconDatabase::pageURLMappingCount): Stub for now
1395         (WebCore::IconDatabase::retainedPageURLCount): Ditto
1396         (WebCore::IconDatabase::iconRecordCount): Ditto
1397         (WebCore::IconDatabase::iconRecordCountWithData): Ditto
1398         * loader/icon/IconDatabase.h:
1399
1400 2007-09-02  Mark Rowe  <mrowe@apple.com>
1401
1402         Reviewed by Antti.
1403
1404         <rdar://problem/5454704> WebKit seems to get too-narrow widths for "Monotype Corsiva", so lays out incorrectly
1405
1406         * platform/mac/FontDataMac.mm:
1407         (WebCore::FontData::determinePitch): Work around NSFont incorrectly reporting Monotype Corsiva as fixed pitch.
1408
1409 2007-09-01  Darin Adler  <darin@apple.com>
1410
1411         - rolled out fix for bug 12988 because it broke getElementById in a layout test
1412           I'm working on a new fix.
1413
1414         * dom/Document.cpp: Rolled out.
1415
1416 2007-09-01  Oliver Hunt  <oliver@apple.com>
1417
1418         Reviewed by Sam.
1419
1420         <rdar://problem/5344848> IME is incorrectly used for key events when on non-editable regions
1421
1422         Adding a new EditorClient method so it is possible to inform WebKit of focus changes.
1423         Also added new virtual method Node::shouldUseInputMethod to allow us to trivially check
1424         whether an input method should be used when processing input for the currently focused
1425         Node.
1426
1427         * bridge/EditorClient.h:
1428         * dom/Node.cpp:
1429         (WebCore::Node::shouldUseInputMethod):
1430         * dom/Node.h:
1431         * html/HTMLInputElement.cpp:
1432         (WebCore::HTMLInputElement::shouldUseInputMethod):
1433         * html/HTMLInputElement.h:
1434         * html/HTMLTextAreaElement.cpp:
1435         (WebCore::HTMLTextAreaElement::shouldUseInputMethod):
1436         * html/HTMLTextAreaElement.h:
1437         * page/FocusController.cpp:
1438         (WebCore::FocusController::setFocusedNode):
1439         * platform/graphics/svg/SVGImageEmptyClients.h:
1440         (WebCore::SVGEmptyEditorClient::setInputMethodState):
1441
1442 2007-09-01  Rob Buis  <buis@kde.org>
1443
1444         Reviewed by Darin.
1445
1446         http://bugs.webkit.org/show_bug.cgi?id=12988
1447         First element (in document order) is not returned when other duplicate ID-ed elements were created first
1448
1449         Reset the element id cache when id's are added or removed and there
1450         are duplicates for that id.
1451
1452         Tests: fast/dom/duplicate-ids-document-order.html
1453
1454         * dom/Document.cpp:
1455         (WebCore::Document::getElementById):
1456         (WebCore::Document::addElementById):
1457         (WebCore::Document::removeElementById):
1458
1459 2007-09-01  Rob Buis  <buis@kde.org>
1460
1461         Reviewed by Darin.
1462
1463         http://bugs.webkit.org/show_bug.cgi?id=15083
1464         Some symbols in WebKit do not need to be exported
1465
1466         Do not export these symbols.
1467
1468         * dom/QualifiedName.cpp:
1469         (WebCore::hashComponents):
1470         * dom/XMLTokenizer.cpp:
1471         (WebCore::toString):
1472         (WebCore::getTokenizer):
1473         * history/HistoryItem.cpp:
1474         (WebCore::defaultNotifyHistoryItemChanged):
1475         * platform/Arena.cpp:
1476         (WebCore::CeilingLog2):
1477         * platform/graphics/Color.cpp:
1478         (WebCore::calcHue):
1479         * platform/graphics/Path.cpp:
1480         (WebCore::pathLengthApplierFunction):
1481         * platform/graphics/cg/PathCG.cpp:
1482         (WebCore::CGPathToCFStringApplierFunction):
1483         (WebCore::CFStringFromCGPath):
1484         * rendering/RenderText.cpp:
1485         (WebCore::isSpaceAccordingToStyle):
1486
1487 2007-08-31  Alice Liu  <alice.liu@apple.com>
1488
1489         Reviewed by Tim Hatcher.
1490
1491         Fixed <rdar://problem/5420682> Mail crashes at WebCore::InsertLineBreakCommand::doApply() after dropping a selected image over container's close box
1492
1493         * editing/DeleteButtonController.cpp:
1494         (WebCore::DeleteButtonController::show):
1495         Factored out the code in ::show() that created and styled the elements of the Deletion UI
1496
1497         (WebCore::DeleteButtonController::createDeletionUI):
1498         Neglecting to move the append of the deletionUI elements into the same clause that handles the creation
1499         of them ended up creating multiple elements at were repeatedly appended to the target, resulting in a 
1500         bloated table deletion UI which was slow to show and hide. 
1501
1502         * editing/DeleteButtonController.h:
1503         (WebCore::DeleteButtonController::enabled):
1504         Restore this function to how it used to be pre-r25305, sans asserts
1505
1506         * editing/EditCommand.cpp:
1507         Add disable/enable sandwich when undoing/redoing commands too
1508         (WebCore::EditCommand::unapply):
1509         (WebCore::EditCommand::reapply):
1510
1511 2007-08-31  Antti Koivisto  <antti@apple.com>
1512
1513         Reviewed by Anders.
1514
1515         Fix <rdar://problem/5452943>
1516         REGRESSION (r25283): Reproducible crash in HTMLObjectElement::getInstance under guard malloc
1517         
1518         Calling updateLayoutIgnorePendingStylesheets() may do arbitrary things to render tree so
1519         no RenderObjects can be cached over it.
1520
1521         * html/HTMLEmbedElement.cpp:
1522         (WebCore::findWidgetRenderer):
1523         (WebCore::HTMLEmbedElement::getInstance):
1524         * html/HTMLObjectElement.cpp:
1525         (WebCore::HTMLObjectElement::getInstance):
1526
1527 2007-08-31  Anders Carlsson  <andersca@apple.com>
1528
1529         Reviewed by Mitz.
1530
1531         <rdar://problem/5443936>
1532         Crash after QT movie completes playback at apple.com/imac
1533         
1534         If the plug-in or one of its children have focus, set it to NULL to prevent the web view window from getting the focus, 
1535         which can cause a layout to happen while in HTMLObjectElement::detach. (This is what we do on the Mac).
1536         
1537         * plugins/win/PluginViewWin.cpp:
1538         (WebCore::PluginViewWin::setParent):
1539
1540 2007-08-30  Adele Peterson  <adele@apple.com>
1541
1542         Reviewed by Justin.
1543
1544         Fix for <rdar://problem/5450600> REGRESSION: can't paste in textfield if its in a body that has user-select:none set (affects widgets)
1545
1546         Test: editing/pasteboard/paste-plaintext-user-select-none.html
1547
1548         * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplacementFragment::insertFragmentForTestRendering):
1549           Copy the user-select style from the current selection node and apply it so it is considered during the test rendering.
1550           This is important since we recently changed user-select to be inherited.  When we consider valid VisiblePositions for the test rendering,
1551           we need to have the correct user-select value that will actually be used for the real insertion.
1552
1553 2007-08-31  Anders Carlsson  <andersca@apple.com>
1554
1555         Reviewed by Oliver.
1556
1557         <rdar://problem/5423939>
1558         http://bugs.webkit.org/show_bug.cgi?id=15013
1559         ASSERTION FAILED !m_inDestructor in WebCore::Shared<WebCore::PluginStreamWin>::ref() on Windows
1560         
1561         Protect the stream in case it's destroyed by the plug-in.
1562         
1563         * plugins/win/PluginStreamWin.cpp:
1564         (WebCore::PluginStreamWin::didReceiveData):
1565
1566 a2007-08-31  Darin Adler  <darin@apple.com>
1567
1568         Reviewed by Anders.
1569
1570         - http://bugs.webkit.org/show_bug.cgi?id=15122
1571
1572         * editing/htmlediting.cpp: (WebCore::avoidIntersectionWithNode):
1573         Change assertion so that it only fires when actually modifying the selection.
1574         This isn't nearly as helpful, because the old assertion could catch potential
1575         problems in more cases, but it's not obvious how to do better.
1576
1577 2007-08-30  Oliver Hunt  <oliver@apple.com>
1578
1579         Reviewed by Adam.
1580         
1581         <rdar://problem/5430772> REGRESSION(303-310A5) list items do not show with mouse over on istweb.apple.com/quack.apple.com
1582         
1583         VC++ treats bitfields as signed members, so Node::m_styleChange would be
1584         sign extended if it was assigned the value FullStyleChange.  This caused
1585         style recalculation to stop propagating.  
1586         
1587         We work around this VC++ oddity by storing the enum as an unsigned, and
1588         casting back to StyleChangeType in the getter.
1589                 
1590         Test: fast/css/hover-affects-child.html
1591
1592         * dom/Node.h:
1593         (WebCore::Node::styleChangeType):
1594
1595 2007-08-29  Justin Garcia  <justin.garcia@apple.com>
1596
1597         Reviewed by Darin.
1598
1599         <rdar://problem/5368833> 
1600         REGRESSION: Pasting a triple-clicked line of quoted text at the top of a message adds an extra, quoted line
1601
1602         * editing/CompositeEditCommand.cpp:
1603         (WebCore::CompositeEditCommand::insertParagraphSeparator): Added an option for
1604         using a plain div to hold the new paragraph, instead of a clone of the previous
1605         block.
1606         * editing/CompositeEditCommand.h:
1607         * editing/InsertParagraphSeparatorCommand.cpp: Ditto.
1608         (WebCore::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): Ditto.
1609         (WebCore::InsertParagraphSeparatorCommand::doApply): Ditto.
1610         * editing/InsertParagraphSeparatorCommand.h:
1611         * editing/ReplaceSelectionCommand.cpp:
1612         (WebCore::ReplaceSelectionCommand::doApply): Use a default block element when creating
1613         new paragraphs, so that empty paragraphs don't contain the block style of the previous
1614         one.
1615         Don't expand collapsed brs at the end of inserted content, this was the root of the bug.
1616         We'd copy <blockquote>hello<br></blockquote><br class="Apple-interchange-newline">
1617         and get an extra paragraph.  The removed code used to make sure that if the copied 
1618         selection ends with a paragraph break that is represented in the copied markup by a 
1619         regular br (not an interchange newline br), that that paragraph break appears in the 
1620         pasted content, but shouldMergeEnd, which was introduced after this code was written, 
1621         now takes care of that.
1622         (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR): Inserted content should always
1623         displace placeholder brs, even if that inserted content ends with a br.
1624         * editing/markup.cpp:
1625         (WebCore::needInterchangeNewlineAfter): This code failed to add an interchange newline
1626         if the user copied <div>hello</div><br>, only don't add an interchange newline when
1627         copying ^hello<br>^<br>, because then the copied paragraph break will already be 
1628         represented in the copied markup by a br.
1629         (WebCore::createMarkup):
1630
1631 2007-08-30  David Harrison  <harrison@apple.com>
1632
1633         Reviewed by Darin.
1634
1635         <rdar://problem/5423900> Seed: safari crashes on submit feedback page in -[WebCoreAXObject isAttachment]
1636
1637         * bridge/mac/WebCoreAXObject.mm:
1638         (-[WebCoreAXObject isAttachment]):
1639         Add nil check since element could be detached.
1640
1641 2007-08-30  Mitz Pettel  <mitz@webkit.org>
1642
1643         Reviewed by Dave Hyatt.
1644
1645         - fix http://bugs.webkit.org/show_bug.cgi?id=13282
1646           <rdar://problem/5126392> REGRESSION (NativePopUp): Rightmost character cut off in pop-up menu
1647
1648         * rendering/RenderMenuList.cpp:
1649         (WebCore::RenderMenuList::updateOptionsWidth): When measuring option text, use
1650         the same WebCore run rounding behavior that is used to draw it in the popup button.
1651
1652 2007-08-30  Riku Voipio  <riku.voipio@iki.fi>
1653
1654         Reviewed by Dave Kilzer.
1655
1656         Better ARM defines.
1657
1658         * platform/DeprecatedString.h: Update comments to reflect the
1659         change and update test to fit changes to Platform.h.
1660
1661 2007-08-30  Darin Adler  <darin@apple.com>
1662
1663         Reviewed by Tim Hatcher.
1664
1665         - fix http://bugs.webkig.org/show_bug.cgi?id=14981
1666           DEBUG builds of WebKit hang videwing Yahoo! Mail messages
1667           with ~5 MB text attachment
1668
1669         * rendering/InlineFlowBox.cpp: (WebCore::InlineFlowBox::checkConsistency):
1670         * rendering/RenderFlow.cpp: (WebCore::RenderFlow::checkConsistency):
1671         * rendering/RenderText.cpp: (WebCore::RenderText::checkConsistency):
1672         Put the actual consistency check inside an ifdef. If you need it you can
1673         turn it on. There's still some function call overhead in builds that don't
1674         have NDEBUG defined, but that's worth it so we can turn this on and off
1675         without recompiling the world.
1676
1677         - small code style improvement to recently changed function
1678
1679         * editing/TextIterator.cpp: (WebCore::plainTextToMallocAllocatedBuffer):
1680         Use a typedef and make_pair to make the code dealing with the pair simpler to read.
1681
1682 2007-08-30  Simon Hausmann  <hausmann@kde.org>
1683
1684         Reviewed by Zack.
1685
1686         Fix Qt/Gdk build. gcc on Linux at least doesn't like initializing
1687         variables between jumps with goto ("jump to label foo crosses
1688         initialization of bar").
1689
1690         * editing/TextIterator.cpp:
1691         (WebCore::plainTextToMallocAllocatedBuffer):
1692
1693 2007-08-30  Darin Adler  <darin@apple.com>
1694
1695         Reviewed by Antti.
1696  
1697         - fix <rdar://problem/5423270> CrashTracer: [USER] 1 crash in Safari at com.apple.WebCore:
1698           WebCore::plainTextToMallocAllocatedBuffer + 762
1699
1700         * editing/TextIterator.cpp: (WebCore::plainTextToMallocAllocatedBuffer):
1701         Check for a malloc failure and exit the function if it failed.
1702
1703 2007-08-29  Anders Carlsson  <andersca@apple.com>
1704
1705         Reviewed by Oliver.
1706
1707         <rdar://problem/5404329>
1708         Plugin content starves WM_TIMER events on UI thread (affects idle behavior of app) on http://www.vincent-vella.com/, http://www.sagmeister.com/
1709         
1710         Add a tiny delay to invalidation timer to prevent it from starving other timers.
1711         
1712         * plugins/win/PluginViewWin.cpp:
1713         (WebCore::PluginViewWin::invalidateRect):
1714
1715 2007-08-29  Darin Adler  <darin@apple.com>
1716
1717         Reviewed by Adele.
1718
1719         * editing/htmlediting.cpp: (WebCore::avoidIntersectionWithNode):
1720         Fix an assert that was firing for me all the time when doing editing operations.
1721
1722 2007-08-29  Anders Carlsson <andersca@apple.com>
1723
1724         Reviewed by Adam.
1725
1726         <rdar://problem/5386098>
1727         Repro hang with some Flash plugin content (http://dougmccune.com/blog/2007/07/25/coming-to-flexcamp-at-adobe/)
1728         
1729         In some cases, Flash ends up starving the main loop by sending a lot of WM_USER + 1 messages. Throttle these
1730         messages so they won't end up hanging the web browser.
1731         
1732         * plugins/win/PluginViewWin.cpp:
1733         (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin):
1734         (WebCore::PluginMessageThrottlerWin::~PluginMessageThrottlerWin):
1735         (WebCore::PluginMessageThrottlerWin::appendMessage):
1736         (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
1737         (WebCore::PluginMessageThrottlerWin::allocateMessage):
1738         (WebCore::PluginMessageThrottlerWin::isInlineMessage):
1739         (WebCore::PluginMessageThrottlerWin::freeMessage):
1740         (WebCore::PluginViewWndProc):
1741         (WebCore::PluginViewWin::wndProc):
1742         (WebCore::PluginViewWin::determineQuirks):
1743         * plugins/win/PluginViewWin.h:
1744         (WebCore::):
1745         (WebCore::PluginViewWin::pluginWndProc):
1746
1747 2007-08-29  Beth Dakin  <bdakin@apple.com>
1748
1749         Reviewed by Hyatt.
1750
1751         Fix for <rdar://problem/5436800> REGRESSION: PLT is 1.5% slower due 
1752         to r24593 and r25098
1753
1754         In r25098, we only called setCreatedByParser for XML! This patch 
1755         calls it for HTML too, and takes care of the performance 
1756         regression.
1757
1758         * html/HTMLElementFactory.cpp:
1759         (WebCore::styleConstructor):
1760
1761 2007-08-29  Antti Koivisto  <antti@apple.com>
1762
1763         Reviewed by Mitz.
1764         
1765         Fix <rdar://problem/5425951>
1766         REGRESSION: change to updateLayoutIgnorePendingStylesheets causes SAP Portal page to render wrong
1767         
1768         If new nodes have been added or style recalc has been done with style sheets still pending, some nodes 
1769         may not have had their real style calculated yet. Normally this state gets cleaned when style sheets arrive 
1770         but in updateLayoutIgnorePendingStylesheets() we need to do full style recalc to get up-to-date style immediatly.
1771         
1772         Added a document flag to track if there are any nodes that did not have their real style calculated due to
1773         pending stylesheets.
1774
1775         Test: fast/dynamic/style-access-late-stylesheet-load.html
1776
1777         * css/CSSStyleSelector.cpp:
1778         (WebCore::CSSStyleSelector::styleForElement):
1779         * dom/Document.cpp:
1780         (WebCore::Document::Document):
1781         (WebCore::Document::recalcStyle):
1782         (WebCore::Document::updateLayoutIgnorePendingStylesheets):
1783         * dom/Document.h:
1784         (WebCore::Document::setHasNodesWithPlaceholderStyle):
1785
1786 2007-08-29  Alice Liu  <alice.liu@apple.com>
1787
1788         Reviewed by Maciej.
1789
1790         We disable the DeleteButton UI before applying any editing commands.
1791         This patch simply moves those disable/enable calls to a more correct place, closer to the actual application of the editing command. 
1792
1793         * editing/EditCommand.cpp:
1794         (WebCore::EditCommand::apply):
1795         (WebCore::applyCommand):
1796
1797 2007-08-28  Alice Liu  <alice.liu@apple.com>
1798
1799         fixed <rdar://problem/5420682> Mail crashes at WebCore::InsertLineBreakCommand::doApply() 
1800                                        after dropping a selected image over container's close box
1801
1802         Reviewed by Darin and Maciej.
1803
1804         * editing/DeleteButtonController.cpp:
1805         (WebCore::DeleteButtonController::show):
1806         (WebCore::DeleteButtonController::hide):
1807         * editing/DeleteButtonController.h:
1808         (WebCore::DeleteButtonController::enabled):
1809         General changes made to DeleteButtonController: when hiding, it's not necessary to clear out 
1810         the m_containerElement and m_target, especially since to fix this bug we need to keep 
1811         their values around.  It's sufficient to just detach the container from target.
1812
1813         * editing/EditCommand.cpp:
1814         (WebCore::EditCommand::EditCommand):
1815         Move the selection out of the deletion UI since we don't want to expose the deletion UI to any editing.
1816
1817         * editing/Editor.cpp:
1818         (WebCore::Editor::rangeForPoint):
1819         Move the range out of the deletion UI since we don't want to expose the deletion UI to any editing.
1820
1821         * editing/htmlediting.cpp:
1822         * editing/htmlediting.h:
1823         (WebCore::avoidIntersectionWithNode):
1824         Moved function that operates on Range from markup.cpp to here
1825         Added new implementation for function that operates on Selection
1826
1827         * editing/markup.cpp:
1828         (WebCore::createMarkup):
1829         Moved function out of this file to htmlediting.cpp, and renamed to avoidIntersectionWithNode
1830
1831 2007-08-29  David Hyatt  <hyatt@apple.com>
1832
1833         Fix for 5441281, remove our dependency on cursor rects and drag margins
1834         in AppKit for a large performance boost on the PLT and iBench.
1835
1836         Reviewed by darin
1837
1838         * platform/mac/WidgetMac.mm:
1839         (WebCore::safeRemoveFromSuperview):
1840         (WebCore::Widget::addToSuperview):
1841         Suppress the resetting of drag margins when views are added and removed.
1842
1843         (WebCore::Widget::setCursor):
1844         Just use NSCursor's set method to immediately set the cursor.  We no longer
1845         rely on NSScrollView/NSClipView setDocumentCursor, since that is implemented
1846         using cursor rects.
1847
1848 2007-08-29  Rick  <rick@writhe.org.uk>
1849
1850         Reviewed by Tim Hatcher.
1851
1852         Fix http://bugs.webkit.org/show_bug.cgi?id=14853
1853         Bug 14853: Incorrect implementation of ArrayImpl's equality operator
1854
1855         * platform/ArrayImpl.cpp:
1856         (WebCore::ArrayImpl::operator==):
1857         Fixed typo so that correct variable is used in equality comparison.
1858
1859 2007-08-29  Peter Kasting  <zerodpx@gmail.com>
1860
1861         Reviewed by Maciej.
1862
1863         - fix http://bugs.webkit.org/show_bug.cgi?id=15096
1864         Move the GIF frame duration minimum check into the various
1865         ImageSource*.cpp backends and use the same values as
1866         ImageSourceCG.cpp.
1867
1868         * platform/graphics/cairo/ImageSourceCairo.cpp:
1869         (WebCore::ImageSource::frameDurationAtIndex):
1870         * platform/graphics/qt/ImageSourceQt.cpp:
1871         (WebCore::ImageSource::frameDurationAtIndex):
1872         * platform/image-decoders/gif/GIFImageReader.cpp:
1873         (GIFImageReader::read):
1874
1875 2007-08-29  Peter Kasting  <zerodpx@gmail.com>
1876
1877         Reviewed by Maciej.
1878
1879         - fix http://bugs.webkit.org/show_bug.cgi?id=15097
1880         Make PNGImageDecoder.cpp size its frame buffer vector in its
1881         constructor, so it never throws decoded image data away no matter
1882         what order its functions are called in.
1883
1884         * platform/image-decoders/png/PNGImageDecoder.cpp:
1885         (WebCore::PNGImageDecoder::PNGImageDecoder):
1886         (WebCore::PNGImageDecoder::frameBufferAtIndex):
1887         (WebCore::PNGImageDecoder::decode):
1888         (WebCore::PNGImageDecoder::rowAvailable):
1889         (WebCore::PNGImageDecoder::pngComplete):
1890
1891 2007-08-29  Peter Kasting  <zerodpx@gmail.com>
1892
1893         Reviewed by Maciej.
1894
1895         - fix http://bugs.webkit.org/show_bug.cgi?id=15104
1896         Don't double-compensate for sizeof(unsigned) when making a buffer
1897         overflow check in the GIF decoder.  Now interlaced GIFs don't
1898         sometimes get nothing/garbage in some of the bottom rows.
1899
1900         * platform/image-decoders/gif/GIFImageDecoder.cpp:
1901         (WebCore::GIFImageDecoder::haveDecodedRow):
1902
1903 2007-08-28  Sam Weinig  <sam@webkit.org>
1904
1905         Reviewed by Darin.
1906
1907         Update fix landed in r25249 to account for XMLHttpRequest, which can also be EventTargets.
1908
1909         Tests: http/tests/security/listener/xss-XMLHttpRequest-addEventListener.html
1910                http/tests/security/listener/xss-XMLHttpRequest-shortcut.html
1911
1912         * bindings/js/JSXMLHttpRequest.cpp:
1913         (KJS::JSXMLHttpRequest::putValueProperty): Use the Window object associated with document's frame, not the active Window.
1914         (KJS::JSXMLHttpRequestPrototypeFunction::callAsFunction): ditto
1915         * xml/XMLHttpRequest.h:
1916         (WebCore::XMLHttpRequest::document): Expose Document member so bindings can access the correct frame.
1917
1918 2007-08-28  Anders Carlsson  <andersca@apple.com>
1919
1920         Reviewed by Darin.
1921
1922         <rdar://problem/5424866> Bottom portion of any Web Clip widget appears transparent
1923
1924         Restore the previous behavior, creating plug-ins on attach, for WebKit plug-ins. Netscape plug-ins
1925         are still created during the first layout.
1926         
1927         * html/HTMLEmbedElement.cpp:
1928         (WebCore::HTMLEmbedElement::getInstance):
1929         Only call layout if the renderer doesn't have a widget.
1930         
1931         * html/HTMLObjectElement.cpp:
1932         (WebCore::HTMLObjectElement::getInstance):
1933         Likewise.
1934         
1935         * loader/FrameLoader.cpp:
1936         (WebCore::FrameLoader::shouldUsePlugin):
1937         Update for enum change.
1938         
1939         * loader/FrameLoaderTypes.h:
1940         Add ObjectContentNetscapePlugin and ObjectContentOtherPlugin.
1941         
1942         * page/mac/WebCoreFrameBridge.h:
1943         Get rid of the enum here, we can use the one in FrameLoaderTypes.h
1944         
1945         * rendering/RenderPartObject.cpp:
1946         (WebCore::RenderPartObject::updateWidget):
1947         Only create the plug-in if it's not a Netscape plug-in.
1948         
1949         (WebCore::RenderPartObject::layout):
1950         Fix indentation.
1951         
1952 2007-08-28  David Harrison  <harrison@apple.com>
1953
1954         Reviewed by Darin.
1955
1956         <rdar://problem/5415006> Command Left in a To Do causes caret to disappear
1957
1958         The selection was ending up inside non-editable content at the To Do Options
1959         arrow image, rather then at the editable position just to the left of that image.
1960         The problem was that startPositionForLine looked only at line boxes, and there
1961         is no linebox for the editable position at the far left of a To Do, which is
1962         a table. Addressed by having startPositionForLine use table offset 0 instead
1963         of the first VisiblePosition inside the table.
1964         
1965         Found and fixed the similar case with option-left (move by word position).
1966         
1967         Test cases:
1968         * editing/selection/mixed-editability-8.html: Added.
1969         * editing/selection/mixed-editability-9.html: Added.
1970
1971         Source changes:
1972         * editing/SelectionController.cpp:
1973         (WebCore::SelectionController::modifyMovingLeftBackward):
1974         
1975         * editing/VisiblePosition.cpp:
1976         (WebCore::VisiblePosition::next):
1977         (WebCore::VisiblePosition::previous):
1978         (WebCore::VisiblePosition::stayInEditableContentLeft):
1979         (WebCore::VisiblePosition::stayInEditableContentRight):
1980         Factored stayInEditableContentLeft() and stayInEditableContentRight()
1981         out of previous() and next().
1982         
1983         * editing/VisiblePosition.h:
1984         Declare stayInEditableContentLeft() and stayInEditableContentRight().
1985
1986         * editing/visible_units.cpp:
1987         (WebCore::previousWordPosition):
1988         (WebCore::nextWordPosition):
1989         (WebCore::startOfLine):
1990         (WebCore::endOfLine):
1991         (WebCore::previousSentencePosition):
1992         (WebCore::nextSentencePosition):
1993         Call stayInEditableContentLeft() or stayInEditableContentRight(), as 
1994         appropriate, so prevent crossing from editable content into
1995         uneditable content.
1996         
1997         (WebCore::startPositionForLine):
1998         Use table offset 0 instead of the first VisiblePosition in the table.
1999         
2000 2007-08-28  Mark Rowe  <mrowe@apple.com>
2001
2002         Reviewed by Darin Adler.
2003
2004         <rdar://problem/5443453> Decreasing history expiration time from 1 year to 1 week can lead to long hang while icon database syncs
2005
2006         Perform the sync inside a SQLite transaction.  This drops the time taken for the sync from over 90s to under half a second in the
2007         extreme case of over 90,000 URLs being pruned.
2008
2009         * loader/icon/IconDatabase.cpp:
2010         (WebCore::IconDatabase::syncDatabase):
2011
2012 2007-08-28  Mark Rowe  <mrowe@apple.com>
2013
2014         Reviewed by Darin Adler.
2015
2016         <rdar://problem/5437983> Loading history containing 100,000 entries adds 20s to Safari's startup
2017
2018         Add a new constructor for HistoryItem that initializes the alternate title.  This prevents WebHistoryItem
2019         in WebKit from having explicitly set the display title, which triggers a history item changed notification
2020         to be posted, for each history item loaded.
2021
2022         * WebCore.exp:
2023         * history/HistoryItem.cpp:
2024         (WebCore::HistoryItem::HistoryItem):
2025         * history/HistoryItem.h:
2026
2027 2007-08-28  Anders Carlsson  <andersca@apple.com>
2028
2029         Reviewed by Darin.
2030
2031         <rdar://problem/5298296> XMLHttpRequest readyState 3 & responseText buffer issues
2032         
2033         Add a shouldContentSniff flag to ResourceLoader and ResourceHandle and have XMLHttpRequest 
2034         pass in false when creating its subresource loader.
2035         
2036         * WebCore.exp:
2037         * loader/MainResourceLoader.cpp:
2038         (WebCore::MainResourceLoader::MainResourceLoader):
2039         (WebCore::MainResourceLoader::loadNow):
2040         * loader/ResourceLoader.cpp:
2041         (WebCore::ResourceLoader::ResourceLoader):
2042         (WebCore::ResourceLoader::load):
2043         * loader/ResourceLoader.h:
2044         * loader/SubresourceLoader.cpp:
2045         (WebCore::SubresourceLoader::SubresourceLoader):
2046         (WebCore::SubresourceLoader::create):
2047         * loader/SubresourceLoader.h:
2048         * loader/mac/NetscapePlugInStreamLoaderMac.mm:
2049         (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
2050         * platform/mac/WebCoreSystemInterface.h:
2051         * platform/mac/WebCoreSystemInterface.mm:
2052         * platform/network/ResourceHandle.cpp:
2053         (WebCore::ResourceHandle::ResourceHandle):
2054         (WebCore::ResourceHandle::create):
2055         * platform/network/ResourceHandle.h:
2056         * platform/network/ResourceHandleInternal.h:
2057         (WebCore::ResourceHandleInternal::ResourceHandleInternal):
2058         * platform/network/mac/ResourceHandleMac.mm:
2059         (WebCore::ResourceHandle::start):
2060         * xml/XMLHttpRequest.cpp:
2061         (WebCore::XMLHttpRequest::send):
2062
2063 2007-08-27  Steve Falkenburg  <sfalken@apple.com>
2064
2065         Added getter for committedFirstRealDocumentLoad.
2066         
2067         Reviewed by Maciej.
2068
2069         * loader/FrameLoader.h: Added committedFirstRealDocumentLoad.
2070         (WebCore::FrameLoader::committedFirstRealDocumentLoad): Added.
2071
2072 2007-08-27  Antti Koivisto  <antti@apple.com>
2073
2074         Reviewed by Maciej.
2075         
2076         Fix <rdar://problem/5433144>
2077         REGRESSION: Unable to click "Select" link at Expedia for car rentals
2078         
2079         javascript: URLs need special handling when serializing. Escaping them like
2080         normal attribute values can do bad things. Try hard to not escape anything,
2081         escape quote characters only if really necessary. Try to match Firefox.
2082
2083         Test: fast/innerHTML/javascript-url.html
2084
2085         * editing/markup.cpp:
2086         (WebCore::urlAttributeToQuotedString):
2087         (WebCore::startMarkup):
2088
2089 2007-08-27  David Hyatt  <hyatt@apple.com>
2090
2091         Fix for 5441224, micro-optimizations to improve the PLT by 1%.
2092
2093         Reviewed by Darin
2094
2095         * css/CSSStyleSelector.cpp:
2096         (WebCore::CSSStyleSelector::canShareStyleWithElement):
2097         * platform/mac/FontMac.mm:
2098         (WebCore::Font::drawGlyphs):
2099         * rendering/RenderInline.cpp:
2100         (WebCore::RenderInline::requiresLayer):
2101         * rendering/RenderObject.cpp:
2102         (WebCore::RenderObject::isBody):
2103         * rendering/RenderObject.h:
2104         (WebCore::RenderObject::renderArena):
2105         (WebCore::RenderObject::isRoot):
2106
2107 2007-08-27  Mitz Pettel  <mitz@webkit.org>
2108
2109         Reviewed by Darin.
2110
2111         - fix http://bugs.webkit.org/show_bug.cgi?id=15091
2112           Crash in RenderBlock::skipWhitespace during layout <rdar://problem/5439631> 
2113
2114         Test: fast/replaced/applet-disabled-positioned.html
2115
2116         * html/HTMLAppletElement.cpp:
2117         (WebCore::HTMLAppletElement::createRenderer): Changed to call
2118         RenderObject::createObject(), which accounts for style.
2119
2120 2007-08-26  Antti Koivisto  <antti@apple.com>
2121
2122         Reviewed by Darin.
2123         
2124         Fix for <rdar://problem/5433726>
2125         Mail crash at WebCore::Frame::styleForSelectionStart() when deleting a selection in a HTML message (http://www.yahoo.com/)
2126
2127         Test: editing/style/temporary-span-crash.html
2128
2129         * page/Frame.cpp:
2130         (WebCore::Frame::styleForSelectionStart):
2131         Temporary span created here might not have renderer if document has style sheet that makes it display:none.
2132         Set display:inline explicitly in spans style attribute. This temporary span does not need to get its display 
2133         value from actual document style sheets. Null check the renderer too to be sure.
2134
2135
2136 2007-08-24  Sam Weinig  <sam@webkit.org>
2137
2138         Reviewed by Adele.
2139
2140         Fix for <rdar://problem/5426142>
2141
2142         Use the EventTarget's frame when creating the EventListener.
2143
2144         Tests: http/tests/security/listener/xss-JSTargetNode-onclick-addEventListener.html
2145                http/tests/security/listener/xss-JSTargetNode-onclick-shortcut.html
2146                http/tests/security/listener/xss-window-onclick-addEventListener.html
2147                http/tests/security/listener/xss-window-onclick-shortcut.html
2148
2149         * bindings/js/JSEventTargetNode.cpp:
2150         (WebCore::JSEventTargetNode::setListener):
2151         (WebCore::JSEventTargetNodePrototypeFunction::callAsFunction):
2152         * bindings/js/kjs_window.cpp:
2153         (KJS::WindowFunc::callAsFunction):
2154
2155 2007-08-25  Mitz Pettel  <mitz@webkit.org>
2156
2157         Reviewed by Sam Weinig.
2158
2159         - fix http://bugs.webkit.org/show_bug.cgi?id=15077
2160           REGRESSION: Cannot drag selected text out of a background window
2161
2162         * manual-tests/drag-out-of-background-window.html: Added.
2163         * page/EventHandler.cpp:
2164         (WebCore::EventHandler::eventMayStartDrag): Added missing coordinate
2165         conversion.
2166
2167 2007-08-25  Rob Buis  <buis@kde.org>
2168
2169         Reviewed by Darin.
2170
2171         http://bugs.webkit.org/show_bug.cgi?id=14848
2172         DOM table rules are not updated when changed
2173
2174         On a dynamic rules attr change, mark the table cells and
2175         their ancestors (up to and including the table tag) as
2176         changed.
2177
2178         Tests: fast/table/rules-attr-dynchange1.html
2179                fast/table/rules-attr-dynchange2.html
2180
2181         * html/HTMLTableElement.cpp:
2182         (WebCore::isTableCellAncestor):
2183         (WebCore::setTableCellsChanged):
2184         (WebCore::HTMLTableElement::parseMappedAttribute):
2185
2186 2007-08-25  Adele Peterson  <adele@apple.com>
2187
2188         Reviewed by Mitz.
2189
2190         Fix for http://bugs.webkit.org/show_bug.cgi?id=15073
2191         <rdar://problem/5426557> REGRESSION: Can no longer drag text from textareas
2192         
2193         Test: fast/forms/drag-out-of-textarea.html
2194
2195         * rendering/RenderTextControl.cpp: (WebCore::RenderTextControlInnerBlock::nodeAtPoint):
2196           Only restricts hit testing if the placeholder text is visible.
2197         * rendering/RenderTextControl.h: (WebCore::RenderTextControl::placeholderIsVisible): Added. 
2198
2199 2007-08-25  Peter Kasting <zerodpx@gmail.org>
2200
2201         Reviewed by Sam Weinig.
2202
2203         Part 2 of http://bugs.webkit.org/show_bug.cgi?id=14967.
2204         Eliminate all remaining implicit conversions of wtf::Vector<T> to T*.  Where code was
2205         previously checking that the Vector's data pointer was non-NULL, check !Vector::isEmpty()
2206         instead.
2207
2208         * bindings/js/kjs_navigator.cpp:
2209         (KJS::PluginBase::cachePluginDataIfNecessary):
2210         * loader/mac/LoaderNSURLExtras.m:
2211         (suggestedFilenameWithMIMEType):
2212         * page/FrameView.cpp:
2213         (WebCore::FrameView::~FrameView):
2214         (WebCore::FrameView::pauseScheduledEvents):
2215         (WebCore::FrameView::resumeScheduledEvents):
2216         (WebCore::FrameView::dispatchScheduledEvents):
2217         * platform/mac/PlugInInfoStoreMac.mm:
2218         (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
2219
2220 2007-08-25  Mitz Pettel  <mitz@webkit.org>
2221
2222         Rubber-stamped by Adam Roben
2223
2224         - remove unused file
2225
2226         * platform/win/MouseEventWin.cpp: Removed.
2227
2228 2007-08-25  Jasper Bryant-Greene  <m@ni.ac.nz>
2229
2230         Reviewed by Oliver Hunt.
2231
2232         Set paintingDisabled to true in Cairo's GraphicsContext constructor
2233         when passed a null PlatformGraphicsContext.
2234
2235         * platform/graphics/cairo/GraphicsContextCairo.cpp:
2236         (WebCore::GraphicsContext::GraphicsContext):
2237
2238 2007-08-25  Mitz Pettel  <mitz@webkit.org>
2239
2240         Reviewed by Dave Hyatt.
2241
2242         - fix http://bugs.webkit.org/show_bug.cgi?id=15056
2243           REGRESSION (r21472): Digg Podcasts Episodes Render "Digg" counter incorrectly
2244
2245         Covered by fast/parser/residual-style-close-across-n-blocks.html
2246
2247         * html/HTMLParser.cpp:
2248         (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): If the
2249         residual style was closed before anything else in the block (so it does
2250         not apply to anything inside the block) avoid creating an empty element for
2251         it inside the block.
2252
2253 2007-08-25  Mitz Pettel  <mitz@webkit.org>
2254
2255         Reviewed by Dave Hyatt.
2256
2257         - fix http://bugs.webkit.org/show_bug.cgi?id=14972
2258           Moving cursor down in contentEditable section fails if styled line-height:1em
2259
2260         Test: editing/selection/move-by-line-003.html
2261
2262         * rendering/RenderText.cpp:
2263         (WebCore::RenderText::positionForCoordinates): Changed hit testing so that each
2264         line is tested for hits between its overflow top and the next line's overflow top.
2265         This matches RenderBlock::positionForCoordinates.
2266
2267 2007-08-25  Mitz Pettel  <mitz@webkit.org>
2268
2269         Reviewed by Justin.
2270
2271         - fix http://bugs.webkit.org/show_bug.cgi?id=14792
2272           <rdar://problem/5367763> REGRESSION: Copy inserts carriage return in middle of selection
2273
2274         Test: editing/pasteboard/newlines-around-floating-or-positioned.html
2275
2276         * editing/TextIterator.cpp:
2277         (WebCore::shouldEmitNewlinesBeforeAndAfterNode): Do not emit newlines around
2278         floating or positioned blocks. This behavior seems to match WinIE's.
2279
2280 2007-08-23  Justin Garcia  <justin.garcia@apple.com>
2281
2282         Reviewed by Darin.
2283         
2284         <rdar://problem/5432254> GoogleDocs: A hang occurs when applying list style to selected table
2285         
2286         * editing/DeleteSelectionCommand.cpp:
2287         (WebCore::DeleteSelectionCommand::handleGeneralDelete): If the position
2288         that marked the start of the range to delete has been removed from the
2289         document, and it was inside the node that holds the position that marks
2290         the end of the range to delete, don't remove any children of that node,
2291         because we don't know how many to remove.  For example, if the end is
2292         [a, 5] and the start was in some descendant of a and was removed, don't
2293         remove any of the children of a.  We will now refuse to remove some content
2294         incorrectly, but that's less dangerous than removing content incorrectly.
2295         Long term we need to update these positions as we remove content from the 
2296         document, but that seems like a more risky change.  Added a testcase.
2297         * editing/InsertListCommand.cpp:
2298         (WebCore::InsertListCommand::modifyRange): If the end of the selection to 
2299         modify is just after a table, and if the start of the selection is inside 
2300         that table, the last paragraph that we'll want modify is the last one inside 
2301         the table, not the paragraph that contains the table itself. Adjust 
2302         startOfLastParagraph here to avoid infinite recursion.
2303
2304 2007-08-24  Anders Carlsson  <andersca@apple.com>
2305
2306         Reviewed by Geoff.
2307
2308         <rdar://problem/5430165>
2309         REGRESSION: Dynamically loaded images fail to load
2310
2311         * html/HTMLImageLoader.cpp:
2312         (WebCore::HTMLImageLoader::HTMLImageLoader):
2313         Initialize the m_elementIsProtected member.
2314
2315         (WebCore::HTMLImageLoader::~HTMLImageLoader):
2316         Assert that the element is not protected.
2317         
2318         (WebCore::HTMLImageLoader::setLoadingImage):
2319         If the image is not null, protect the element. Otherwise, unprotect it.
2320         
2321         (WebCore::HTMLImageLoader::dispatchLoadEvent):
2322         Unprotect the element here.
2323
2324         (WebCore::HTMLImageLoader::protectElement):
2325         (WebCore::HTMLImageLoader::unprotectElement):
2326         New methods which protect and unprotect the element.
2327         
2328         * html/HTMLImageLoader.h:
2329
2330 2007-08-24  Kevin McCullough  <kmccullough@apple.com>
2331
2332         - Updated ChangeLog
2333
2334 2007-08-24  Beth Dakin  <bdakin@apple.com>
2335
2336         Reviewed by Hyatt and Adele.
2337
2338         Fix for <rdar://problem/5417203> Google Gmail 1.0 widget - unread 
2339         count is missing
2340
2341         * rendering/FixedTableLayout.cpp:
2342         (WebCore::FixedTableLayout::calcWidthArray): Calc pref widths for 
2343         our cells, if needed.
2344
2345 2007-08-24  Kevin McCullough  <kmccullough@apple.com>
2346
2347         Reviewed by Darin.
2348
2349         <rdar://problem/5437038> 1 credential object leaked for each call to credentialWithUser:password:persistence
2350         - Use initWithUser instead of credentialWithUser because credentialWithUser leaks.
2351
2352         * platform/network/mac/AuthenticationMac.mm:
2353         (WebCore::mac):
2354         * platform/network/mac/ResourceHandleMac.mm:
2355         (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
2356         (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]):
2357
2358 2007-08-24  Jon Honeycutt  <jhoneycutt@apple.com>
2359
2360         Reviewed by Darin.
2361
2362         <rdar://problem/5433236> Print preview of empty txt file crashes Safari
2363         Fix: Adjust computePageRectsForFrame to always return at least one 
2364         page rect, even if document height is zero.
2365
2366         * WebCore.vcproj/WebCore.vcproj:
2367         * bridge/win/FrameWin.h: Added Vector& parameter to 
2368         computePagesRectsForFrame; changed its return type to void.
2369         * bridge/win/FrameWin.cpp:
2370         (WebCore::computePageRectsForFrame): Reordered the loop that inserts
2371         rects into the vector.
2372
2373 2007-08-24  Antti Koivisto  <antti@apple.com>
2374
2375         Reviewed by Oliver
2376
2377         Fix <rdar://problem/5393758>
2378         Crash in WebCore::FontData::platformInit
2379         
2380         Null check glyph page. 
2381         
2382         If font has somehow failed to initialize it is possible to have null glyph page. Based on
2383         crash dumps this seems to occasionally happen when running Mail under guard malloc. 
2384         
2385         No test case, I don't know how to get to this state.
2386
2387         * platform/FontData.cpp:
2388         (WebCore::FontData::FontData):
2389         * platform/mac/FontDataMac.mm:
2390         (WebCore::FontData::platformInit):
2391
2392 2007-08-24  George Wright  <george.wright@collabora.co.uk>
2393
2394         Reviewed by Oliver.
2395
2396         http://bugs.webkit.org/show_bug.cgi?id=15071
2397         [cairo] SVG skews are incorrect
2398
2399         Fix Cairo implementation of AffineTransform::shear so that shearing is
2400         done in the correct direction.
2401
2402         * platform/graphics/cairo/AffineTransformCairo.cpp:
2403         (WebCore::AffineTransform::shear):
2404
2405 2007-08-23  Anders Carlsson  <andersca@apple.com>
2406
2407         Reviewed by Steve.
2408
2409         If necessary, re-set the window proc after each call to NPP_SetWindow. This is to ensure that
2410         our window proc is always run even if a plug-in subclasses the window and replaces the window proc.
2411         
2412         Also, make sure that the default window proc is of type ASCII so we can eliminate the 
2413         * plugins/win/PluginViewWin.cpp:
2414         (WebCore::registerPluginView):
2415         (WebCore::PluginViewWndProc):
2416         (WebCore::PluginViewWin::setNPWindowRect):
2417         (WebCore::PluginViewWin::stop):
2418         (WebCore::PluginViewWin::determineQuirks):
2419         (WebCore::PluginViewWin::PluginViewWin):
2420         (WebCore::PluginViewWin::init):
2421         * plugins/win/PluginViewWin.h:
2422         (WebCore::):
2423         (WebCore::PluginViewWin::pluginWndProc):
2424
2425 2007-08-23  Justin Garcia  <justin.garcia@apple.com>
2426
2427         Reviewed by Adele.
2428
2429         <rdar://problem/5156801> REGRESSION: Crash at DeleteSelectionCommand::doApply() when deleting table content
2430
2431         * editing/DeleteSelectionCommand.cpp:
2432         (WebCore::DeleteSelectionCommand::handleGeneralDelete): Use a RefPtr
2433         for node.  If the node to be removed contains the selection, and if
2434         the next node to be removed (nextNode) is inside the deletion UI,
2435         removing node will remove nextNode from the document.  nextNode is
2436         a RefPtr, but node isn't and when nextNode falls out of scope the node
2437         that node points to will be destroyed and we'll end up using a stale pointer.
2438         Long term we should probably just disable the deletion UI before editing 
2439         operations because the undo of the removal of node in the situation 
2440         described above relies on the presence of the deletion UI, but it isn't 
2441         present because its added and removed in a non-undoable way.
2442
2443 2007-08-23  Mitz Pettel  <mitz@webkit.org>
2444
2445         Reviewed by Darin.
2446
2447         - fix http://bugs.webkit.org/show_bug.cgi?id=14899
2448           !d->m_view->needsLayout() in Frame::paint() (Causes assert)
2449
2450         WebKit copies the width and height attributes of an <embed> to its
2451         nearest <object> ancestor. This used to be done in updateWidget(), but
2452         that could lead to the document being dirty right after layout and
2453         before painting. The patch moves the copying of the attributes to when
2454         the <embed> is inserted into the document or its attributes change.
2455
2456         * html/HTMLEmbedElement.cpp:
2457         (WebCore::HTMLEmbedElement::insertedIntoDocument):
2458         (WebCore::HTMLEmbedElement::attributeChanged):
2459         * html/HTMLEmbedElement.h:
2460         * manual-tests/bugzilla-14899.html: Added.
2461         * rendering/RenderPartObject.cpp:
2462         (WebCore::RenderPartObject::updateWidget):
2463
2464 2007-08-22  Anders Carlsson  <andersca@apple.com>
2465
2466         Reviewed by Darin and Oliver.
2467
2468         <rdar://problem/5422410>
2469         http://bugs.webkit.org/show_bug.cgi?id=15019
2470         REGRESSION (r25124-r25140): New posts and hot topics won't show at mobile01.com
2471
2472         Remove the call to checkCallImplicitClose(). Calling it in loadPlugin is bad for two reasons:
2473         
2474         1. It could cause onload to be dispatched even when the page has subresources that are still
2475         loading, such as images.
2476         
2477         2. Now that loadPlugin is called during layout, it could cause onload to be dispatched during
2478         layout, which can execute javascript and do pretty much anything while the render tree is in an
2479         inconsistent state.
2480         
2481         * loader/FrameLoader.cpp:
2482         (WebCore::FrameLoader::loadPlugin):
2483
2484 2007-08-22  Anders Carlsson  <andersca@apple.com>
2485
2486         Reviewed by Adam.
2487
2488         <rdar://problem/5430584>
2489         http://bugs.webkit.org/show_bug.cgi?id=15053        
2490         WebKit does not check Windows Registry HKEY_CURRENT_USER for NPAPI plugin locations
2491         
2492         * plugins/win/PluginDatabaseWin.cpp:
2493         (WebCore::addPluginsFromRegistry):
2494         (WebCore::PluginDatabaseWin::getPluginsInPaths):
2495
2496 2007-08-22  Justin Garcia  <justin.garcia@apple.com>
2497
2498         Reviewed by Adam.
2499         
2500         <rdar://problem/5418891> CrashTracer: [USER] 1 crash in Mail at -[WebViewEditor webView:shouldInsertText:replacingDOMRange:givenAction:]
2501
2502         * editing/BreakBlockquoteCommand.cpp:
2503         (WebCore::BreakBlockquoteCommand::doApply): We're reusing the topBlockquote
2504         variable.  Null it out first.  If there is no new topBlockquote and we don't null
2505         it out first, we'll assume that there was a new one and crash.
2506
2507 2007-08-22  Kevin McCullough  <kmccullough@apple.com>
2508
2509         Reviewed by Adele.
2510
2511         - rdar:5423067 Reapplyingthe change but only when the text area is in focus.
2512
2513         * html/HTMLTextAreaElement.cpp:
2514         (WebCore::HTMLTextAreaElement::setValue):
2515
2516 2007-08-21  David Hyatt  <hyatt@apple.com>
2517
2518         Fix for <rdar://problem/5249757> Painting of JPGs in WebKit is too slow.
2519
2520         Use a new Leopard API for fast tiling of images.  We only use this API
2521         when the whole image is being tiled and when the current CGImageRef to tile
2522         has a size that matches the size of the whole image.
2523
2524         We can optimize border-image in the future by adding a cache of the 9
2525         sub-images.
2526
2527         Reviewed by darin
2528
2529         * platform/graphics/cg/ImageCG.cpp:
2530         (WebCore::Image::drawPattern):
2531
2532 2007-08-22  Kevin McCullough  <kmccullough@apple.com>
2533
2534         - Rolling back since I need to update some layouttests this change breaks.
2535
2536         * html/HTMLTextAreaElement.cpp:
2537         (WebCore::HTMLTextAreaElement::setValue):
2538
2539 2007-08-21  Kevin McCullough  <kmccullough@apple.com>
2540
2541         Reviewed by Geof, Adam, Hyatt, Maciej and Oliver.
2542
2543         - In order to match the behavior of the other major browsers, selection is moved to the end of the text value when a change occurs to the contents of a text area instead of remembering the location of the selection.
2544         - <rdar://problem/5423067> gmail is super annoying when trying to add a new name to the TO, CC or BCC fields
2545
2546         * html/HTMLTextAreaElement.cpp:
2547         (WebCore::HTMLTextAreaElement::setValue):
2548
2549 2007-08-21  Adam Roben  <aroben@apple.com>
2550
2551         Build fix for Mac
2552
2553         Keep FrameView::layoutIfNeededRecursive Windows- and Gtk-only for now
2554         (sadly). This will have to wait until we merge ScrollView and FrameView.
2555
2556         Reviewed by NOBODY.
2557
2558         * page/FrameView.cpp:
2559         * page/FrameView.h:
2560
2561 2007-08-21  Adam Roben  <aroben@apple.com>
2562
2563         Fix an ASSERT when using Find in Page
2564
2565         Reviewed by Darin.
2566
2567         No test possible.
2568
2569         * bridge/win/FrameWin.cpp:
2570         (WebCore::imageFromSelection): Make sure to update layout before
2571         painting so we don't hit an ASSERT in painting code (Frame::selectionImage
2572         in FrameMac.mm does this as well).
2573
2574 2007-08-21  Adam Roben  <aroben@apple.com>
2575
2576         Made FrameView::layoutIfNeededRecursive available to all platforms
2577
2578         Currently it's only used on Gtk+ and Windows.
2579
2580         Reviewed by Darin.
2581
2582         * page/FrameView.cpp: Removed #ifdef.
2583         * page/FrameView.h: Ditto.
2584
2585 2007-08-21  Adele Peterson  <adele@apple.com>
2586
2587         Build fix for release build.
2588
2589         * rendering/AutoTableLayout.cpp:
2590         (WebCore::AutoTableLayout::calcEffectiveWidth):
2591         (WebCore::AutoTableLayout::layout):
2592
2593 2007-08-21  Mitz Pettel  <mitz@webkit.org>
2594
2595         Reviewed by Darin.
2596
2597         - fix http://bugs.webkit.org/show_bug.cgi?id=15010
2598           <rdar://problem/5423956> REGRESSION (r25000-r25065): Table rendering broken by a recent nightly
2599
2600         Test: fast/table/max-width-integer-overflow.html
2601
2602         Avoid integer overflows when dealing with maximum widths by
2603         1) using floating point arithmetic when summing or multiplying column max widths
2604         2) capping max widths at INT_MAX / 2
2605
2606         * rendering/AutoTableLayout.cpp:
2607         (WebCore::AutoTableLayout::calcPrefWidths):
2608         (WebCore::AutoTableLayout::calcEffectiveWidth):
2609         (WebCore::AutoTableLayout::layout):
2610
2611 2007-08-20  John Sullivan  <sullivan@apple.com>
2612
2613         Reviewed by Adam Roben
2614
2615         WebCore part of fix for: 
2616         <rdar://problem/5417777> WebKit focus ring color no longer matches system focus rings
2617         
2618         Adele wrote the first version of this patch. No test cases added because I made sure the 
2619         layout tests are unaffected. Two additional bug fixes were made in passing, but neither 
2620         of them had any effect on any known real-world case, and both were too difficult to write 
2621         test cases for to be worthwhile.
2622
2623         * WebCore.exp:
2624         added symbols for these new functions so WebKit can call them
2625         
2626         * WebCore.xcodeproj/project.pbxproj:
2627         updated for new file
2628         
2629         * platform/graphics/mac/ColorMac.h: Added.
2630         New file to hold the increasing amount of Mac-specific color stuff.
2631         
2632         * platform/graphics/Color.h:
2633         removed #if PLATFORM(MAC) code, which is now in ColorMac.h
2634         
2635         * platform/graphics/mac/ColorMac.mm:
2636         (WebCore::makeRGBAFromNSColor):
2637         new static function to convert an NSColor object to an RGBA32 struct
2638         (WebCore::colorFromNSColor):
2639         new public function to convert an NSColor object to a WebCore-style Color object
2640         (WebCore::focusRingColor):
2641         Uses (cached) systemFocusRingColor instead of hardwired values, unless usesTestModeFocusRingColor is true,
2642         in which case it uses the old hardwired color
2643         (WebCore::usesTestModeFocusRingColor):
2644         returns value of global var
2645         (WebCore::setUsesTestModeFocusRingColor):
2646         sets value of global var
2647         (+[WebCoreControlTintObserver controlTintDidChange]):
2648         Uses [NSColor keyboardFocusIndicatorColor] to set systemFocusRingColor; don't compile if COLORMATCH_EVERYTHING
2649         is set since we don't know what it would take to satisfy this state.
2650
2651         * bindings/objc/DOMRGBColor.mm:
2652         now includes ColorMac.h to account for moved declarations
2653         * bridge/mac/WebCoreAXObject.mm:
2654         ditto
2655         
2656         * page/mac/FrameMac.mm:
2657         (WebCore::convertAttributesToUnderlines):
2658         now uses new colorFromNSColor. The old code was swapping G & B, but it didn't matter in practice because
2659         this function is only used to convert the color of an input manager's marked text underline, which is always black
2660         
2661         * page/mac/WebCoreFrameBridge.mm:
2662         (-[WebCoreFrameBridge setBaseBackgroundColor:]):
2663         now uses new colorFromNSColor. The old code was swapping G & B, but it didn't matter in practice because
2664         this function is only called with a grayscale color perhaps containing an alpha value
2665                 
2666         * rendering/RenderView.cpp:
2667         (WebCore::RenderView::paintBoxDecorations):
2668         just updated a comment
2669
2670 2007-08-20  Mitz Pettel  <mitz@webkit.org>
2671
2672         Reviewed by Dave Hyatt.
2673
2674         - fix http://bugs.webkit.org/show_bug.cgi?id=15023
2675           REGRESSION (r21113-r21143): JavaScript tooltip rendering bug
2676
2677         Test: fast/repaint/layer-visibility.html
2678
2679         * rendering/RenderLayer.cpp:
2680         (WebCore::RenderLayer::setHasVisibleContent): Cache the layer's
2681         rects when it changes to visible.
2682
2683 2007-08-20  Kevin Decker <kdecker@apple.com>
2684
2685         Reviewed by Anders.
2686
2687         Fixed: <rdar://problem/5325262> REGRESSION (Tiger-Leopard): PictureTalk plug-in doesn't work
2688
2689         The problem was that this particular plug-in handles "text/ptf", but WebCore wasn't giving the plug-in a chance to load
2690         any type with "text/"
2691
2692         * dom/DOMImplementation.cpp:
2693         (WebCore::DOMImplementation::createDocument): Allow plug-ins to once again use "text/" MIME types, but only if the MIME
2694         type is not "text/plain". Disallowing plug-ins to use text/plain prevents plug-ins from hijacking a fundamental type 
2695         that the browser is expected to handle, and also serves as an optimization to prevent loading the plug-in database in 
2696         the common case.
2697
2698 2007-08-20  Adam Roben  <aroben@apple.com>
2699
2700         Remove workarounds for <rdar://problem/5386894> now that it's been fixed
2701
2702         Reviewed by Darin.
2703
2704         Tests: fast/loader/local-svg-parsed-as-svg.svg
2705                fast/loader/local-xhtml-parsed-as-xhtml.xhtml
2706
2707         * platform/network/cf/ResourceResponseCFNet.cpp:
2708         (WebCore::ResourceResponse::doUpdateResourceResponse): Removed hackish
2709         workaround.
2710
2711 2007-08-20  Anders Carlsson  <andersca@apple.com>
2712
2713         Reviewed by Adam.
2714
2715         <rdar://problem/5412988>
2716         Crash when visiting http://www.rockonflash.com/blog/?p=58
2717         
2718         * plugins/win/PluginViewWin.cpp:
2719         (WebCore::PluginViewWin::updateWindow):
2720         Just return if the plugin view hasn't been inserted in the hierarchy yet.
2721
2722 2007-08-20  Holger Hans Peter Freyther  <zecke@selfish.org>
2723
2724         Reviewed by Zack.
2725
2726         Do not define svg as ImageMIMEType if we can use ksvg2.
2727
2728         * platform/MIMETypeRegistry.cpp:
2729         (WebCore::initialiseSupportedImageMIMETypes):
2730
2731 2007-08-19  Adam Roben  <aroben@apple.com>
2732
2733         Gtk+ build fix.
2734
2735         * platform/gdk/TemporaryLinkStubs.cpp: Removed const.
2736
2737 2007-08-19  Adam Roben  <aroben@apple.com>
2738
2739         Fix <rdar://5395835> REGRESSION (r24527): Context menu for edit fields is missing "Font & Writing Direction"
2740
2741         The problem was that ContextMenuItem::setSubMenu was just copying the
2742         HMENU from the ContextMenu passed in on Windows, but that HMENU was
2743         later getting destroyed when the ContextMenu went out of scope.
2744
2745         I added a new ContextMenu::releasePlatformDescription method that is
2746         used in setSubMenu instead. I think an ultimately better design would
2747         be for setSubMenu to take ownership of the ContextMenu that's passed in
2748         (as should insertItem and appendItem), but I decided to be conservative
2749         and just make the changes needed to fix the bug.
2750
2751         Reviewed by Darin.
2752
2753         No test possible.
2754
2755         * platform/ContextMenu.h: Added releasePlatformDescription.
2756         * platform/gdk/TemporaryLinkStubs.cpp: Added stub implementation.
2757         * platform/mac/ContextMenuMac.mm:
2758         (WebCore::ContextMenu::releasePlatformDescription): Implemented, though
2759         it's never called on this platform.
2760         * platform/qt/ContextMenuQt.cpp:
2761         (WebCore::ContextMenu::releasePlatformDescription): Ditto.
2762         * platform/win/ContextMenuItemWin.cpp:
2763         (WebCore::ContextMenuItem::setSubMenu): Call releasePlatformDescription
2764         since we need to take ownership of the HMENU.
2765         * platform/win/ContextMenuWin.cpp:
2766         (WebCore::ContextMenu::releasePlatformDescription): Implemented.
2767
2768 2007-08-18  Maciej Stachowiak  <mjs@apple.com>
2769
2770         Reviewed by Darin.
2771
2772         - fixed <rdar://problem/5198272> REGRESSION: PLT 1.5% slower due to r21367 (change to start frames with empty documents)
2773         
2774         There were three main cuases of extra time due to creating the initial empty document:
2775         
2776         1) Creating an extra WebHTMLView and swapping it for a new one for each frame created.
2777         2) Parsing the minimal markup for the initial document's contents.
2778         3) Clearing the Window object an extra time and dispatching the corresponding delegate method.
2779         
2780         The WebCore part of the fixes addresses 2 and 3.
2781         
2782         * loader/FrameLoader.cpp:
2783         (WebCore::FrameLoader::init): Don't parse "<html><body>" for the initial
2784         empty document; it turns out not to be needed.
2785         (WebCore::FrameLoader::dispatchWindowObjectAvailable): Don't 
2786         dispatch the delegate if we haven't created a ScriptInterpreter yet.
2787         * bindings/js/kjs_proxy.cpp:
2788         (WebCore::KJSProxy::initScriptIfNeeded): Dispatch the window object
2789         delegate when we first create the interpreter, since that is now done
2790         lazily.
2791         * loader/FrameLoader.h:
2792         (WebCore::FrameLoader::committingFirstRealLoad): Helper for WebKit
2793         to know when to reuse a WebHTMLView.
2794
2795 2007-08-19  Mitz Pettel  <mitz@webkit.org>
2796
2797         Reviewed by Adam Roben.
2798
2799         - fix http://bugs.webkit.org/show_bug.cgi?id=15008
2800           ASSERTION FAILED: !firstLineBox() == !lastLineBox() setting content on image
2801
2802         Test: fast/images/text-content-crash-2.html
2803
2804         * html/HTMLImageLoader.cpp:
2805         (WebCore::HTMLImageLoader::setImage): Added a check that the renderer is an
2806         image.
2807         (WebCore::HTMLImageLoader::updateFromElement): Ditto.
2808         (WebCore::HTMLImageLoader::notifyFinished): Ditto.
2809
2810 2007-08-17  Maciej Stachowiak  <mjs@apple.com>
2811
2812         Reviewed by Darin.
2813
2814         - WebCore part of fix to scrollbar suppression hack for Leopard
2815
2816         * loader/FrameLoader.cpp:
2817         (WebCore::FrameLoader::transitionToCommitted): Suppress scrollbars earlier, so it happens
2818         before any potential view swap.
2819
2820 2007-08-17  Antti Koivisto  <antti@apple.com>
2821
2822         Reviewed by Hyatt.
2823         
2824         Fix <rdar://problem/5403773>
2825         CrashTracer: [USER] 88 crashes in Safari at com.apple.WebCore: WebCore::RenderTableSection::paint + 846
2826
2827         * rendering/RenderBlock.cpp:
2828         (WebCore::RenderBlock::removePositionedObjects):
2829         
2830         Fix crash in http://www.infobae.com/interior/home.html
2831         Positioned objects removed from m_positionedObjects would in some cases not get added back to any 
2832         positioned objects list. Adding objects happens in block layout but since layout was not invalidated 
2833         correctly in removePositionedObjects() it would not get invoked. As a result some positioned objects 
2834         would stay in layout dirty state leading to crashes and other bad things.
2835         
2836         * rendering/RenderTableSection.cpp:
2837         (WebCore::RenderTableSection::paint):
2838         
2839         Add needLayout() guard to eliminate this class of crashes from release builds. 
2840         Assert commented out for now since one existing layout test can't handle it.
2841
2842 2007-08-17  Kevin Decker <kdecker@apple.com>
2843
2844         Code change by Darin, landed and reviewed by me.
2845
2846         Fixed: <rdar://problem/5252836> Adobe Help Viewer: Japanese characters in the Help Tree structure are shown as garbage
2847         Added fast/encoding/namespace-tolerance.html test.
2848
2849         * loader/TextResourceDecoder.cpp:
2850         (WebCore::TextResourceDecoder::checkForHeadCharset): Slightly loosen the charset decoder heuristic by tweaking it
2851         to ignore namespaces. This restores compatibility to documents which (1) use namespace prefixes on HTML elements
2852         (2) specify a non-latin charset and (3) contain non-latin characters.
2853         
2854         Added fast/encoding/namespace-tolerance.html test.
2855         
2856 2007-08-17  Anders Carlsson  <andersca@apple.com>
2857
2858         Reviewed by Dave Hyatt.
2859         
2860         <rdar://problem/5379040>
2861         REGRESSION (Tiger-Leopard): ADOBE: Safari calls NPP_SetWindow with bad values sometimes
2862
2863         Instantiate plug-ins during the first layout instead of doing so when creating the renderer.
2864         This ensures that the plug-in widget will have a correct initial size.
2865         
2866         * html/HTMLEmbedElement.cpp:
2867         (WebCore::HTMLEmbedElement::getInstance):
2868         Force a layout if the plug-in doesn't have an instance.
2869         
2870         (WebCore::HTMLEmbedElement::attach):
2871         Pass true to updateWidget, causing it to only create a widget if it won't be a plug-in.
2872         
2873         * html/HTMLIFrameElement.cpp:        
2874         (WebCore::HTMLIFrameElement::attach):
2875         Pass false to updateWidget, this will only create subframes anyway.
2876         
2877         * html/HTMLObjectElement.cpp:
2878         (WebCore::HTMLObjectElement::getInstance):
2879         Force a layout if the plug-in doesn't have an instance.
2880         
2881         (WebCore::HTMLObjectElement::attach):
2882         Pass true to updateWidget, causing it to only create a widget if it won't be a plug-in.
2883         
2884         * loader/FrameLoader.cpp:
2885         (WebCore::FrameLoader::loadPlugin):
2886         Get the size from the renderer and pass it to the client.
2887         
2888         * loader/FrameLoaderClient.h:
2889         * page/mac/WebCoreFrameBridge.h:
2890         * platform/graphics/svg/SVGImageEmptyClients.h:
2891         (WebCore::SVGEmptyFrameLoaderClient::createPlugin):
2892         Update declarations.
2893         
2894         * rendering/RenderPart.cpp:
2895         (WebCore::RenderPart::setWidget):
2896         No need to mark the renderer as dirty here.
2897         
2898         * rendering/RenderPartObject.h:
2899         * rendering/RenderPartObject.cpp:
2900         (WebCore::RenderPartObject::updateWidget):
2901         Add a parameter, onlyCreateNonPlugins. If this is true the widget 
2902         will only be created if it's not a plug-in.
2903         
2904         (WebCore::RenderPartObject::layout):
2905         Call updateWidget here if m_widget is 0, causing the plug-in to be instantiated.
2906         
2907 2007-08-17  Oliver Hunt  <oliver@apple.com>
2908
2909         Reviewed by Maciej.
2910
2911         http://bugs.webkit.org/show_bug.cgi?id=14189
2912         <rdar://problem/5319511> REPRODUCIBLE CRASH: Canvas createPattern(canvas, ...) crashes on Windows (14189)
2913
2914         Ensure that we actually retain the CG pattern correctly.
2915
2916         Credit to Henry Mason <hmason@mac.com> for finding the cause of this.
2917
2918         * html/CanvasPattern.cpp:
2919         (WebCore::CanvasPattern::~CanvasPattern):
2920         (WebCore::CanvasPattern::createPattern):
2921         * html/CanvasPattern.h:
2922         (WebCore::CanvasPattern::platformImage):
2923
2924 2007-08-16  Geoffrey Garen  <ggaren@apple.com>
2925
2926         Build fix. (Maybe?)
2927         
2928         * loader/Cache.cpp:
2929         (WebCore::Cache::pruneLiveResources):
2930         (WebCore::Cache::pruneDeadResources):
2931
2932 2007-08-16  Justin Garcia  <justin.garcia@apple.com>
2933
2934         Reviewed by Harrison.
2935
2936         <rdar://problem/5378473> 
2937         REGRESSION: Undoing a deletion that is part of an open typing command fails to reinsert the caret
2938         
2939         We recently made Undo of a series of deletes select all of the 
2940         characters that were deleted, not just the most recently deleted
2941         character.  But the code that did this set a new starting selection 
2942         after every delete, even those that were part of an open typing 
2943         command that started with character insertions or forward deletes, 
2944         operations that when undone, remove the starting selection being 
2945         set from the document.
2946         
2947         After this change we only set a new starting selection if the open typing
2948         command was opened by a backward delete. The new behavior matches TextEdit.  
2949         We don't do something similar or forward deletes because TextEdit opens 
2950         and closes a new typing command on forward delete (added a FIXME about this).
2951
2952         * editing/TypingCommand.cpp:
2953         (WebCore::TypingCommand::TypingCommand): Initialize 
2954         m_openedByBackwardDelete.
2955         (WebCore::TypingCommand::forwardDeleteKeyPressed): Added a FIXME about
2956         how in TextEdit, forward deletes open and close a new typing command.
2957         (WebCore::TypingCommand::doApply): Set m_openedByBackwardDelete
2958         appropriately.
2959         (WebCore::TypingCommand::deleteKeyPressed): Only set the starting
2960         selection if this delete is the first one in an open typing command
2961         or one in a series of deletes that opened the typing command.
2962         * editing/TypingCommand.h: Added m_openedByBackwardDelete.
2963
2964 2007-08-13  Geoffrey Garen  <ggaren@apple.com>
2965
2966         Reviewed by Dave Hyatt.
2967         
2968         Tweaked the cache eviction model to better balance between live and 
2969         dead resources.
2970         
2971         For the sake of avoiding evictions during the PLT, the old model 
2972         required the sum of dead and live resources to grow to twice the cache 
2973         capacity before evicting, and would then evict dead or live down to 0 
2974         if necessary. This was a too-high high water mark, which would nullify 
2975         much of the value of eviction, and a too-low low water mark, which 
2976         would nullify much of the value of the LRU-SP strategy.
2977         
2978         This patch changes the model in 3 ways.
2979         
2980         1. The new model for dead resources is a flexible window with a fixed 
2981         minimum and maximum. The dead resource window is big when live resource 
2982         pressure is small, and vice versa. This has the immediate advantage of
2983         cutting the high water mark by up to 50%. It also enables the following
2984         tunable optimizations in future patches:
2985             a. A dead resource limit of 0 for clients who want that. (Just set
2986             the fixed maximum to 0.)
2987             b. A much higher low water mark. (Just set the fixed minimum to, 
2988             say, 25% of the cache's capacity.)
2989             c. A much lower high water mark for users who browse simple pages
2990             in one tab. (Just set the fixed maximum to, say, 50% of the cache's
2991             capacity.)
2992         
2993         I plan to make the changes that actually take advantage of these 
2994         tunable optimizations in another check-in.
2995
2996         The new model won't hurt the PLT because it will notice the PLT's low
2997         live resource size, and up the dead resource capacity in response. For
2998         the same reason, the new model should establish a good balance in 
2999         real-world use.
3000         
3001         2. Live resource eviction is now based on size(), not encodedSize().
3002         So, a page with lots of large, encoded images will start evicting 
3003         resources, if necessary, even before all the images paint. This allows 
3004         you to more accurately stipulate an exact high water mark.
3005         
3006         3. When pruning, prune to a small percentage below capacity, to avoid
3007         just having to prune again immediately.
3008
3009         Layout tests pass. PLT shows no regression.
3010
3011         * history/PageCache.cpp:
3012         (WebCore::PageCache::releaseAutoreleasedPagesNow): Updated for rename.
3013
3014         * loader/Cache.cpp: Implemented the algorithm explained above.
3015         * loader/Cache.h: Removed explicit tracking of decoded data size, since
3016         it was unused.
3017
3018         * loader/CachedResource.cpp: ditto on tracking of decoded data size
3019
3020 2007-08-16  Darin Adler  <darin@apple.com>
3021
3022         Reviewed by Tim Hatcher.
3023
3024         - fix <rdar://problem/5415029> In Mail, a crash occurs at WebCore::Node::isDescendantOf()
3025           when attempting to delete a selection in a table
3026
3027         The bug was caused by createMarkup trying to operate on a range that
3028         has an endpoint in the delete button DOM, because it removes that DOM
3029         during its operation! Still working on a regression test -- it's hard
3030         to make the kind of bad selection that's needed with the DOM, so I might
3031         have to use the eventSender.
3032
3033         * editing/DeleteButtonController.h: Made some of the identifiers private.
3034         We can make them public if we need to use them. Added a getter function
3035         for the container element so we can figure out if a given node is inside
3036         the DOM added for the delete button.
3037
3038         * editing/markup.cpp:
3039         (WebCore::moveEndpointsBeforeNode): Added. General purpose helper function
3040         that moves endpoints of a range to before a given node -- we do this before
3041         removing the delete button, so the endpoint is where the delete button was,
3042         rather than having an endpoint that's not in the document.
3043         (WebCore::createMarkup): Always return empty string, not null string.
3044         Get the document by calling ownerDocument on the range rather than getting
3045         the document of the commonAncestorContainer. That's because we need to
3046         get at the delete button before calling commonAncestorContainer. Call
3047         moveEndpointsBeforeNode to move the range endpoints out of the delete
3048         button interface before calling disable() which will remove it from the
3049         DOM if it's in there. Added an early return for the case where commonAncestor
3050         is non-0. If this happens, we would crash later because pastEndNode would
3051         not be in the tree. This change alone would prevent the crash, but we'd get
3052         bad markup, so we need the moveEndpointsBeforeNode fix. Added null checks
3053         for the frame to the range version as in the single-node version so this
3054         won't crash immediately on documents that are not in a frame. For the
3055         single-node version, added a check if a ndoe of 0 and a node inside the
3056         delete button user interface, and return the empty string for those cases.
3057
3058 2007-08-16  Justin Garcia  <justin.garcia@apple.com>
3059
3060         Reviewed by Maciej.
3061         
3062         <rdar://problem/5378847> After creating and removing a ToDo, the caret disappears as soon as I start to type
3063         
3064         * editing/InsertTextCommand.cpp:
3065         (WebCore::InsertTextCommand::input): A whitespace text node inserted by Mail
3066         when a ToDo is removed is completely removed by deleteInsignificantWhitespace,
3067         and since it contains the text insertion position, insertion fails.
3068         Save the position before the node where text insertion will occur,
3069         and if that node is removed, use the saved position for insertion.
3070
3071 2007-08-16  Darin Adler  <darin@apple.com>
3072
3073         Reviewed by Adele.
3074
3075         - fix <rdar://problem/5413488> REGRESSION: every DOM element is about 40
3076           bytes bigger because it has a Timer
3077
3078         Moved the timer to the document from the element.
3079
3080         * dom/Document.h: Made frame() inline. Added updateFocusApperanceSoon(),
3081         cancelFocusAppearanceUpdate(), m_updateFocusAppearanceTimer,
3082         clearXMLVersion(), and updateFocusAppearanceTimerFired(). Also made
3083         everything that was previously protected be private instead.
3084         * dom/Document.cpp:
3085         (WebCore::Document::Document): Initialize m_updateFocusAppearanceTimer.
3086         (WebCore::Document::updateFocusAppearanceSoon): Added. Starts timer.
3087         (WebCore::Document::cancelFocusAppearanceUpdate): Added. Stops timer.
3088         (WebCore::Document::updateFocusAppearanceTimerFired): Added. If the
3089         focused node is a focusable element, then calls
3090         updateFocusAppearance(false) on it.
3091
3092         * dom/Element.h: Removed default value of the boolean parameter to
3093         updateFocusAppareance. Removed needsFocusAppearanceUpdate(),
3094         setNeedsFocusAppearanceUpdate(), updateFocusAppearanceTimerFired(),
3095         stopUpdateFocusAppearanceTimer(), m_updateFocusAppearanceTimer, and
3096         m_needsFocusAppearanceUpdate. Added
3097         updateFocusAppearanceSoonAfterAttach() and cancelFocusAppearanceUpdate().
3098         * dom/Element.cpp:
3099         (WebCore::ElementRareData::ElementRareData): Added initializer for
3100         m_needsFocusAppearanceUpdateSoonAfterAttach.
3101         (WebCore::Element::Element): Removed initializers for
3102         m_updateFocusAppearanceTimer and m_needsFocusAppearanceUpdate.
3103         (WebCore::Element::attach): Updated code that starts the focus
3104         appearance timer to instead call updateFocusAppearanceSoon() on the
3105         document.
3106         (WebCore::Element::detach): Replaced call to
3107         stopUpdateFocusAppearanceTimer with call to cancelFocusAppearanceUpdate.
3108         (WebCore::Element::focus): Added check for node that's already focused,
3109         to match the logic that's in the derived classes. This makes it safe for
3110         us to remove the override in the derived classes. Also replaced the code
3111         that called setNeedsFocusAppearanceUpdate(true) with code to set the
3112         rare data flag m_needsFocusAppearanceUpdateSoonAfterAttach and added a
3113         call to cancelFocusAppearanceUpdate() in the case where there's no focus
3114         appearance update.
3115         (WebCore::Element::blur): Replaced call to
3116         stopUpdateFocusAppearanceTimer with call to cancelFocusAppearanceUpdate.
3117         (WebCore::Element::cancelFocusAppearanceUpdate): Added. Sets
3118         m_needsFocusAppearanceUpdateSoonAfterAttach to false, and then calls
3119         cancelFocusAppearanceUpdate() on the document, but only if the element
3120         is the focused node of the document.
3121
3122         * html/HTMLDocument.cpp:
3123         (WebCore::HTMLDocument::HTMLDocument): Replaced code that sets
3124         m_xmlVersion directly with a call to a new inline clearXMLVersion()
3125         function.
3126         (WebCore::HTMLDocument::setCookie): Replaced use of m_policyBaseURL with
3127         policyBaseURL().
3128         (WebCore::HTMLDocument::createTokenizer): Replaced uses of m_frame with
3129         frame().
3130         (WebCore::HTMLDocument::determineParseMode): Replaced code that sets
3131         pMode and hMode directly with calls to setParseMode and setHTMLMode.
3132         Replaced use of m_styleSelector with styleSelector().
3133
3134         * html/HTMLInputElement.h: Removed now-unneed override of focus().
3135         Removed default value of the boolean parameter to updateFocusAppareance.
3136         * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::updateFocusAppearance):
3137         Pass the restorePreviousSelection boolean through -- while it's ignored,
3138         it no longer has a default value.
3139
3140         * html/HTMLTextAreaElement.h: Removed now-unneed override of focus().
3141         Removed default value of the boolean parameter to updateFocusAppareance.
3142         * html/HTMLTextAreaElement.cpp: Ditto.
3143
3144         * WebCore.exp: Removed the Document::frame() symbol, since it's now inline.
3145
3146 2007-08-15  Antti Koivisto  <antti@apple.com>
3147
3148         Reviewed by Maciej.
3149         
3150         Fix <rdar://problem/5388936>
3151         Crash while setting display:none for a table cell with selection
3152         
3153         Super class destroy() could (through some selection code in removeChild()) trigger section recalc 
3154         in middle of RenderTableCell::destroy(), cleaning section dirty bit. This would later crash in 
3155         layout since cell grid would still have refence to the dead cell.
3156         
3157         Ensure table sections are dirty when leaving destroy method.
3158         
3159         I can't figure out tests for row and section changes but they look like
3160         they could crash in similar way as cell.
3161
3162         * rendering/RenderTableCell.cpp:
3163         (WebCore::RenderTableCell::destroy):
3164         * rendering/RenderTableRow.cpp:
3165         (WebCore::RenderTableRow::destroy):
3166         * rendering/RenderTableSection.cpp:
3167         (WebCore::RenderTableSection::destroy):
3168
3169 2007-08-15  Maciej Stachowiak  <mjs@apple.com>
3170
3171         Reviewed by Geoff.
3172
3173         <rdar://problem/5389696> leak of 32-byte NSData object (and more?) in WebIconDatabase code path with each refresh of http://www.apple.com
3174         
3175         * platform/graphics/BitmapImage.h: Use RetainPtr for m_nsImage and m_tiffRep
3176         * platform/graphics/mac/ImageMac.mm:
3177         (WebCore::BitmapImage::initPlatformData): No need to do anything now
3178         (WebCore::BitmapImage::invalidatePlatformData): Simplify
3179         (WebCore::BitmapImage::getTIFFRepresentation): Use RetainPtr to avoid leaks
3180         (WebCore::BitmapImage::getNSImage): Use RetainPtr to avoid leaks
3181
3182 2007-08-15  Darin Adler  <darin@apple.com>
3183
3184         Reviewed by Anders.
3185
3186         - fix <rdar://problem/5094895> REGRESSION (r19094): JavaScript timers don't
3187           work inside showModalDialog; caret also doesn't blink
3188
3189         * platform/Timer.h: Added fireTimersInNestedEventLoop.
3190         * platform/Timer.cpp:
3191         (WebCore::TimerBase::fireTimers): Added code to exit if the timersReadyToFire
3192         is cleared. This indicates that someone fired the timers in the nested event
3193         loop, so we should not fire any more timers ourselves.
3194         (WebCore::TimerBase::fireTimersInNestedEventLoop): Added. Sets timersReadyToFire
3195         to 0 so we won't return early and do nothing if the shared timer first. Then
3196         calls updateSharedTimer() so the shared timer will get scheduled as needed based
3197         on any pending timers.
3198
3199         * page/Chrome.cpp: (WebCore::Chrome::runModal): Call
3200         fireTimersInNestedEventLoop before calling runModal on the client.
3201
3202         * manual-tests/modal-dialog.html: Added a test that uses a timeout.
3203         * manual-tests/show-modal-dialog-test.html: Fixed a typo.
3204
3205 2007-08-15  Justin Garcia  <justin.garcia@apple.com>
3206
3207         Reviewed by Darin.
3208         
3209         http://bugs.webkit.org/show_bug.cgi?id=14971
3210         REGRESSION: cannot select reporter's e-mail in bugzilla
3211
3212         * page/EventHandler.cpp:
3213         (WebCore::EventHandler::canMouseDragExtendSelect): Allow drag-selecting inside
3214         a -webkit-user-select:ignore region.
3215
3216 2007-08-15  Beth Dakin  <bdakin@apple.com>
3217
3218         Reviewed by Hyatt.
3219
3220         Rolling back in. I made a silly mistake in XMLTokenizer that caused 
3221         this patch to crash SVG tests. It's fixed now!
3222
3223         Refactor of change for <rdar://problem/5404899> REGRESSION: Mail 
3224         crash in WebCore::FontFallbackList::fontDataAt() after dragging 
3225         image into text multiple times
3226
3227         The original fix that I made last night prevents the pending style 
3228         sheet count from being incremented until the element is in the 
3229         document. This fix prevents the style sheet from loading at all 
3230         until it is in the document.
3231
3232         Here is the fix.
3233         * dom/StyleElement.cpp:
3234         (WebCore::StyleElement::insertedIntoDocument): Call process.
3235         (WebCore::StyleElement::removedFromDocument): This can be reverted 
3236         to its original state before my patch last night.
3237         (WebCore::StyleElement::process): childrenChanged is now called 
3238         process. Return early if your not in the document.
3239         (WebCore::StyleElement::createSheet): Revert change from last 
3240         night. The inDocument check is now in caller childrenChanged.
3241         * dom/StyleElement.h: insertedIntoDocument() must now accept an 
3242         element in addition to a document.
3243
3244         This is an optimization to prevent calling updateStyleSelector() 
3245         too frequently.
3246         * dom/XMLTokenizer.cpp:
3247         (WebCore::XMLTokenizer::startElementNs):
3248         * html/HTMLStyleElement.cpp:
3249         (WebCore::HTMLStyleElement::HTMLStyleElement):
3250         (WebCore::HTMLStyleElement::finishedParsing):
3251         (WebCore::HTMLStyleElement::insertedIntoDocument):
3252         (WebCore::HTMLStyleElement::childrenChanged):
3253         (WebCore::HTMLStyleElement::sheetLoaded):
3254         * html/HTMLStyleElement.h:
3255         * ksvg2/svg/SVGStyleElement.cpp:
3256         (WebCore::SVGStyleElement::SVGStyleElement):
3257         (WebCore::SVGStyleElement::finishedParsing):
3258         (WebCore::SVGStyleElement::insertedIntoDocument):
3259         (WebCore::SVGStyleElement::childrenChanged):
3260         (WebCore::SVGStyleElement::sheetLoaded):
3261         * ksvg2/svg/SVGStyleElement.h:
3262         (WebCore::SVGStyleElement::setCreatedByParser):
3263
3264         This is a name change. Document::stylesheetLoaded() 
3265         is now Document::removePendingSheet()
3266         * dom/Document.cpp:
3267         (WebCore::Document::removePendingSheet):
3268         * dom/Document.h:
3269         * dom/ProcessingInstruction.cpp:
3270         (WebCore::ProcessingInstruction::sheetLoaded):
3271         * html/HTMLLinkElement.cpp:
3272         (WebCore::HTMLLinkElement::~HTMLLinkElement):
3273         (WebCore::HTMLLinkElement::setDisabledState):
3274         (WebCore::HTMLLinkElement::process):
3275         (WebCore::HTMLLinkElement::sheetLoaded):
3276         * page/Frame.cpp:
3277         (WebCore::UserStyleSheetLoader::~UserStyleSheetLoader):
3278         (WebCore::UserStyleSheetLoader::setCSSStyleSheet):
3279
3280         This is another name change. closeRenderer() is now 
3281         finishedParsing()
3282         * dom/Node.h:
3283         (WebCore::Node::finishedParsing):
3284         * dom/XMLTokenizer.cpp:
3285         (WebCore::XMLTokenizer::endElementNs):
3286         (WebCore::):
3287         * html/HTMLAppletElement.cpp:
3288         (WebCore::HTMLAppletElement::finishedParsing):
3289         * html/HTMLAppletElement.h:
3290         * html/HTMLGenericFormElement.cpp:
3291         (WebCore::HTMLFormControlElementWithState::finishedParsing):
3292         * html/HTMLGenericFormElement.h:
3293         * html/HTMLObjectElement.cpp:
3294         (WebCore::HTMLObjectElement::finishedParsing):
3295         * html/HTMLObjectElement.h:
3296         * html/HTMLParser.cpp:
3297         (WebCore::HTMLParser::insertNode):
3298         (WebCore::HTMLParser::popOneBlockCommon):
3299         * html/HTMLScriptElement.cpp:
3300         (WebCore::HTMLScriptElement::finishedParsing):
3301         * html/HTMLScriptElement.h:
3302         (WebCore::HTMLStyleElement::setCreatedByParser):
3303         * ksvg2/svg/SVGAnimationElement.cpp:
3304         (WebCore::SVGAnimationElement::finishedParsing):
3305         * ksvg2/svg/SVGAnimationElement.h:
3306         * ksvg2/svg/SVGElement.cpp:
3307         (WebCore::SVGElement::finishedParsing):
3308         * ksvg2/svg/SVGElement.h:
3309
3310 2007-08-15  David Harrison  <harrison@apple.com>
3311
3312         Reviewed by Antti Koivisto.
3313
3314         <rdar://problem/5411803> Bumpercar crashes when loading a partial URL (FrameLoader::receivedMainResourceError())
3315
3316         * loader/MainResourceLoader.cpp:
3317         (WebCore::MainResourceLoader::receivedError):
3318         Nil check for the FrameLoader.
3319
3320 2007-08-14  Steve Falkenburg  <sfalken@apple.com>
3321
3322         <rdar://problem/5411482> Windows user agent language always returns "en"
3323         
3324         Implement defaultLanguage().
3325
3326         Reviewed by Oliver.
3327
3328         * WebCore.vcproj/WebCore.vcproj: Added Language.cpp.
3329         * platform/win/Language.cpp: Added.
3330         (WebCore::localeInfo): Added.
3331         (WebCore::defaultLanguage): Added.
3332         * platform/win/TemporaryLinkStubs.cpp: Remove defaultLanguage stub.
3333
3334 2007-08-14  Sam Weinig  <sam@webkit.org>
3335
3336         Reviewed by Geoff and Oliver.
3337
3338         Fix for <rdar://problem/5267870>
3339         Mangleme: Reproducible assertion failure in -[WebCoreFrameBridge installInFrame:]
3340
3341         - Change embed/plugin code path to detach the frame on willRemove instead of detach.
3342           This matches what frame and iframe do.
3343
3344         Test: http/tests/misc/embedCrasher.html
3345
3346         * html/HTMLPlugInElement.cpp:
3347         (WebCore::HTMLPlugInElement::willRemove):
3348         * html/HTMLPlugInElement.h:
3349
3350 2007-08-14  Adele Peterson  <adele@apple.com>
3351
3352         Reviewed by Maciej.
3353
3354         Fix for <rdar://problem/5370059> REGRESSION: Cannot type into edit fields on a form (sccsheriff.org)
3355
3356         This change makes -webkit-user-select an inherited css property.  For "user-select: none" we were already 
3357         acting like it was an inheritable property, where we let user-select:text on the children override its parent's user-select:none.
3358         By making user-select really inherited (instead of inherited for some values), we eliminate the need for crawling up the tree to see 
3359         if an ancestor has user-select ignore set.
3360
3361         * page/EventHandler.cpp: (WebCore::EventHandler::canMouseDownStartSelect):
3362           Now that user-select is inherited, you don't need to walk up the render tree looking for ancestors with user-select:ignore set.
3363
3364         * css/CSSStyleSelector.cpp: Eliminate SELECT_AUTO.
3365         (WebCore::CSSStyleSelector::adjustRenderStyle):
3366         (WebCore::CSSStyleSelector::applyProperty):
3367         * css/CSSComputedStyleDeclaration.cpp: (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
3368
3369         * rendering/RenderStyle.h:
3370         (WebCore::): Eliminate SELECT_AUTO.  Make userSelect inherited.
3371         (WebCore::RenderStyle::userSelect):
3372         (WebCore::RenderStyle::setUserSelect):
3373         (WebCore::RenderStyle::initialUserSelect):
3374         * rendering/RenderStyle.cpp:
3375         (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
3376         (WebCore::StyleRareNonInheritedData::operator==):
3377         (WebCore::StyleRareInheritedData::StyleRareInheritedData):
3378         (WebCore::StyleRareInheritedData::operator==):
3379         (WebCore::RenderStyle::diff):
3380
3381 2007-08-15  Peter Kasting  <zerodpx@gmail.org>
3382
3383         Reviewed by Darin.
3384         
3385         http://bugs.webkit.org/show_bug.cgi?id=14967 part 1 - Eliminate most implicit
3386         conversions of wtf::Vector<T> to T* by explicitly calling .data()
3387
3388         * html/HTMLSelectElement.cpp:
3389         (WebCore::HTMLSelectElement::saveState):
3390         * platform/KURL.cpp:
3391         (WebCore::KURL::KURL):
3392         (WebCore::KURL::init):
3393         (WebCore::KURL::decode_string):
3394         (WebCore::KURL::parse):
3395         (WebCore::KURL::encode_string):
3396         * platform/cf/KURLCFNet.cpp:
3397         (WebCore::KURL::KURL):
3398         * platform/mac/KURLMac.mm:
3399         (WebCore::KURL::KURL):
3400         * rendering/RenderFrameSet.cpp:
3401         (WebCore::RenderFrameSet::layOutAxis):
3402
3403 2007-08-14  Ricci Adams  <iccir@apple.com>
3404
3405         Reviewed by Darin, Hyatt.
3406
3407         - fix <rdar://problem/5407795> -apple-line-clamp should never display less than one line
3408
3409         * rendering/RenderFlexibleBox.cpp:(WebCore::RenderFlexibleBox::layoutVerticalBox): Use
3410         max to make sure it never computes a minimum of less than one line.
3411
3412 2007-08-14  Brady Eidson  <beidson@apple.com>
3413
3414         Reviewed by Darin, John, Maciej, Oliver, and Tim
3415
3416         <rdar://problem/5394708> - Crash on launch with corrupt icon database
3417
3418         The main part of the fix is to not disable SQLite's default level of protection - to leave the sync options at their normal,
3419         mostly safe levels.  
3420
3421         But in case lightning strikes at the exact right moment and someone ends up with a corrupt database, add some support code to
3422         detect that condition and recover from it.  
3423
3424         This is mainly accomplished by exposing the "PRAGMA integrity_check;" facilities of sqlite through IconDatabase SPI as well as
3425         running that integrity check if a journal file is detected at launch (a strong indication that the last quit was not clean).
3426         There's also a method exposed to allow clients to tell the icon database "I suspect something bad happened, please check integrity"
3427
3428         * loader/icon/IconDatabase.cpp:
3429         (WebCore::IconDatabase::checkIntegrityBeforeOpening): Allow clients to suggest an integrity check
3430         (WebCore::IconDatabase::open): Add a check to see if the journal file for the database exists.  If it does, run the integrity
3431           check.  Also run the check if a client has suggested it to be necessary.
3432           If the integrity-check fails, we sadly have to destroy the database and recreate from scratch.
3433           Also - quite importantly - do not adjust the default sync preferences for the SQLDatabase.  They were an optimization that 
3434           might have been valid at one time but no longer affects any benchmarks we care about.
3435         (WebCore::IconDatabase::checkIntegrity): Perform the SQLite integrity_check pragma
3436         * loader/icon/IconDatabase.h:
3437
3438         * loader/icon/IconDatabaseNone.cpp:
3439         (WebCore::IconDatabase::checkIntegrity): Keep IconDatabaseNone users building
3440         (WebCore::IconDatabase::checkIntegrityBeforeOpening): Ditto
3441
3442         * loader/icon/SQLDatabase.cpp:
3443         (WebCore::SQLDatabase::open): Make a copy of the path string so we don't accidentally mutate anyone else's string on ::close()
3444
3445         * platform/FileSystem.h: Added. Begin a long-needed platform file system abstraction
3446         * platform/mac/FileSystemMac.mm: Added.
3447         (WebCore::fileExists): Check if a file exists
3448         (WebCore::deleteFile): Delete a file
3449
3450         * platform/gdk/TemporaryLinkStubs.cpp:
3451         (WebCore::fileExists):
3452         (WebCore::deleteFile):
3453         * platform/qt/TemporaryLinkStubs.cpp:
3454         (WebCore::fileExists):
3455         (WebCore::deleteFile):
3456         * platform/win/TemporaryLinkStubs.cpp:
3457         (WebCore::fileExists):
3458         (WebCore::deleteFile):
3459
3460         * WebCore.exp:
3461         * WebCore.xcodeproj/project.pbxproj:
3462
3463 2007-08-14  Jon Honeycutt  <jhoneycutt@apple.com>
3464
3465         Reviewed by Steve.
3466
3467         Build fix for Windows.
3468
3469         * html/HTMLFormElement.cpp:
3470
3471 2007-08-14  George Staikos  <staikos@kde.org>
3472
3473         Only connect the menu signal once.
3474
3475         * platform/qt/ContextMenuQt.cpp:
3476         (WebCore::ContextMenu::ContextMenu):
3477         (WebCore::ContextMenu::insertItem):
3478
3479 2007-08-14  Justin Garcia  <justin.garcia@apple.com>