2006-02-09  Tim Omernick  <timo@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/4198378> Crash on a CFRelease when visiting http://www.akella.com/

        * Plugins/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
	The true source of this crash is that the URL string is sometimes not NULL-terminated, which is the
	Real Player plugin's fault.  That has been filed as 4439591.
	However, we can be more bulletproof here by switching the URL string encoding from Windows Latin 1
	to ISO Latin 1, so that any NULL-terminated string can be represented.  (As Darin and I found out
	last night, Windows Latin 1 has "holes" in certain character ranges and	thus cannot encode arbitrary
	C strings).

2006-02-09  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Anders. 
        
        - Moved all the default delegate classes to their own directory.

        * DefaultDelegates: Added.
        * DefaultDelegates/WebDefaultContextMenuDelegate.h: Added.
        * DefaultDelegates/WebDefaultContextMenuDelegate.m: Added.
        * DefaultDelegates/WebDefaultEditingDelegate.h: Added.
        * DefaultDelegates/WebDefaultEditingDelegate.m: Added.
        * DefaultDelegates/WebDefaultFrameLoadDelegate.h: Added.
        * DefaultDelegates/WebDefaultFrameLoadDelegate.m: Added.
        * DefaultDelegates/WebDefaultPolicyDelegate.h: Added.
        * DefaultDelegates/WebDefaultPolicyDelegate.m: Added.
        * DefaultDelegates/WebDefaultResourceLoadDelegate.h: Added.
        * DefaultDelegates/WebDefaultResourceLoadDelegate.m: Added.
        * DefaultDelegates/WebDefaultScriptDebugDelegate.h: Added.
        * DefaultDelegates/WebDefaultScriptDebugDelegate.m: Added.
        * DefaultDelegates/WebDefaultUIDelegate.h: Added.
        * DefaultDelegates/WebDefaultUIDelegate.m: Added.
        * WebKit.xcodeproj/project.pbxproj:
        * WebView/WebDefaultContextMenuDelegate.h: Removed.
        * WebView/WebDefaultContextMenuDelegate.m: Removed.
        * WebView/WebDefaultEditingDelegate.h: Removed.
        * WebView/WebDefaultEditingDelegate.m: Removed.
        * WebView/WebDefaultFrameLoadDelegate.h: Removed.
        * WebView/WebDefaultFrameLoadDelegate.m: Removed.
        * WebView/WebDefaultPolicyDelegate.h: Removed.
        * WebView/WebDefaultPolicyDelegate.m: Removed.
        * WebView/WebDefaultResourceLoadDelegate.h: Removed.
        * WebView/WebDefaultResourceLoadDelegate.m: Removed.
        * WebView/WebDefaultScriptDebugDelegate.h: Removed.
        * WebView/WebDefaultScriptDebugDelegate.m: Removed.
        * WebView/WebDefaultUIDelegate.h: Removed.
        * WebView/WebDefaultUIDelegate.m: Removed.

2006-02-08  Justin Garcia  <justin.garcia@apple.com>

        Original patch by Graham Dennis, reviewed by me:
        
        <http://bugs.webkit.org/show_bug.cgi?id=3982>
        webViewDidBeginEditing, webViewDidEndEditing notification methods not called on delegate
        
        Changes made by me, reviewed by thatcher:
        
        Made _setWindowHasFocus: and _setDisplaysWithFocusAttributes: into private SPI to allow
        for the testing of window.onFocus, window.onBlur, caret and focus halo painting, and 
        the focusing of content editable regions that happens as side effect of setting a selection,
        but only if the window has focus (7128).

        * WebCoreSupport/WebFrameBridge.m:
        (-[WebFrameBridge didBeginEditing]):
        (-[WebFrameBridge didEndEditing]):
        * WebView/WebHTMLView.m:
        (-[WebHTMLView updateFocusState]):
        (-[WebHTMLView _setWindowHasFocus:]):
        (-[WebHTMLView _setDisplaysWithFocusAttributes:]):
        * WebView/WebHTMLViewPrivate.h:

2006-02-08  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=3527
        Allow Safari to open postscript files in browser windows as well

        * WebView/WebPDFRepresentation.m:
        (+[WebPDFRepresentation postScriptMIMETypes]): Added.
        (+[WebPDFRepresentation supportedMIMETypes]): Include PostScript MIME types.
        (-[WebPDFRepresentation convertPostScriptDataSourceToPDF:]): Added.
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]):
        Handle PostScript conversion using new convertPostScriptDataSourceToPDF method.

2006-02-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Timothy.

        Convert JavaScript objects to appropriate AppleScript types, instead of only strings
        http://bugs.webkit.org/show_bug.cgi?id=7012

        Tests: fast/AppleScript/*

        * WebView/WebView.m:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]): Added.
        * WebView/WebViewPrivate.h:

2006-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed "remove frame, renderer and completed flag from ChildFrame, make Frame track these"
        http://bugs.webkit.org/show_bug.cgi?id=7125
        
        - fixed "onload event never called for iframe element with emtpy or about:blank src"
        http://bugs.webkit.org/show_bug.cgi?id=3609

        * WebCoreSupport/WebFrameBridge.h:
        * WebCoreSupport/WebFrameBridge.m:
        (-[WebFrameBridge initWithPage:webView:renderer:frameName:view:]): Pass along renderer.
        (-[WebFrameBridge createChildFrameNamed:withURL:referrer:renderPart:allowsScrolling:marginWidth:marginHeight:]): Pass along renderer.
        * WebCoreSupport/WebPageBridge.m:
        (-[WebPageBridge initWithMainFrameName:webView:frameView:]): Pass null for renderer.
        * WebView/WebView.m:
        * WebView/WebViewPrivate.h:

2006-02-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej Stachowiak.

        * WebView/WebPDFView.m:
        (-[WebPDFView menuForEvent:]):
        Removed use of WKExecutableLinkedInTigerOrEarlier() by modifying backward-compatibility
        hack involving PDF view context menus. Now we only bother to make sure that the PDFKit-
        supplied context menu items are present in Safari, for the benefit of the open source
        folks using tip of tree WebKit but older released Safari; it's possible that some other
        existing WebKit apps won't show all the PDF view context menu items.

2006-02-06  Maciej Stachowiak  <mjs@apple.com>

        Remove remaining .subproj references to fix release build.

        * WebKit.xcodeproj/project.pbxproj:

2006-02-06  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Hyatt.
        
        - renamed subproject directories to not end with .subproj

        * Carbon: renamed from Carbon.subproj
        * DOM: renamed from DOM.subproj
        * History: renamed from History.subproj
        * Misc: renamed from Misc.subproj
        * Panels: renamed from Panels.subproj
        * Plugins: renamed from Plugins.subproj
        * WebCoreSupport: renamed from WebCoreSupport.subproj
        * WebInspector: renamed from WebInspector.subproj
        * WebView: renamed from WebView.subproj
        
2006-02-06  Maciej Stachowiak  <mjs@apple.com>

        Ooops, I made a last-minute change to my last patch that broke the build - fixed.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _closeOldDataSources]):
        (-[WebFrame _detachFromParent]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _checkLoadCompleteForThisFrame]):
        (-[WebFrame _handledOnloadEvents]):
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _goToItem:withLoadType:]):
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]):
        (-[WebFrame _clientRedirectedTo:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        (-[WebFrame _clientRedirectCancelled:]):
        * WebView.subproj/WebFramePrivate.h:

2006-02-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - shuffle things around so that WebFrame no longer has a WebView backpointer, the backpointer is
        at the bridge level.
        http://bugs.webkit.org/show_bug.cgi?id=7093

        * WebCoreSupport.subproj/WebFrameBridge.h:
        * WebCoreSupport.subproj/WebFrameBridge.m:
        (-[WebFrameBridge initWithPage:webView:frameName:view:]):
        (-[WebFrameBridge page]):
        (-[WebFrameBridge mainFrame]):
        (-[WebFrameBridge webView]):
        (-[WebFrameBridge createWindowWithURL:frameName:]):
        (-[WebFrameBridge showWindow]):
        (-[WebFrameBridge areToolbarsVisible]):
        (-[WebFrameBridge setToolbarsVisible:]):
        (-[WebFrameBridge isStatusbarVisible]):
        (-[WebFrameBridge setStatusbarVisible:]):
        (-[WebFrameBridge setWindowFrame:]):
        (-[WebFrameBridge windowFrame]):
        (-[WebFrameBridge setWindowContentRect:]):
        (-[WebFrameBridge windowContentRect]):
        (-[WebFrameBridge setWindowIsResizable:]):
        (-[WebFrameBridge windowIsResizable]):
        (-[WebFrameBridge firstResponder]):
        (-[WebFrameBridge makeFirstResponder:]):
        (-[WebFrameBridge closeWindowSoon]):
        (-[WebFrameBridge runJavaScriptAlertPanelWithMessage:]):
        (-[WebFrameBridge runJavaScriptConfirmPanelWithMessage:]):
        (-[WebFrameBridge canRunBeforeUnloadConfirmPanel]):
        (-[WebFrameBridge runBeforeUnloadConfirmPanelWithMessage:]):
        (-[WebFrameBridge runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        (-[WebFrameBridge addMessageToConsole:]):
        (-[WebFrameBridge runOpenPanelForFileButtonWithResultListener:]):
        (-[WebFrameBridge setStatusText:]):
        (-[WebFrameBridge startLoadingResource:withURL:customHeaders:]):
        (-[WebFrameBridge startLoadingResource:withURL:customHeaders:postData:]):
        (-[WebFrameBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebFrameBridge focusWindow]):
        (-[WebFrameBridge createChildFrameNamed:withURL:referrer:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        (-[WebFrameBridge userAgentForURL:]):
        (-[WebFrameBridge _nextKeyViewOutsideWebFrameViewsWithValidityCheck:]):
        (-[WebFrameBridge previousKeyViewOutsideWebFrameViews]):
        (-[WebFrameBridge defersLoading]):
        (-[WebFrameBridge setDefersLoading:]):
        (-[WebFrameBridge viewForPluginWithURL:attributeNames:attributeValues:MIMEType:]):
        (-[WebFrameBridge _preferences]):
        (-[WebFrameBridge selectWordBeforeMenuEvent]):
        (-[WebFrameBridge historyLength]):
        (-[WebFrameBridge canGoBackOrForward:]):
        (-[WebFrameBridge goBackOrForward:]):
        (-[WebFrameBridge print]):
        (-[WebFrameBridge pollForAppletInView:]):
        (-[WebFrameBridge respondToChangedContents]):
        (-[WebFrameBridge respondToChangedSelection]):
        (-[WebFrameBridge undoManager]):
        (-[WebFrameBridge issueCutCommand]):
        (-[WebFrameBridge issueCopyCommand]):
        (-[WebFrameBridge issuePasteCommand]):
        (-[WebFrameBridge issuePasteAndMatchStyleCommand]):
        (-[WebFrameBridge canPaste]):
        (-[WebFrameBridge overrideMediaType]):
        (-[WebFrameBridge isEditable]):
        (-[WebFrameBridge shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[WebFrameBridge shouldBeginEditing:]):
        (-[WebFrameBridge shouldEndEditing:]):
        (-[WebFrameBridge windowObjectCleared]):
        (-[WebFrameBridge spellCheckerDocumentTag]):
        (-[WebFrameBridge isContinuousSpellCheckingEnabled]):
        (-[WebFrameBridge didFirstLayout]):
        (-[WebFrameBridge dashboardRegionsChanged:]):
        (-[WebFrameBridge createModalDialogWithURL:]):
        (-[WebFrameBridge canRunModal]):
        (-[WebFrameBridge runModal]):
        * WebCoreSupport.subproj/WebPageBridge.h:
        * WebCoreSupport.subproj/WebPageBridge.m:
        (-[WebPageBridge initWithMainFrameName:webView:frameView:]):
        (-[WebPageBridge webView]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _fileWrapperForURL:]):
        (-[WebDataSource _webView]):
        (-[WebDataSource _setLoading:]):
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        (-[WebDataSource _defersCallbacksChanged]):
        (-[WebDataSource _setWebFrame:]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _traverseNextFrameStayWithin::]):
        (-[WebFrame _detachFromParent]):
        (-[WebFrame _setDataSource:]):
        (-[WebFrame _loadDataSource:withLoadType:formState:]):
        (-[WebFrame _initWithWebFrameView:webView:bridge:]):
        (-[WebFrame dealloc]):
        (-[WebFrame finalize]):
        (-[WebFrame webView]):
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _webView]):
        (-[WebFrameView _goBack]):
        (-[WebFrameView _goForward]):
        * WebView.subproj/WebFrameViewInternal.h:
        * WebView.subproj/WebView.m:
        (-[WebView _createFrameNamed:inParent:allowsScrolling:]):
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2006-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Misc.subproj/WebCoreStatistics.h:
        * Misc.subproj/WebCoreStatistics.m:
        (+[WebCoreStatistics javaScriptRootObjectTypeCounts]):
        javaScriptRootObjecTypeCounts -> javaScriptRootObjectTypeCounts

2006-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - change JavaScript collector statistics calls to use HashCountedSet instead
        of CFSet; other misc cleanup
        http://bugs.webkit.org/show_bug.cgi?id=7072

        * Misc.subproj/WebCoreStatistics.h:
        * Misc.subproj/WebCoreStatistics.m:
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]): new
        (+[WebCoreStatistics javaScriptRootObjecTypeCounts]): new
        (+[WebCoreStatistics javaScriptRootObjectClasses]): deprecated
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]): deprecated
        (+[WebCoreStatistics javaScriptNoGCAllowedObjectsCount]): Just return 0. Deprecated.

2006-02-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - change spellchecker preflighting to happen via class methods instead of
        object methods.

        * WebView.subproj/WebView.m:
        (-[WebView setContinuousSpellCheckingEnabled:]):
        (+[WebView _preflightSpellCheckerNow:]):
        (+[WebView _preflightSpellChecker]):

2006-02-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Renamed configuration names to Debug, Release and Production.

        * WebKit.xcodeproj/project.pbxproj:

2006-02-02  David Hyatt  <hyatt@apple.com>

	Fix for bug 6957, rewrite image rendering in C++ and move it to
        WebCore.  Animation now stops lazily and just uses the CachedObject
        notification system to push updates so that rects no longer need to
        be cached (or sets of animating renderers in specific views).

        Reviewed by darin

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:element:URL:title:archive:types:]):
        (-[NSPasteboard _web_declareAndWriteDragImage:element:URL:title:archive:source:]):
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:element:rect:event:pasteboard:source:offset:]):
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData init]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (+[WebImageRendererFactory shouldUseThreadedDecoding]):
        (+[WebImageRendererFactory setShouldUseThreadedDecoding:]):
        (-[WebImageRendererFactory setPatternPhaseForContext:inUserSpace:]):
        (-[WebImageRendererFactory imageDataForName:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
        (-[NSArray elementAtPoint:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:types:]):
        (-[WebImageView elementAtPoint:]):
        (-[WebImageView mouseDragged:]):
        * WebView.subproj/WebView.m:
        (-[WebView _writeImageElement:withPasteboardTypes:toPasteboard:]):

2006-01-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        - fixed <rdar://problem/4267144> REGRESSION (10.4.2): Safari pages auto-scroll too easily 
        during drag over content [5853]
        
        There were two issues here:
        (1) dragging over a non-editable webview (such as a typical Safari page) should not have
        auto-scrolled at all; the fact that it did was an uninentional side effect of making
        auto-scroll work for editable webviews a la Blot.
        (2) the speed & hot area of the auto-scroll changed between 10.4.1 and 10.4.2.
        
        I have a fix for (1), which is the much more important issue. I'll modify the bugzilla bug
        to be about the remaining issue.

        * WebView.subproj/WebView.m:
        (-[WebView _autoscrollForDraggingInfo:timeDelta:]):
        do nothing if not editable
        (-[WebView _shouldAutoscrollForDraggingInfo:]):
        return NO if not editable

2006-01-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        Support for programmatic scrolling one line at a time for PDFs. (We already had support for
        programmatic scrolling one page at a time, and to top/end.)

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _fakeKeyEventWithFunctionKey:]):
        generalized comment
        (-[WebPDFView scrollLineDown:]):
        pass a faked arrow-down key event
        (-[WebPDFView scrollLineUp:]):
        pass a faked arrow-up key event

2006-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebFrameBridge.m:
        (-[WebFrameBridge createChildFrameNamed:withURL:referrer:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        Updated for name change.

2006-01-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Tim O.

        Add -Wno-deprecated-declarations to the compile flags for WebNetscapePluginPackage.m.
        <rdar://problem/4427068> LMGetCurApRefNum, CloseConnection and GetDiskFragment now deprecated.
        When we workaround these we can remove this compile flag.

        * WebKit.xcodeproj/project.pbxproj:

2006-01-30  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Remove the only use of -[NSFont glyphPacking]. This method was deprecated in Tiger
        and always returns NSNativeShortGlyphPacking.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:]):

2006-01-28  David Hyatt  <hyatt@apple.com>

        Clean up RenderImage, eliminating unneeded members and methods.
	
        Reviewed by darin

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer copyWithZone:]):
        (-[WebImageRenderer size]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):

2006-01-26  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

	<rdar://problem/4422365>

        * WebView.subproj/WebHTMLView.m:
        (-[NSArray addSuperviewObservers]):
        In addition to registering for frame/bounds change notifications, call -_frameOrBoundsChanged.
        It will check the current size/scroll against the previous layout's size/scroll.  We need to
        do this here to catch the case where the WebView is laid out at one size, removed from its
        window, resized, and inserted into another window.  Our frame/bounds changed notifications
        will not be sent in that situation, since we only watch for changes while in the view hierarchy.

	I have verified that this does not cause unnecessary layouts while running the PLT.

2006-01-25  Vicki Murley  <vicki@apple.com>

        Reviewed by Beth Dakin.

	- fix <rdar://problem/4351664> REGRESSION (420+): extra URL in b/f list - navigating back to 
	previous page fails at apple.com/retail/)
 
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]): grab the 
	redirect flag of the current load before calling _loadURL, which clears this flag, 
        (-[WebFrame _transitionToCommitted:]): remove misleading comment
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setURL:]): release resources in the page cache when setting
        the URL on a WebHistoryItem

2006-01-25  Timothy Hatcher  <timothy@apple.com>

        Move off of -[NSFont widthOfString:] since it is now deprecated.
        Use the NSStringDrawing -[NSString sizeWithAttributes:] API.

        * WebCoreSupport.subproj/WebFileButton.m:
        (-[WebFileChooserButton bestVisualFrameSizeForCharacterCount:]):

2006-01-23  Darin Adler  <darin@apple.com>

        - fixed some small localizable strings issues

        * WebInspector.subproj/WebInspector.m:
        (-[DOMNode _nodeTypeName]): Changed so we don't have two localizable strings that
        are both "Document". I'm not sure we want to localize the DOM inspector UI at all,
        but this fixes things for now.
        (-[DOMNode _displayName]): Ditto.

        * English.lproj/Localizable.strings: Updated.
        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2006-01-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher
        
        Turned on -O2 for B&I build.

        * WebKit.xcodeproj/project.pbxproj:

2006-01-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders Carlsson.
        
        Makes the Inspector's Style pane take !important into account
        when marking overloaded properties.

        * WebInspector.subproj/webInspector/inspector.js:

2006-01-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Anders Carlsson.

        Make sure shorthand properties get striked-out if
        all the properties they expand into are overloaded.

        * WebInspector.subproj/webInspector/inspector.js:

2006-01-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Adds computed style to the Web Inspector.
        Adds a "mapped style" link to the mapped attributes.

        * WebInspector.subproj/webInspector/inspector.css:
        * WebInspector.subproj/webInspector/inspector.html:
        * WebInspector.subproj/webInspector/inspector.js:

2006-01-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John, some parts by Darin.

        Removes the old WebDebugDOMNode code, superseded by the ObjC DOM and the Web Inspector.
        Since Safari 2.0 still relies on these classes for the Debug menu's "Show DOM Tree", we remove
        that menu item to prevent a crash.

        * WebKit.exp: adds WebInspector, removes WebDebugDOMNode
        * WebKit.xcodeproj/project.pbxproj: added the REMOVE_SAFARI_DOM_TREE_DEBUG_ITEM define so the new WebView code doesn't build in the Default config
        * WebView.subproj/WebDebugDOMNode.h: Removed.
        * WebView.subproj/WebDebugDOMNode.m: Removed.
        * WebView.subproj/WebView.m:
        (+[WebView initialize]): check if we are in Safari and IncludeDebugMenu is true then observe for NSApplicationDidFinishLaunchingNotification and call _finishedLaunching
        (+[WebView _finishedLaunching]): observe for NSMenuDidAddItemNotification now that the main menu is loaded and wait for the Debug menu to be added
        (+[WebView _removeDOMTreeMenuItem:]): when the debug menu is added remove the "Show DOM Tree" item

2006-01-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Hyatt.

        Corrects the cascade order for mapped attributes.
        Shows "inline stylesheet" rather than "null" for rules in <style> tags.

        * WebInspector.subproj/webInspector/inspector.js:

2006-01-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        Adds inline style reporting and mapped attribute support to the Inspector Style pane.
        Cleans up the node attributes area with a more natural attr = "value" look.
        Slight optimization to only update visible scrollbars during a window resize.

        * WebInspector.subproj/webInspector/inspector.css:
        * WebInspector.subproj/webInspector/inspector.js:

2006-01-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=6631
        Inspector window has inappropriate maximum height

        * WebInspector.subproj/WebInspector.m:
        (-[WebInspector window]): removes the maximum size constraint

2006-01-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.

        * WebKit.xcodeproj/project.pbxproj:
        made WebNSUserDefaultsExtras.h private (SPI) so its one method can be called from
        Safari, so Safari can stop calling the similar method in Foundation.

2006-01-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        Made _webKit_guessedMIMEType SPI so Safari can use it in order to stop using
        the similar SPI method in Foundation. This involved splitting it out of the file
        it was in, to avoid creating any other new SPI here. Poor svn diff got mighty
        confused in the process.

        * Misc.subproj/WebNSDataExtras.h:
        removed _webkit_guessedMIMEType from here
        * Misc.subproj/WebNSDataExtrasPrivate.h: 
        Added. Contains only _webkit_guessedMIMEType. This file is private (SPI), whereas
        WebNSDataExtras.h is project-internal. I could have renamed WebNSDateExtras.h to
        WebNSDateExtrasInternal.h also, but I minimized the gratuitous change level here
        by not doing that.
        
        * Misc.subproj/WebNSDataExtras.m:
        Despite the great confusion of svn diff, all I actually did here was move 
        _webkit_guessedMIMEType and its helper _webkit_guessedMIMETypeForXML into a new
        category. No lines of code were harmed while creating this patch.

        * WebKit.xcodeproj/project.pbxproj:
        updated for new file

        * WebView.subproj/WebView.m:
        Added #import for new file since WebView uses _webkit_guessedMIMEType

2006-01-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.

        * Misc.subproj/WebNSURLExtras.h:
        added declaration of _webkit_rangeOfURLScheme so Safari can call it as a step
        towards weaning Safari from Foundation SPI.

2006-01-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by eric
        
        Deployment builds now use -O2

        * WebKit.xcodeproj/project.pbxproj:

2006-01-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4112029> With Quartz scaling on, Safari incorrectly 
        handles mouseover effects

        The location of an event in the window should be converted to the superview 
        of the contentView to do accurate hitTesting.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _updateMouseoverWithEvent:]): Convert the point to the
        contentView's superview from nil. 

2006-01-16  Timothy Hatcher  <timothy@apple.com>

        Rubber stamped by Maciej.

        Check for a new "WebKitDeveloperExtras" default when
        including the "Inspect Element" context menu item.
        We should retire the other one eventually.

        * WebView.subproj/WebView.m:
        (-[WebView _menuForElement:defaultItems:]):

2006-01-17  Anders Carlsson  <andersca@mac.com>

        Reviewed by Timothy Hatcher.

        - http://bugs.webkit.org/show_bug.cgi?id=6594
        Web Inspector: finish node attributes
        
        * WebInspector.subproj/webInspector/inspector.css:
        * WebInspector.subproj/webInspector/inspector.html:
        * WebInspector.subproj/webInspector/inspector.js:
        Add initial support for element attributes.

2006-01-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Vicki Murley.
        
        - fixed <rdar://problem/4409288> REGRESSION (TOT): When no selection is present on page, 
        Jump to Selection doesn't beep

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _hasInsertionPoint]):
        new helper method
        (-[NSArray validateUserInterfaceItem:]):
        Don't validate this menu item (or a couple of others) if the selection is a caret and
        the page isn't editable. In that state, there is no visible selection so this menu item
        doesn't make sense. I suspect this was broken by some editing-related change that makes
        selectionState return WebSelectionStateCaret here where it used to return WebSelectionStateNone.

2006-01-16  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

	WebKit part of <rdar://problem/4211707> NPAPI ref count behavior differs with Mozilla

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView getVariable:value:]):
	The returned window script object is expected to be retained, as described here:
	<http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess>

2006-01-16  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        * WebInspector.subproj/webInspector/inspector.js:
        Use defined NodeType values instead of integers.

2006-01-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.
 
        New DOM Inspector that lives in WebKit and is accessible from any WebView.
        Accessible from a contextual menu when the WebKitEnableInspectElementContextMenuItem default is
        true or you have a development build. Browsing the tree, serialized HTML and CSS rules work.
 
        To always enable enter the following in the Terminal (change the bundle id to affect other WebKit apps):
        defaults write com.apple.Safari WebKitEnableInspectElementContextMenuItem -bool true
 
        http://bugs.webkit.org/show_bug.cgi?id=6571

        * English.lproj/Localizable.strings:
        * English.lproj/StringsNotToBeLocalized.txt: reorder of the entries
        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _webkit_stringByCollapsingWhitespaceCharacters]): collapses consecutive whitespace into a single space
        * WebCoreSupport.subproj/WebFrameBridge.m:
        (-[WebFrameBridge pluginViewWithPackage:attributeNames:attributeValues:baseURL:]): cleanup
        (-[WebFrameBridge viewForPluginWithURL:attributeNames:attributeValues:MIMEType:]): call the new UI delegate method
        * WebInspector.subproj: Added.
        * WebInspector.subproj/WebInspector.h: Added.
        * WebInspector.subproj/WebInspector.m: Added.
        (+[WebInspector sharedWebInspector]):
        (-[WebInspector init]):
        (-[WebInspector initWithWebFrame:]):
        (-[WebInspector dealloc]):
        (-[WebInspector window]):
        (-[WebInspector windowDidLoad]):
        (-[WebInspector windowWillClose:]):
        (-[WebInspector showWindow:]):
        (-[WebInspector setWebFrame:]):
        (-[WebInspector webFrame]):
        (-[WebInspector setRootDOMNode:]):
        (-[WebInspector rootDOMNode]):
        (-[WebInspector setFocusedDOMNode:]):
        (-[WebInspector focusedDOMNode]):
        (-[WebInspector setSearchQuery:]):
        (-[WebInspector searchQuery]):
        (-[WebInspector searchResults]):
        (-[WebInspector showOptionsMenu]):
        (-[WebInspector selectNewRoot:]):
        (-[WebInspector resizeTopArea:]):
        (-[WebInspector treeViewScrollTo:]):
        (-[WebInspector treeViewOffsetTop]):
        (-[WebInspector treeViewScrollHeight]):
        (-[WebInspector traverseTreeBackward]):
        (-[WebInspector traverseTreeForward]):
        (-[WebInspector _toggleIgnoreWhitespace:]):
        (-[WebInspector _highlightNode:]):
        (-[WebInspector _nodeHighlightExpired:]):
        (-[WebInspector _focusRootNode:]):
        (-[WebInspector _revealAndSelectNodeInTree:]):
        (-[WebInspector _showSearchResults:]):
        (-[WebInspector _refreshSearch]):
        (-[WebInspector _update]):
        (-[WebInspector _updateRoot]):
        (-[WebInspector _updateTreeScrollbar]):
        (+[WebInspector isSelectorExcludedFromWebScript:]):
        (+[WebInspector webScriptNameForSelector:]):
        (+[WebInspector isKeyExcludedFromWebScript:]):
        (-[WebInspector handleEvent:]):
        (-[WebInspector webView:didFinishLoadForFrame:]):
        (-[WebInspector webView:plugInViewWithArguments:]):
        (-[WebInspector outlineView:numberOfChildrenOfItem:]):
        (-[WebInspector outlineView:isItemExpandable:]):
        (-[WebInspector outlineView:child:ofItem:]):
        (-[WebInspector outlineView:objectValueForTableColumn:byItem:]):
        (-[WebInspector outlineView:willDisplayOutlineCell:forTableColumn:item:]):
        (-[WebInspector outlineViewItemDidCollapse:]):
        (-[WebInspector outlineViewSelectionDidChange:]):
        (-[WebInspectorPrivate dealloc]):
        (-[DOMHTMLElement _addClassName:]): Helper method for the Inspector to append style classes
        (-[DOMHTMLElement _removeClassName:]): Helper method for the Inspector to remove style classes
        (-[DOMNode _contentPreview]):
        (-[DOMNode _isAncestorOfNode:]):
        (-[DOMNode _isDescendantOfNode:]):
        (-[DOMNode _isWhitespace]):
        (-[DOMNode _lengthOfChildNodesIgnoringWhitespace]):
        (-[DOMNode _childNodeAtIndexIgnoringWhitespace:]):
        (-[DOMNode _nextSiblingSkippingWhitespace]):
        (-[DOMNode _previousSiblingSkippingWhitespace]):
        (-[DOMNode _firstChildSkippingWhitespace]):
        (-[DOMNode _lastChildSkippingWhitespace]):
        (-[DOMNode _firstAncestorCommonWithNode:]):
        (-[DOMNode _traverseNextNodeStayingWithin:]):
        (-[DOMNode _traverseNextNodeSkippingWhitespaceStayingWithin:]):
        (-[DOMNode _traversePreviousNode]):
        (-[DOMNode _traversePreviousNodeSkippingWhitespace]):
        (-[DOMNode _nodeTypeName]):
        (-[DOMNode _shortDisplayName]):
        (-[DOMNode _displayName]):
        * WebInspector.subproj/WebInspectorInternal.h: Added.
        * WebInspector.subproj/WebInspectorOutlineView.h: Added.
        * WebInspector.subproj/WebInspectorOutlineView.m: Added.
        (-[WebInspectorOutlineView isOpaque]):
        (-[WebInspectorOutlineView _highlightColorForCell:]):
        (-[WebInspectorOutlineView _highlightRow:clipRect:]):
        (-[WebInspectorOutlineView drawBackgroundInClipRect:]):
        * WebInspector.subproj/WebInspectorPanel.h: Added.
        * WebInspector.subproj/WebInspectorPanel.m: Added.
        (-[WebInspectorPanel canBecomeKeyWindow]):
        (-[WebInspectorPanel canBecomeMainWindow]):
        (-[WebInspectorPanel moveWindow:]):
        (-[WebInspectorPanel resizeWindow:]):
        (-[WebInspectorPanel sendEvent:]):
        * WebInspector.subproj/WebNodeHighlight.h: Added.
        * WebInspector.subproj/WebNodeHighlight.m: Added.
        (-[WebNodeHighlight initWithBounds:andRects:forView:]):
        (-[WebNodeHighlight dealloc]):
        (-[WebNodeHighlight fractionComplete]):
        (-[WebNodeHighlight expire]):
        (-[WebNodeHighlight redraw:]):
        * WebInspector.subproj/WebNodeHighlightView.h: Added.
        * WebInspector.subproj/WebNodeHighlightView.m: Added.
        (-[WebNodeHighlightView roundedRect:withRadius:]):
        (-[WebNodeHighlightView initWithHighlight:andRects:forView:]):
        (-[WebNodeHighlightView dealloc]):
        (-[WebNodeHighlightView isOpaque]):
        (-[WebNodeHighlightView drawRect:]):
        * WebInspector.subproj/webInspector: Added.
        * WebInspector.subproj/webInspector/Images: Added.
        * WebInspector.subproj/webInspector/Images/close.png: Added.
        * WebInspector.subproj/webInspector/Images/closePressed.png: Added.
        * WebInspector.subproj/webInspector/Images/downTriangle.png: Added.
        * WebInspector.subproj/webInspector/Images/menu.png: Added.
        * WebInspector.subproj/webInspector/Images/menuPressed.png: Added.
        * WebInspector.subproj/webInspector/Images/popupFill.png: Added.
        * WebInspector.subproj/webInspector/Images/popupFillPressed.png: Added.
        * WebInspector.subproj/webInspector/Images/popupLeft.png: Added.
        * WebInspector.subproj/webInspector/Images/popupLeftPressed.png: Added.
        * WebInspector.subproj/webInspector/Images/popupRight.png: Added.
        * WebInspector.subproj/webInspector/Images/popupRightPressed.png: Added.
        * WebInspector.subproj/webInspector/Images/rightTriangle.png: Added.
        * WebInspector.subproj/webInspector/Images/scrollThumbBottom.png: Added.
        * WebInspector.subproj/webInspector/Images/scrollThumbMiddle.png: Added.
        * WebInspector.subproj/webInspector/Images/scrollThumbTop.png: Added.
        * WebInspector.subproj/webInspector/Images/scrollTrackBottom.png: Added.
        * WebInspector.subproj/webInspector/Images/scrollTrackMiddle.png: Added.
        * WebInspector.subproj/webInspector/Images/scrollTrackTop.png: Added.
        * WebInspector.subproj/webInspector/Images/squareButtonRight.png: Added.
        * WebInspector.subproj/webInspector/Images/squareButtonRightPressed.png: Added.
        * WebInspector.subproj/webInspector/Images/upTriangle.png: Added.
        * WebInspector.subproj/webInspector/inspector.css: Added.
        * WebInspector.subproj/webInspector/inspector.html: Added.
        * WebInspector.subproj/webInspector/inspector.js: Added.
        * WebKit.xcodeproj/project.pbxproj: Adds Web Inspector files
        * WebView.subproj/WebUIDelegatePrivate.h: new UI delegate method to supply a replacement view for plugins
        * WebView.subproj/WebView.m:
        (-[WebView _menuForElement:defaultItems:]): Add a new context menu item for inspecting
        (-[WebView _inspectElement:]): Context menu item target for inspecting

2006-01-14  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6531
        document.cookie="killmenothing" doesn't set the cookie

        * WebCoreSupport.subproj/WebCookieAdapter.m: (-[WebCookieAdapter setCookies:forURL:policyBaseURL:]):
        Append an '=' to the cookie string if it has none, so that 
        +[NSHTTPCookie cookiesWithResponseHeaderFields:forURL:] can parse it.

2006-01-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - added bridging infrastructure for Page class
        
        * WebCoreSupport.subproj/WebPageBridge.h: Added.
        * WebCoreSupport.subproj/WebPageBridge.m: Added.
        (-[WebPageBridge initWithMainFrameName:view:]): New class, somewhat obvious.
        * WebKit.xcodeproj/project.pbxproj:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): Don't use _mainFrameBrige, use _pageBridge
        (-[WebView _close]): ditto
        (-[WebView _commonInitializationWithFrameName:groupName:]): ditto
        (-[WebView mainFrame]): ditto

2006-01-12  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - rename WebBridge to WebFrameBridge
        
        - also removed all tabs from WebFrameBridge.m

        * DOM.subproj/WebDOMOperations.m:
        (-[DOMNode _bridge]):
        (-[DOMNode webArchive]):
        (-[DOMRange _bridge]):
        (-[DOMRange webArchive]):
        * DOM.subproj/WebDOMOperationsPrivate.h:
        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebCoreStatistics.m:
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _bridge]):
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]):
        * Plugins.subproj/WebPluginContainerCheck.m:
        (-[WebPluginContainerCheck _isForbiddenFileLoad]):
        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController bridge]):
        * WebCoreSupport.subproj/WebBridge.h: Removed.
        * WebCoreSupport.subproj/WebBridge.m: Removed.
        * WebCoreSupport.subproj/WebFileButton.h:
        * WebCoreSupport.subproj/WebFileButton.m:
        (-[WebFileChooserButton initWithBridge:delegate:]):
        * WebCoreSupport.subproj/WebFrameBridge.h: Added.
        * WebCoreSupport.subproj/WebFrameBridge.m: Added.
        (-[WebFrameBridge mainFrame]):
        (-[WebFrameBridge createWindowWithURL:frameName:]):
        (-[WebFrameBridge canTargetLoadInFrame:]):
        (-[WebFrameBridge createChildFrameNamed:withURL:referrer:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        (formDelegate):
        (-[WebFrameBridge createModalDialogWithURL:]):
        * WebCoreSupport.subproj/WebSubresourceLoader.m:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[WebViewFactory bridgeForView:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _bridge]):
        (-[WebDataSource _receivedMainResourceError:complete:]):
        (-[WebDataSource _stringWithData:]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDebugDOMNode.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _traverseNextFrameStayWithin::]):
        (Frame):
        (-[WebFrame _detachFromParent]):
        (-[WebFrame _bridge]):
        (-[WebFrame _initWithWebFrameView:webView:bridge:]):
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView webCoreBridge]):
        (-[WebFrameView _bridge]):
        * WebView.subproj/WebHTMLRepresentation.m:
        (+[WebHTMLRepresentation supportedMIMETypes]):
        (-[WebHTMLRepresentation _bridge]):
        (-[WebHTMLRepresentation documentSource]):
        * WebView.subproj/WebHTMLRepresentationPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        (-[WebHTMLView _deleteRange:killRing:prepend:smartDeleteOK:deletionAction:]):
        (-[WebHTMLView updateFocusState]):
        (-[NSArray validateUserInterfaceItem:]):
        (-[NSArray attributedString]):
        (-[NSArray selectedAttributedString]):
        (-[NSArray concludeDragForDraggingInfo:actionMask:]):
        (-[NSArray keyDown:]):
        (-[NSArray _alterCurrentSelection:direction:granularity:]):
        (-[NSArray _alterCurrentSelection:verticalDistance:]):
        (-[NSArray _expandSelectionToGranularity:]):
        (-[NSArray cut:]):
        (-[NSArray _applyStyleToSelection:withUndoAction:]):
        (-[NSArray _applyParagraphStyleToSelection:withUndoAction:]):
        (-[NSArray pasteAsPlainText:]):
        (-[NSArray insertNewline:]):
        (-[NSArray insertLineBreak:]):
        (-[NSArray insertParagraphSeparator:]):
        (-[NSArray _changeWordCaseWithSelector:]):
        (-[NSArray startSpeaking:]):
        (-[NSArray selectToMark:]):
        (-[NSArray swapWithMark:]):
        (-[NSArray transpose:]):
        (-[WebHTMLView characterIndexForPoint:]):
        (-[WebHTMLView firstRectForCharacterRange:]):
        (-[WebHTMLView selectedRange]):
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView _selectMarkedText]):
        (-[WebHTMLView _selectRangeInMarkedText:]):
        (-[WebHTMLView setMarkedText:selectedRange:]):
        (-[WebHTMLView _selectionIsInsideMarkedText]):
        (-[WebTextCompleteController _insertMatch:]):
        (-[WebTextCompleteController doCompletion]):
        (-[WebTextCompleteController endRevertingChange:moveLeft:]):
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageView.m:
        * WebView.subproj/WebMainResourceLoader.m:
        * WebView.subproj/WebRenderNode.m:
        * WebView.subproj/WebResource.m:
        (-[WebResource _stringValue]):
        * WebView.subproj/WebScriptDebugDelegate.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebView.m:
        (-[WebView _createFrameNamed:inParent:allowsScrolling:]):
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView writeSelectionWithPasteboardTypes:toPasteboard:]):
        (-[WebView moveDragCaretToPoint:]):
        (-[WebView shouldClose]):
        (-[WebView editableDOMRangeForPoint:]):
        (-[WebView setEditable:]):
        (-[WebView deleteSelection]):
        (-[WebView _bridgeForSelectedOrMainFrame]):
        (-[WebView _bridgeAtPoint:]):

2006-01-13  Darin Adler  <darin@apple.com>

        - Replaced tabs with spaces in source files that had less than 10 lines with tabs.
        - Set allow-tabs Subversion property in source files that have more than 10 lines with tabs.

2006-01-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim O.
        
        - fixed <rdar://problem/4406994> REGRESSION (TOT): zooming window at cnn.com 
        makes window fill width of screen

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _largestChildWithScrollBars]):
        now skips zero-area frames, used by some evil ads

2006-01-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim H.
        
        - fixed <rdar://problem/4265966> PDFs continue to show a (secondary) selection 
        when the focus moves elsewhere

        * WebView.subproj/WebPDFView.h:
        added trackedFirstResponder ivar
        
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView dealloc]):
        assert that trackedFirstResponder is nil, as it was released/cleared in viewWillMoveToWindow:
        (-[WebPDFView _trackFirstResponder]):
        If the tracked first responder was the PDFView's documentView, and the current first responder isn't,
        deselect all. This is equivalent to overriding resignFirstResponder in the PDFView's 
        documentView and deselecting all there, as other web document view classes do. Also, keep track of
        the new first responder for next time.
        (-[WebPDFView viewWillMoveToWindow:]):
        stop observing NSWindowDidUpdateNotification on the old window
        (-[WebPDFView viewDidMoveToWindow]):
        start observing NSWindowDidUpdateNotification on the new window, with _trackFirstResponder
        as the callback. Ideally we'd use a notification that tells us that the first responder is
        changing, but there is no such notification, so we have to use this very frequent one instead.
        The archaic 2573089 tracks the desire to have a responder-changed notification.
        (-[WebPDFView becomeFirstResponder]):
        removed comment about this bug that's now obsolete

2006-01-11  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2006-01-09  Darin Adler  <darin@apple.com>

        * Makefile.am: Removed.

2006-01-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth Dakin.
                
        - fixed <rdar://problem/4302263> CrashTracer: 504 crashes in Safari at 
        com.apple.AppKit: NSTargetForSendAction + 1060
        
        The problem was that back/forward/stop/reload context menu items had nil targets,
        and thus were relying on AppKit to start from the context menu target (the clicked-upon 
        view) and use the responder chain to find the WebView to act as the target. In Tiger, 
        context menus don't retain their implicit target (the clicked-upon view again), and
        there was a race condition where the WebHTMLView could be dealloc'ed while the menu item
        was being processed, eventually crashing in AppKit. The fix is to explicitly set the
        target of these four menu items to the WebView, since the WebView is not dealloc'ed
        in the loading process.
        
        This might be fixed in a future version of AppKit by making the context menu retain its
        implicit target until it is dismissed, but with this change it will be fixed regardless
        of potential AppKit changes.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:target:]):
        Added target: parameter and removed code that set the target for some menu items; now the
        caller is responsible for supplying the target.
        (-[WebDefaultUIDelegate contextMenuItemsForElement:defaultMenuItems:]):
        Supply target (or nil) in calls to menuItemWithTag:target:. This matches existing behavior
        except for Back/Forward/Stop/Reload, which used to supply no target but now supply the
        WebView as the target.
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:defaultMenuItems:]):
        Supply target (or nil) in calls to menuItemWithTag:target:

2006-01-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        - Second cut at fixing <rdar://problem/4268278> Submitting a form 
        in onUnload event handler causes crash in 
        -[WebDataSource(WebPrivate) _commitIfReady:].)

        - Fixes http://bugs.webkit.org/show_bug.cgi?id=6331
        REGRESSION: form events don't fire after back/forward navigation, 
        due to inconsistent load state
        
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _stopLoading]): 
        (1) If there are no resource loaders to signal the WebView that we've
        been canceled, manufacture the signal. Otherwise, the cancel gets 
        ignored and nobody cleans up after the load. (We signal the WebView but
        not the WebFrame because we don't want the WebFrame to tear down the 
        data source.  Unlike most canceled data sources, this one has valid data 
        because it's in the back/forward cache.)
        (2) Update _private->stopping before returning because if the 
        data source is in the back/forward cache it can be reused, so it 
        needs to be in a consistent state. (We never encountered this 
        situation before because we would always crash first.)
        (-[WebDataSource _commitLoadWithData:]): Move _commitIfReady call 
        inside retain block because the commit may cause an unload event 
        to fire, which may start a new load, deallocating the current 
        data source. (This is the same reason the rest of the function is 
        in the retain block.)
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]): If the unload handler 
        started a new load, return early to avoid stomping it.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): 
        Undo previous incorrect fix.
        (-[WebFrame stopLoading]): Remove misleading comment. Setting 
        provisionalDataSource to nil is not optional but required for 
        internal consistency.

2006-01-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        Affects many layout tests (when running with primary Russian language).

        - Fix http://bugs.webkit.org/show_bug.cgi?id=4759
        'ex' length unit calculation (Some layout tests fail if the system primary language is Russian)

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer xHeight]): Use glyphForCharacter() instead of -[NSFont glyphWithName:].

2006-01-07  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.
        
        Test: fast/text/atsui-small-caps-punctuation-size.html
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6397
          ATSUI small caps use small punctuation
          
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (createATSULayoutParameters): Changed the characters for which size must
        not change from !u_isbase() to the M* categories.

2006-01-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Vicki Murley (full credit) and Tim Omernick (half credit).
        
        - fixed <rdar://problem/4401102> REGRESSION (420+): When displaying a PDF, tabbing around stops working after reaching page

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView setNextKeyView:]):
        Use [PDFSubview documentView] rather than PDFSubview here, since that's the view that we now hand off first-responderhood to.

2006-01-05  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

	<rdar://problem/4400804> Client-side redirect to a non-HTTP URL confuses Safari

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
	If we were waiting for a quick redirect, but the policy delegate decided to ignore it, then we 
	need to report that the client redirect was cancelled.
	
2006-01-05  John Sullivan  <sullivan@apple.com>

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _fakeKeyEventWithFunctionKey:]):
        Just added a FIXME comment about how to clean up this minor hack in the future.

2006-01-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim O.
        
        - fixed these bugs:
        <rdar://problem/3021785> page up/down don't work on frameset pages unless you click        
        <rdar://problem/3021788> Page Up/Down moves an unscrollable frame if you click on it first
        
        and the WebKit part of this (need new Safari too for complete fix):
        <rdar://problem/4378905> Page up/down don't work in PDFs when address field is focused
        
        I moved some logic down from Safari that dealt with finding the largest scrollable child frame in a frameset,
        and added support for standard scrolling-related selectors to WebPDFView. The latter was needed for 4378905;
        the former was needed due to side effects of the Safari part of the change. As long as I was doing the former,
        I also used that logic to fix 3021785 and 3021788.
        
        * WebView.subproj/WebFrameViewPrivate.h:
        new currently-private methods _hasScrollBars and _largestChildWithScrollBars

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView scrollToBeginningOfDocument:]):
        if we don't have scroll bars, operate on our largest child with scroll bars instead
        (-[WebFrameView scrollToEndOfDocument:]):
        ditto
        (-[WebFrameView _pageVertically:]):
        ditto
        (-[WebFrameView _pageHorizontally:]):
        ditto
        (-[WebFrameView _scrollLineVertically:]):
        ditto
        (-[WebFrameView _scrollLineHorizontally:]):
        ditto
        (-[WebFrameView keyDown:]):
        where we were bailing out if ![self allowsScrolling], also check for whether there's a
        child with scroll bars, and don't bail out if so
        (-[WebFrameView _area]):
        new helper method used to implement _largestChildWithScrollBars (code moved from Safari)
        (-[WebFrameView _hasScrollBars]):
        new method, just returns YES if either scroll bar is showing (code moved from Safari)
        (-[WebFrameView _largestChildWithScrollBars]):
        new method, returns the child with the largest area that is showing at least one scroll bar
        (code moved from Safari and tweaked a little)
        
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _fakeKeyEventWithFunctionKey:]):
        new method, hackaround for the fact that PDFView handles key downs from standard scrolling keys
        but does not implement the standard responder selectors
        (-[WebPDFView scrollPageDown:]):
        use _fakeKeyEventWithFunctionKey: to get the PDFView to scroll appropriately
        (-[WebPDFView scrollPageUp:]):
        ditto
        (-[WebPDFView scrollToBeginningOfDocument:]):
        ditto
        (-[WebPDFView scrollToEndOfDocument:]):
        ditto
        
        * WebView.subproj/WebView.m:
        add scrollToBeginningOfDocument and scrollToEndOfDocument to the list of responder operations
        that we hand off appropriately to the responder chain. These two aren't defined in any header
        but are generated by Home and End keys and used by the text system.

2006-01-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6361
        Add plugin support to DumpRenderTree

        * WebKit.exp: export WebPluginDatabase class, which DumpRenderTree
        needs to add plugins to the runtime.

2006-01-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- move frame management and finding code from WebKit to WebCore
	http://bugs.webkit.org/show_bug.cgi?id=6368

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadPluginRequest:]): Set frame name straight on the bridge,
	instead of having it bubble through the view and frame.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge initWithFrameName:view:]): don't pass name to frame, we own it now; set it
	on ourselves directly
	(-[WebBridge findFrameNamed:]): removed
        (-[WebBridge createWindowWithURL:frameName:]): set name on bridge, not webview
        (-[WebBridge createChildFrameNamed:withURL:referrer:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        (-[WebBridge runModal]): remove excess braces
        * WebKit.xcodeproj/project.pbxproj:
        * WebView.subproj/WebControllerSets.h: Removed.
        * WebView.subproj/WebControllerSets.m: Removed.
        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate name]): removed
        (-[WebFramePrivate setName:]): removed
        (-[WebFramePrivate dealloc]): don't release name, we no longer have one
        (-[WebFrame _appendChild:]): removed
        (-[WebFrame _removeChild:]): removed
        (-[WebFrame _createItem:]): removed stray space
        (-[WebFrame _immediateChildFrameNamed:]): Just call the bridge
        (-[WebFrame _setName:]): removed
        (-[WebFrame _detachFromParent]): remove bridge from parent note self
        (-[WebFrame _continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):
        (-[WebFrame _addChild:]): Call appendChild: on bridge, not self
        (-[WebFrame _nextFrameWithWrap:]): just call bridge (and moved helpers there)
        (-[WebFrame _previousFrameWithWrap:]): just call bridge (and moved helpers there)
        (-[WebFrame _initWithWebFrameView:webView:bridge:]): don't take a name any more
        (-[WebFrame _setFrameNamespace:]): just call bridge
        (-[WebFrame _frameNamespace]): just call bridge
        (-[WebFrame _hasSelection]): remove excess braces
        (-[WebFrame _clearSelection]): ditto
        (-[WebFrame initWithName:webFrameView:webView:]): no more name
        (-[WebFrame name]): just call bridge
        (-[WebFrame findFrameNamed:]): just call bridge (and moved helpers there)
        (-[WebFrame parentFrame]): fixed for new style
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

2006-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

	This is a fix for <rdar://problem/3710994> HiDPI: Link underlines are 
	still one pixel high even if the UI resolution is > 100%

	This fix refactors -drawLineForCharacters to make its organization
	more logical. It changes behavior when printing to the screen by
	rounding the parameters of the line (x- and y-values, width, and 
	thickness) to integer boundaries in device space. Previously,
	this part of the routine just hardcoded a 1 pixel line.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (drawHorizontalLine): This just takes care of drawing the line once everything
	has been calculated in -drawLineForCharacters
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):
	Now takes device space into account. Calls drawHorizontalLine

2006-01-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Vicki.

        - moved frame traversal code across from bridge, also dropped the children
	array

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge dealloc]): Don't release children array, that was moved
	down to WebCore.
        (-[WebBridge saveDocumentState:]):
	- many methods moved to WebCore.
        * WebView.subproj/WebFrame.m:
        (Frame): New convenience method to get a WebFrame * from a method that
	returns WebCoreBridge *.
        (-[WebFrame _firstChildFrame]): use Frame()
        (-[WebFrame _lastChildFrame]): ditto
        (-[WebFrame _previousSiblingFrame]): ditto
        (-[WebFrame _nextSiblingFrame]): ditto
        (-[WebFrame _traverseNextFrameStayWithin:]): ditto

2006-01-03  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6357
        REGRESSION: iframe and target is broken
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _descendantFrameNamed:sourceFrame:]):
        Return the correct frame.

2006-01-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

	    - moved frame traversal logic from WebFrame to WebBridge
	    http://bugs.webkit.org/show_bug.cgi?id=6341

	    To do this, I had to invert the ownership so that WebBridge now
	    owns WebFrame instead of vice versa. As a result, WebView now owns
	    a WebBridge pointer and does not have a direct WebFrame pointer.

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge initWithFrameName:view:]): The initializer is now responsible for creating
	the frame, so pass it what it needs to do that.
        (-[WebBridge dealloc]): The bridge now owns the frame, so release it.
        (-[WebBridge close]): ditto
        (-[WebBridge firstChild]): Moved from WebFrame
        (-[WebBridge lastChild]): ditto
        (-[WebBridge childCount]): ditto
        (-[WebBridge previousSibling]): ditto
        (-[WebBridge nextSibling]): ditto
        (-[WebBridge isDescendantOfFrame:]): ditto
        (-[WebBridge traverseNextFrameStayWithin:]): ditto
        (-[WebBridge appendChild:]): ditto
        (-[WebBridge removeChild:]): ditto
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _removeChild::]): Call WebBridge version
        (-[WebFramePrivate dealloc]): ditto
        (-[WebFrame _firstChildFrame]): ditto
        (-[WebFrame _lastChildFrame]): ditto
        (-[WebFrame _childFrameCount]): ditto
        (-[WebFrame _previousSiblingFrame]): ditto
        (-[WebFrame _nextSiblingFrame]): ditto
        (-[WebFrame _traverseNextFrameStayWithin:]): ditto
        (-[WebFrame _appendChild:]): ditto
        (-[WebFrame _removeChild:]): ditto
        (-[WebFrame _isDescendantOfFrame:]): ditto,
        (-[WebFrame _detachFromParent]): reorder a bit to avoid losing our bridge
	pointer before the bridge is due to release us, and don't release the
	bridge any more since it now owns us
        (-[WebFrame _initWithName:webFrameView:webView:bridge:]): new initializer,
	we no longer create the bridge, instead it is passed in
        (-[WebFrame initWithName:webFrameView:webView:]): Call the new designated
	initializer, but this method is no longer viable and should be deprecated.
        * WebView.subproj/WebFrameInternal.h:
        
	* WebView.subproj/WebView.m: WebView was changed to hold onto
	the WebBridge for the main frame instead of the WebFrame.
	
        (-[WebViewPrivate dealloc]): update for the fact that we hold
	a bridge now, not a frame.
        (-[WebView _close]): ditto
        (-[WebView _createFrameNamed:inParent:allowsScrolling:]): Create
	a bridge, not a frame.
        (-[WebView _commonInitializationWithFrameName:groupName:]): ditto.
        (-[WebView setDefersCallbacks:]): get mainFrame via method
        (-[WebView mainFrame]): Update to get the main frame properly

2005-12-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.
        
        Test: fast/text/justified-text-rect.html
        
        - WebKit part of fix for
          http://bugs.webkit.org/show_bug.cgi?id=5461
          Text width measured incorrectly when text-align: justify

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer selectionRectForRun:style:geometry:]): Added.
        (CG_drawHighlight): Use new function CG_selectionRect.
        (CG_selectionRect): New function to compute the selection rect.
        Eliminated rounding hackery that was required for keeping the highlight
        rect within the selection rect computed by
        InlineTextBox::selectionRect, since the latter uses this function now.
        The new selection rect is wider and matches AppKit more closely,
        although the right hand side is roundf()ed instead of cielf()ed for
        optimal caret positioning.
        (ATSU_drawHighlight): Use new function ATSU_selectionRect.
        (ATSU_selectionRect): New function to compute the selection rect.
        Much like CG_selectionRect.

2005-12-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        Manual testcase added:
        WebCore/manual-tests/onunload-form-submit-crash.html

        - Fixed <rdar://problem/4268278> Submitting a form in onUnload event 
        handler causes crash in -[WebDataSource(WebPrivate) _commitIfReady:] 

        The problem is that the form submission in the unload event kicks off 
        a new load in the midst of the load that caused the unload event to 
        fire in the first place, so the two loads stomp each other.

        The solution is to cancel the first load and let the unload handler's 
        load win. (Firefox does the same.)

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]): Moved call to -closeURL up
        the call stack to _continueLoadRequest. (See below.) This has the 
        side-effect of always firing the unload event, even if the new 
        datasource never becomes committed, which seems like a good thing. 

        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        Call -closeURL here, instead of in _transitionToCommitted,  so that the
        unload handler can fire before we initialize any part of the load.
        
        Check provisionalDataSource for nil to discover if the unload event
        kicked off its own load.

        Cleared up some coments.

        (-[WebFrame _detachFromParent]):
        It turns out that if you close the window instead of just navigating
        to a new page, you get an alternate assertion failure/crash because
        the load kicked off by the unload event handler generates resource
        loader callbacks after the associated WebFrame/WebView has disappeared.

        The nifty solution here is just to reverse the order of calls to
        -stopLoading and -closeURL, thus guaranteeing that -stopLoading has the
        last word when you close a window.

2005-12-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Eric, committed by Maciej.
        
        - fix for http://bugs.webkit.org/show_bug.cgi?id=6288
          HEAD build broken 12/29/2005

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation): Use previous character from the buffer
        instead of ch which may be uninitialized on the first iteration.

2005-12-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - finished frame traversal cleanup
        http://bugs.webkit.org/show_bug.cgi?id=6293

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge childFrames]): Removed (this was unused)
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _removeChild::]): Moved to FrameTraversal category.
        (-[WebFrame _childFrameCount]): New frame traversal method to avoid
	getting the count from the array directly.
        (-[WebFrame _appendChild:]): Factored out the parts of addChild: that
	seem directly relevant to adding a child.
        (-[WebFrame _removeChild:]): Moved to FrameTraversal category.
        (-[WebFrame _detachChildren]): Don't deallocate children array because
	there's no particular need to.
        (-[WebFrame _setDataSource:]): make the assert use _childFrameCount
        (-[WebFrame _opened]):
        (-[WebFrame _checkLoadComplete]): Instead of checking all frames starting
	from the main frame, check this frame and all ancestors. If a resource
	for a frame completes, that con only possibly finish loading for that
	frame and its ancestors, not any other frame in the tree.
	(-[WebFrame _recursiveCheckLoadComplete]): Removed, no longer needed.
        (-[WebFrame _childFramesMatchItem:]): Get child frame count in the new 
	approved way.
        (-[WebFrame _internalChildFrames]): removed
	(-[WebFrame _addChild:]): Use _appendChild: for most of the work.
        (-[WebFrame _generateFrameName]): Get child frame count in the new 
	approved way.
        (-[WebFrame _stopLoadingSubframes]): Use new frame traversal mechanisms,
	upon further consideration there's no need to copy part of the frame tree here.
        (-[WebFrame findFrameNamed:]): Remove extra braces.
        (-[WebFrame childFrames]): Make a new array using the frame traversal methods.
        * WebView.subproj/WebFramePrivate.h: Remove some methods.
        * WebView.subproj/WebMainResourceLoader.m:
        (-[WebMainResourceLoader didReceiveResponse:]): Do _checkLoadComplete on the current
	frame not the main frame (before there was no difference and now the new version is
	what is desired).
        * WebView.subproj/WebView.m:
        (-[WebView _finishedLoadingResourceFromDataSource:]): Remove stray space
        (-[WebView _mainReceivedBytesSoFar:fromDataSource:complete:]): Remove stray spaces
	and update FIXME comment.
        (-[WebView _receivedError:fromDataSource:]): Remove stray space

2005-12-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- abstract frame traversal in WebFrame more
	http://bugs.webkit.org/show_bug.cgi?id=6283
	
	Rewrote most of the frame traversal code in WebFrame to use DOM-style 
	first/last/next/previous methods, to abstract access better in preparation 
	for moving it down. 

	As an added bonus, many formerly recursive methods are now iterative.

        * WebKit.xcodeproj/project.pbxproj: Use gnu99 dialect of C, so that
	variables can be declared in for loop initializers.

	- added new frame traversal methods, to avoid dealing with the children array
	directly:
	
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _firstChildFrame]): New method.
        (-[WebFrame _lastChildFrame]): New method.
        (-[WebFrame _previousSiblingFrame]): New method.
        (-[WebFrame _nextSiblingFrame]): New method.
        (-[WebFrame _traverseNextFrameStayWithin:]): Like traverseNextNode() in the DOM;
	uses some of the previous.

	- apply the new methods
	
        (-[WebFrame _createItemTreeWithTargetFrame:clippedAtTarget:]): Rewrite loop
	to use new traversal methods.
        (-[WebFrame _immediateChildFrameNamed:]): ditto, also added FIXME
        (-[WebFrame _setName:]): Improved comment, removed gratuitous brace
        (-[WebFrame _isDescendantOfFrame:]): Rewrote to chase parent pointers instead
	of looking in child arrays (duh)
        (-[WebFrame _detachChildren]): Rewrite loop to use new traversal methods,
	still walk backwards for now.
        (-[WebFrame _closeOldDataSources]): Rewrite using new traversal methods.
        (-[WebFrame _childFramesMatchItem:]): ditto
        (-[WebFrame _defersCallbacksChanged]): ditto
        (-[WebFrame _viewWillMoveToHostWindow:]): ditto
        (-[WebFrame _viewDidMoveToHostWindow]): ditto
        (-[WebFrame _addChild:]): don't use childFrames method
        (-[WebFrame _removeChild:]): Clear out the sibling pointers after unlinking from the list, 
	not obvious if anything needs this but it seems like the right thing to do.
        (-[WebFrame _generateFrameName]): don't bother to nil-check children array, since
	calling count on nil still gives 0.
        (-[WebFrame _saveDocumentAndScrollState]): Rewrite to use frame traversal methods
        (-[WebFrame _deepLastChildFrame]): renamed from _lastChildFrame, rewrite to use child
	traversal methods.
        (-[WebFrame _nextFrameWithWrap:]): Use new frame traversal stuff (mostly just
	a thin wrapper on _traverseNextFrameStayWithin: 
        (-[WebFrame _previousFrameWithWrap:]): Use new traversal functions
        (-[WebFrame _numPendingOrLoadingRequests:]): Rewrite loop with new tracrsal functions
        (-[WebFrame _reloadForPluginChanges]): ditto
        (-[WebFrame _recursive_pauseNullEventsForAllNetscapePlugins]): ditto
        (-[WebFrame _recursive_resumeNullEventsForAllNetscapePlugins]): ditto
        (-[WebFrame _documentViews]): ditto
        (-[WebFrame _updateDrawsBackground]): ditto
        (-[WebFrame _unmarkAllMisspellings]): ditto
        (-[WebFrame _atMostOneFrameHasSelection]): ditto
        (-[WebFrame _findFrameWithSelection]): ditto
        (-[WebFrame _stopLoadingSubframes]): ditto
        (-[WebFrame _subframeIsLoading]): ditto
        (-[WebFrame _descendantFrameNamed:sourceFrame:]): ditto

2005-12-29  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebFrameView.m: (-[WebFrameViewPrivate dealloc]):
        Removed unused "draggingTypes" instance variable.

2005-12-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin 
        
        Test: fast/text/atsui-spacing-features.html

        - WebKit part of fix for
          http://bugs.webkit.org/show_bug.cgi?id=3922
          Variable word/letter spacing and full justification not supported for
          ATSUI-rendered text

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation): Add letter- and word-spacing and padding for
        justification.
        (createATSULayoutParameters): Compute padding per space.

2005-12-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4844
        Render "simple" Hebrew using the CG codepath

        * WebCoreSupport.subproj/WebTextRenderer.m: (shouldUseATSU): Exclude Hebrew letters and maqaf.

2005-12-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff

        - Remove WebFrame's parent frame pointer, instead rely on WebCore's parent concept
        http://bugs.webkit.org/show_bug.cgi?id=6241

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canTargetLoadInFrame:]): Use bridge parent method instead of needlessly
	asking for parent via WebFrame
        (-[WebBridge frameDetached]): Don't call _removeChild on the parent frame any more
	because WebFame's _detachFromParent takes care of that now.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _createItemTreeWithTargetFrame:clippedAtTarget:]): Fix stray spaces
        (-[WebFrame _detachChildren]): Don't remove children as we loop any more, they
	can remove themselves.
        (-[WebFrame _detachFromParent]): Remove self from parent; don't nil out bridge
	until we are done with it.
        (-[WebFrame _transitionToCommitted:]): Remove some extra braces.
        (-[WebFrame _goToItem:withLoadType:]): Use parentFrame method in assert instead of parent
	field directly.
        (-[WebFrame _addChild:]): Don't poke at parent frame pointer in _private
	since it is not there any more.
        (-[WebFrame _removeChild:]): Remove extra braces and don't clear parent pointer
	explicitly any more.
        (-[WebFrame _addFramePathToString:]): Get parentFrame from method, not field.
        (-[WebFrame _loadDataSource:withLoadType:formState:]): Remove extra braces.
        (-[WebFrame _nextFrameWithWrap:]): Get parent in the proper way and clean up the
	coding style.
        (-[WebFrame _previousFrameWithWrap:]): Ditto.
        (-[WebFrame parentFrame]): Get parent from the bridge.

2005-12-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

	- fixed REGRESSION: world leak of WebDataSource
	http://bugs.webkit.org/show_bug.cgi?id=6242

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _stopLoading]): don't retain self until after
	the possible early return.

2005-12-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

	- rearrange some code in WebDataSource so that more of the frame traversal logic
	is in WebFrame, in preparation for moving it down to WebBridge.
	http://bugs.webkit.org/show_bug.cgi?id=6239

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _archiveWithMarkupString:nodes:]): Assert that the
	data source is committed, doesn't make sense to archive otherwise.
        (-[WebDataSource _subframeArchivesWithCurrentState:]): New helper method.
        (-[WebDataSource _archiveWithCurrentState:]): Assert that the data source
	is committed. Use the helper.
        (-[WebDataSource _setWebView:]): Comment that we won't tell subframes that
	defers callback changed.
        (-[WebDataSource _startLoading]): Remove stray space.
        (-[WebDataSource _stopLoading]): Only handle local _stopLoading business.
	Cound on WebFrame to tell subframes to stop loading. Fold in _stopLoadingInternal
	and remove _recursiveStopLoading.
        (-[WebDataSource _startLoading:]): Clean up an assert slightly.
        (-[WebDataSource _setTitle:]): Remove stray spaces.
        (-[WebDataSource _defersCallbacksChanged]): Don't call subframes. WebFrame
	can do that.
        (-[WebDataSource isLoading]): Move checking of subframes down to WebFrame.
        (-[WebDataSource webArchive]): Return nil if the data source is not yet
	committed. It makes no sense to archive a provisional data source since it
	has no data yet.
        (-[WebDataSource addSubresource:]): Replace an assert with an early return,
	ASSERT is not an appropriate way to flag problems with the argument of a public
	method.
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _setLoadType:]): Remove stray space.
        (-[WebFrame _checkLoadCompleteForThisFrame]): Stop loading subframes
	manually and add a FIXME about confusingness of stopping loading here.
        (-[WebFrame _defersCallbacksChanged]): Tell our subframes.
        (-[WebFrame _addChild:]): Remove stray space.
        (-[WebFrame _stopLoadingSubframes]): New helper method.
        (-[WebFrame _subframeIsLoading]): New helper method, code moved
	from WebDataSource.
        (-[WebFrame stopLoading]): Tell subframes to stop loading.
        (-[WebFrame reload]): Remove extra braces.
        * WebView.subproj/WebFrameInternal.h:

2005-12-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	- move more frame tree traversal code from WebView to WebFrame

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _atMostOneFrameHasSelection]): Moved this debug
	method from WebView, renamed it and changed it to return a boolean
	so it is appropriate for use in assertions instead of giving its own
	errors.
        (-[WebFrame _accumulateFramesWithSelection:]): Helper for the above.
        (-[WebFrame _findFrameWithSelection]):  Moved from WebView and renamed from
	_findSelectedFrame, also removed the skipping variant.
        (-[WebFrame _clearSelectionInOtherFrames]): Moved from WebView and
	changed how the logic works. Instead of clearing selection in any frame
	but the focus frame, it clears selection in all but this one.
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView becomeFirstResponder]): Call _clearSelectionInOtherFrames
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Stop getting WebFrame
	in needlessly roundabout way.
        (-[WebPDFView becomeFirstResponder]): Call _clearSelectionInOtherFrames
        * WebView.subproj/WebTextView.m:
        (-[WebTextView _webFrame]): New helper method.
        (-[WebTextView _elementAtWindowPoint:]): Use it.
        (-[WebTextView becomeFirstResponder]): Call _clearSelectionInOtherFrames
        (-[WebTextView resignFirstResponder]): Fix style issue
        (-[WebTextView clickedOnLink:atIndex:]): Use new helkper
        * WebView.subproj/WebView.m:
        (-[WebView selectedFrame]): Call to WebFrame as appropriate
        (-[WebView _selectedOrMainFrame]): Fix style issue
        * WebView.subproj/WebViewInternal.h:

2005-12-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

	- move a few more methods from WebView to WebFrame.	

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _hasSelection]): Renamed from _frameIsSelected: and moved from
	WebView.
        (-[WebFrame _clearSelection]): Renamed from _deselectFrame: and moved from 
	WebView.
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]): Update for renames.
        (-[WebView _findSelectedFrameStartingFromFrame:skippingFrame:]): Ditto.
        (-[WebView _debugCollectSelectedFramesIntoArray:startingFromFrame:]): Ditto.
        (-[WebView _selectedFrameDidChange]):

2005-12-21  Timothy Hatcher  <timothy@apple.com>

        * WebKit.xcodeproj/project.pbxproj:
          Set tab width to 8, indent width to 4 and uses tabs to false per file.

2005-12-20  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by justin
        
        <http://bugs.webkit.org/show_bug.cgi?id=4682>
        -[WebHTMLView firstRectForCharacterRange:] is using _selectedRange instead of the given range if no marked text

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]): 
        Handle some large unsigned values the way NSTextView does.
        Actually use the range passed in instead of _selectedRange,
        use of _selectedRange was a workaround that is no longer necessary.

2005-12-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - fixed http://bugs.webkit.org/show_bug.cgi?id=6146
          (REGRESSION: Bold font used for Google search result pages is too thick)
          
        This is a problem with a particular font that was installed by Microsoft Office X. Though the
        font and/or lower levels of font-handling code in the system are buggy, this bad symptom will
        occur for users of Safari and other WebKit clients who happen to have one of these bad fonts.
        This adds a workaround to avoid the problem.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamilies:traits:size:]):
        When we're going to synthesize bold or italic, yet the font we looked up was apparently a
        match for the traits, try to look up a font that without the to-be-synthesized traits.
        This way, instead of applying synthetic bold over Arial Bold, we'll apply synthetic
        bold over Arial Regular, which is uglier than just using Arial Bold, but far less ugly
        than using Arial Bold with synthetic bold too.

 2005-12-16  Justin Garcia  <justin.garcia@apple.com>
 
         <rdar://problem/4103393> Frequent Safari crash on lexisnexus.com (khtml::Selection::xPosForVerticalArrowNavigation)
         <rdar://problem/4330451> CrashTracer: [REGRESSION] 2235 crashes in Safari at com.apple.WebCore: khtml::Selection::xPosForVerticalArrowNavigation const  436
         
         Reviewed by darin
         
         WebCore will crash when a selection that starts or ends in a node 
         that has been removed from the document is modify()d.  This can occur:
         (1) in non-editable regions (4103393 and 4330451), (2) in editable 
         regions (4383146) as the result of arbitrary DOM operations, and (3) in 
         Mail (4099739) as the result of an editing operation that sets a 
         bad ending selection.
         
         Crashes of type (1) can occur when the user uses the arrow keys 
         to interact with a web app, or when the user tries to use 
         command-shift-arrow to switch tabs (this is a depricated
         combo that will work if no one else responds to it). The easiest 
         way to fix these crashes is to disallow editing'ish selection changes 
         like moveDown:, selectWord:, pageDown:, etc, when the selection 
         is in a non-editable region.
         
         Crashes of type (2) will require a more complicated fix (but occur 
         much less often than type (1)).  Crashes of type (3) must be 
         fixed by tracking down the editing operation that sets bad selections.
         
         Added a layout-test:
         * editing/selection/selection-actions.html
 
         * WebView.subproj/WebHTMLView.m:
         (-[WebHTMLView _canAlterCurrentSelection]):
         (-[WebHTMLView _alterCurrentSelection:direction:granularity:]):
         (-[WebHTMLView _alterCurrentSelection:verticalDistance:]):
         (-[WebHTMLView _expandSelectionToGranularity:]):
         * WebView.subproj/WebHTMLViewPrivate.h:

2005-12-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mitz
        
        Fixed more uninitialized variable warnings, and 
        removed an extra semicolon.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation):
        (createATSULayoutParameters):

2005-12-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- push more of frame lookup and management from WebView to
	WebFrame, this is in preparation for shifting this to WebCore
	http://bugs.webkit.org/show_bug.cgi?id=6163
	
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge closeWindowSoon]): Adjust for change to WebFrameNamespaces
        (-[WebBridge runModal]): ditto
        * WebView.subproj/WebControllerSets.h:
        * WebView.subproj/WebControllerSets.m:
        (+[WebFrameNamespaces addFrame:toNamespace:]): This now operates in terms
	of WebFrames (expected to be the main frame) not WebViews.
        (+[WebFrameNamespaces framesInNamespace:]): Ditto.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _setFrameNamespace:]): Set self, not WebView.
        (-[WebFrame _shouldAllowAccessFrom:]): Moved this code above use
	to avoid prototyping the method.
        (-[WebFrame _descendantFrameNamed:sourceFrame:]): Ditto.
        (-[WebFrame _frameInAnyWindowNamed:sourceFrame:]): Copied logic
	over from WebView.
        (-[WebFrame findFrameNamed:]): Do it all here, don't call WebView.
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

2005-12-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by adele.

        Fixed build failure due to missing 'b's in my last checkin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge isStatusbarVisible]): changed 'B' to 'b'
        (-[WebBridge setStatusbarVisible:]): ditto

2005-12-20  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, committed by Adele.

        - fix deployment builds broken by the ATSUI multiple renderers patch
        http://bugs.webkit.org/show_bug.cgi?id=6153

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (createATSULayoutParameters): Assign initial values, which will never be used,
        to substituteRenderer and firstSmallCap, to avoid uninitialized variable warnings.

2005-12-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        Part of fix for <rdar://problem/4310363> JavaScript window.open: Height
        is 1 pixel short, and related bugs. See WebCore ChageLog.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge webView]): Added method.

2005-12-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Development-only build fix.

        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]): fixed typo

2005-12-20  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed.

	- revert accidental commit of this file.

2005-12-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

	- Move handling of frame namespaces down to WebFrame.
	- Put some internal class declarations in the implementation file.

        * WebView.subproj/WebControllerSets.m:
        (+[WebFrameNamespaces addWebView:toFrameNamespace:]):
        (+[WebFrameNamespaces webViewsInFrameNamespace:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]):
        (-[WebFrame _setFrameNamespace:]):
        (-[WebFrame _frameNamespace]):
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _close]):
        (-[WebView _findFrameNamed:sourceFrame:]):
        (-[WebView setGroupName:]):
        (-[WebView groupName]):
        * WebView.subproj/WebViewInternal.h:

2005-12-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, committed by Adele.
        
        Test: fast/text/atsui-multiple-renderers.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=6139
          ATSUI code path should implement small caps, synthetic bold and oblique and correct metrics for fallback fonts

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation): Fetch renderer info from the renderers array;
        add synthetic bold offset; render only synthetic bold in the synthetic bold pass.
        (drawGlyphs): Replaced 14 with new SYNTHETIC_OBLIQUE_ANGLE define.
        (initializeATSUStyle): Apply a skewing transform for synthetic oblique.
        (createATSUTextLayout): Merged into createATSUTextLayout.
        (createATSULayoutParameters): Merged in createATSUTextLayout; allocate
        and fill a renderers array and a character buffer for small caps and mirroring;
        (applyMirroringToRun): Merged into createATSULayoutParameters.
        (ATSU_drawHighlight): Deleted mirroring code.
        (ATSU_draw): Deleted mirroring code; added second pass for synthetic bold.
        (ATSU_pointToOffset): Deleted mirroring code.

2005-12-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, committed by Adele.
        
        Test: fast/text/atsui-kerning-and-ligatures.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=6137
          Disable kerning and some ligatures in the ATSUI code path

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (initializeATSUStyle): Disable kerning; disable ligatures unless the font
        does not contain 'a', in which case it is assumed to never be rendered
        by the CG code path.

2005-12-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, committed by Adele.
        
        Test: fast/text/should-use-atsui.html

        - fix for http://bugs.webkit.org/show_bug.cgi?id=6132
          Incorrect selection highlighting for ATSUI text when selected range is "CG-safe"

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (shouldUseATSU): Always start scanning from 0 since drawing and
        highlighting also measure everything up to run->from.

2005-12-17  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

	- remove some unused SPI headers.

        * DOM.subproj/WebDOMDocument.h: Removed.
        * DOM.subproj/WebDOMElement.h: Removed.
        * DOM.subproj/WebDOMNode.h: Removed.
        * WebKit.xcodeproj/project.pbxproj:

2005-12-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5479
          Can't select text with RTL override rendered by ATSUI

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation): Update since the layout only includes from -> to now.
        (-[WebTextRenderer pointToOffset:style:position:includePartialGlyphs:]): Remove
        reversed parameter.
        (CG_floatWidthForRun): Add code to handle RTL case.
        (addDirectionalOverride): Put the override around the entire run.
        (ATSU_drawHighlight): Rearrange and reuse ATSU_floatWidthForRun for more of the work.
        Also round.
        (ATSU_pointToOffset): Remove reversed parameter and run swapping.
        (CG_pointToOffset): Remove reversed parameter, using rtl flag in style instead.

2005-12-16  Evan Gross  <evan@rainmakerinc.com>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4680
          WebHTMLView (WebNSTextInputSupport) - attributedSubstringFromRange "not yet implemented"

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView attributedSubstringFromRange:]):
        Implement by calling the same RTF conversion used when copying to the pasteboard.

2005-12-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6090
          REGRESSION: Assertion failure when choosing Copy from a WebImageView's contextual menu

        * WebView.subproj/WebImageView.m:
        (-[WebImageView elementAtPoint:]): Use WebCoreElementImageRendererKey
        for the image renderer and WebElementImageKey for the image.

2005-12-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- remove _frameForView: method from WebView and replace with a direct pointer on the WebFrameView in the WebFrame

        * Misc.subproj/WebNSViewExtras.m:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _detachFromParent]):
        (-[WebFrame _loadDataSource:withLoadType:formState:]):
        (-[WebFrame initWithName:webFrameView:webView:]):
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _setWebFrame:]):
        (-[WebFrameView webFrame]):
        * WebView.subproj/WebFrameViewInternal.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

2005-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- remove the dead _frameForDataSource: method (WebDataSource now knows its WebFrame)
	http://bugs.webkit.org/show_bug.cgi?id=6072
	
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

=== Safari-521~5 ===

2005-12-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by nobody, simple build fix.

        Fixes a couple ambiguous selector build errors when building with GCC 3.3.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase releaseIconForURL:]):
        * WebView.subproj/WebHTMLView.m:
        (-[NSView _web_layoutIfNeededRecursive:testDirtyRect:]):
        (-[NSArray elementAtPoint:]):

2005-12-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and checked in by John Sullivan.
        
        Fix for: http://bugs.webkit.org/show_bug.cgi?id=6053
        WebIconDatabase returns the Accessibility Verifier app icon instead of
        a generic document icon
        
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _iconForFileURL:withSize:]):
        use file type iconForFileType:NSFileTypeForHFSTypeCode(kGenericDocumentIcon) instead of '????'
        to get the generic document icon.

2005-12-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        - Made protocol <WebDocumentSelection> include protocol <WebDocumentText>, for clarity.
        This required moving some methods from WebTextView, which conformed to <WebDocumentText>,
        up into superclass WebSearchableTextView, which conformed to <WebDocumentSelection>.

        * Misc.subproj/WebSearchableTextView.m:
        (-[NSString supportsTextEncoding]):
        moved this method (unchanged) from subclass WebTextView
        (-[NSString string]):
        ditto
        (-[NSString attributedString]):
        ditto
        (-[NSString selectedString]):
        ditto
        (-[NSString selectedAttributedString]):
        ditto
        (-[NSString selectAll]):
        ditto
        (-[NSString deselectAll]):
        ditto
        
        * WebView.subproj/WebDocumentPrivate.h:
        made <WebDocumentSelection> incorporate <WebDocumentText> rather than just <NSObject>
        * WebView.subproj/WebHTMLView.h:
        removed <WebDocumentText> from protocol list since it's covered by <WebDocumentSelection>
        * WebView.subproj/WebPDFView.h:
        ditto
        * WebView.subproj/WebTextView.h:
        ditto
        * WebView.subproj/WebTextView.m:
        removed the methods that were moved into WebSearchableTextView.m

2005-12-10  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6032
          REGRESSION: Uncaught exception when image is dragged out of webpage

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
        Pass the image renderer, not the NSImage.
        (-[WebHTMLView elementAtPoint:]): Add an NSImage to the dictionary, which now comes from
        WebCore with only an image renderer.
        * WebView.subproj/WebView.m: (-[WebView _writeImageElement:withPasteboardTypes:toPasteboard:]):
        Pass the image renderer, not the NSImage.

2005-12-10  Darin Adler  <darin@apple.com>

        Was getting build failures related to "count" methods.
        Made Tim's build fix Leopard-only.

        * WebView.subproj/WebPreferencesPrivate.h: Go back to <PDFKit/PDFKit.h> on Tiger.

2005-12-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele Peterson.
        
        - fixed <rdar://problem/4373905> Cannot paste in Tiger Mail using TOT WebKit

        * WebView.subproj/WebView.m:
        (-[WebView _frameForCurrentSelection]):
        I removed this method many moons ago when restructuring the code involving frames and selection.
        Too bad Mail was still using it (d'oh!). In Leopard Mail has updated to use newer SPI (which should
        become API), but to continue to work with Mail on Tiger we need this method to be around. Now it's
        just a cover for the method _selectedOrMainFrame, to which it was renamed so very long ago.

2005-12-09  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        * Carbon.subproj/HIWebView.m:
        (UpdateCommandStatus):
	Don't call -performSelector:withObject: on a method that returns a BOOL; this is not guaranteed to work on all architectures.
	-performSelector:withObject:'s return value should only be checked if the method returns an object.

2005-12-09  Timothy Hatcher  <timothy@apple.com>

        Reviewed by nobody, build fix.

        Using <PDFKit/PDFKit.h> was causing build failures for the Mail team.
        The comment about getting an ambiguous signature conflict anywhere the
        method "count" is used seems to no longer be an issue.

        * WebView.subproj/WebPreferencesPrivate.h: Use <Quartz/Quartz.h>

2005-12-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher.
        
        Some cleanup of how selection rects are associated with NSViews.

        * WebView.subproj/WebDocumentPrivate.h:
        Added a -selectionView method to <WebDocumentSelection>, and clarified that the
        selectionRect is in the coordinate system of this view.

        * Misc.subproj/WebSearchableTextView.m:
        (-[WebSearchableTextView selectionView]):
        new method, returns self
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView selectionView]):
        new method, returns self
        
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView selectionRect]):
        translate result into coordinate system of [PDFSubview documentView]
        (-[WebPDFView selectionView]):
        new method, returns [PDFSubview documentView]

2005-12-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick and Dave Hyatt.
        
        - fixed these semi-legendary bugs:
        <rdar://problem/4032405> Inline PDF doesn't get keyboard focus like web pages do, so can't scroll with keys without clicking
        <rdar://problem/4265684> PDFs use secondary selection when displaying found text (4748)

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView becomeFirstResponder]):
        Discovered that there is indeed PDFKit API for accessing the view that becomes focused; now
        passes the focus down to that view.

2005-12-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        - Added WebKit mechanism to help correctly pass the first responder into the PDF view hierarchy,
        in order to start addressing keyboard focus and selection highlight issues. Unfortunately this 
        doesn't actually have any user effect yet due to problems that must be fixed in PDFKit.

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView acceptsFirstResponder]):
        Overridden to returns YES. Needed so NSClipView knows it's OK to pass focus down to this level.
        (-[WebPDFView becomeFirstResponder]):
        With setNextKeyView:, splices the PDF view into the focus-passing mechanism in much the same
        way as NSScrollView and NSClipView.
        (-[WebPDFView setNextKeyView:]):
        With becomeFirstResponder:, splices the PDF view into the focus-passing mechanism in much the same
        way as NSScrollView and NSClipView.
        (-[WebPDFView resignFirstResponder]):
        Removed this method because the WebPDFView itself is never first responder except transiently.

2005-12-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	- some small changes towards frame tree refactoring

	Renamed WebViewSets to WebFrameNamespaces, and put the method for
	performing a selector on all extant WebViews to WebView itself,
	with a separate set tracking live WebViews. This should allow
	moving the storage of this info down to WebCore more easily.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge closeWindowSoon]):
        (-[WebBridge runModal]):
        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[WebViewFactory refreshPlugins:]):
        * WebView.subproj/WebControllerSets.h:
        * WebView.subproj/WebControllerSets.m:
        (+[WebFrameNamespaces addWebView:toFrameNamespace:]):
        (webView::if):
        (+[WebFrameNamespaces webViewsInFrameNamespace:]):
        * WebView.subproj/WebView.m:
        (+[WebView _makeAllWebViewsPerformSelector:]):
        (-[WebView _removeFromAllWebViewsSet]):
        (-[WebView _addToAllWebViewsSet]):
        (-[WebView _close]):
        (-[WebView _findFrameNamed:sourceFrame:]):
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView setGroupName:]):
        * WebView.subproj/WebViewInternal.h:

2005-12-08  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5689
          add support for CSS "custom cursors" (cursor images)

        * WebCoreSupport.subproj/WebImageRenderer.h: Remove declaration of TIFFRepresentation and
        image methods since both are required by the WebCoreImageRenderer protocol now and we don't
        have to re-declare them.

        * Misc.subproj/WebNSPasteboardExtras.m: Add an import of the WebCoreImageRenderer.h file
        since we need to use methods inherited from that protocol.
        * Misc.subproj/WebNSViewExtras.m: Ditto.
        * WebCoreSupport.subproj/WebImageRenderer.m: Ditto. (Use and implement.)

2005-12-07  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5878
          REGRESSION (WebTextRenderer.m r1.201): pointToOffset always takes the CG code path

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer pointToOffset:style:position:reversed:includePartialGlyphs:]):
        Added the missing "return".

2005-12-07  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        - <rdar://problem/4331488> TOT Assertion failure in -[WebHTMLView nextValidKeyView] 
        @ home.netscape.com

        * WebView.subproj/WebHTMLView.m:
        (-[NSArray nextValidKeyView]):
        Removed assert that I added a while back. In this case at least, the assertion is
        overzealous, and I can't recreate the tortured chain of logic that led me to adding
        this assertion in the first place.

2005-12-06  David Harrison  <harrison@apple.com>

	Reviewed by Darin.

	- fix <rdar://problem/4365308> Glendale Regression: Floating dictionary doesn't work well in Safari text areas/fields
	
	Add use of NSAccessibilityHitTest to the list of exceptions.

	* WebView.subproj/WebHTMLView.m:
	(-[WebHTMLView hitTest:]): check for NSFlagsChanged event. 

2005-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        * WebView.subproj/WebHTMLView.m:
        (-[NSArray validateUserInterfaceItem:]):
        one more tweak: moved jumpToSelection: to be validated the same way as
        centerSelectionInVisibleArea:, since it now calls the same code. Might not
        make a difference in any real code, but you never know.

2005-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        * WebView.subproj/WebHTMLView.m:
        (-[NSArray validateUserInterfaceItem:]):
        removed double handling of centerSelectionInVisibleArea

2005-12-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        - WebKit part of fix for 
        <rdar://problem/4365690> Find > Jump to Selection does nothing on plain-text documents (inc. source HTML)        

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView jumpToSelection:]):
        Reimplement jumpToSelection: to call centerSelectionInVisibleArea:, and added a comment explaining why
        jumpToSelection: exists at all. Note that centerSelectionInVisibleArea: was already implemented here; it
        was added as part of HTML editing implementation without us realizing that it was the API replacement
        for jumpToSelection:.
        (-[WebHTMLView validateUserInterfaceItem:]):
        validate centerSelectionInVisibleArea: the same way we validate jumpToSelection: (we should have done
        this when centerSelectionInVisibleArea: was implemented)
        
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView centerSelectionInVisibleArea:]):
        new method, same code that jumpToSelection: used to have
        (-[WebPDFView jumpToSelection:]):
        now calls centerSelectionInVisibleArea:, and there's now a comment about why it exists at all.
        (-[WebPDFView validateUserInterfaceItem:]):
        validate centerSelectionInVisibleArea: the same way we validate jumpToSelection:

2005-12-04  Tim Omernick  <timo@apple.com>

        Reviewed by Dave Harrison, John Sullivan.

	<rdar://problem/4364847> REGRESSION: QuickTime movies open without controller or don't open at all (5928)

	I changed WebFrameView on 2005-11-29 so that it avoids creating duplicate WebPluginDocumentViews.
	Unfortunately, this change caused a regression due to the fact that it subtly changed when plugins are
	initialized.  Certain plugins (e.g. QuickTime) expect to be initialized after the WebPluginDocumentView
	has been "committed" (inserted into the view hierarchy).

	My fix is to ensure that the plugin is initialized where we previously would have created that second
	WebPluginDocumentView -- that is, the plugin is created after the WebPluginDocumentView has been committed.
	
        * Plugins.subproj/WebPluginDocumentView.m:
        (-[WebPluginDocumentView setDataSource:]):
	Don't initialize the plugin if the WebPluginDocumentView has not been inserted into the view hierarchy.
	We assume here that a later call to -setDataSource: will pass this conditional, once the WebDocumentView
	has been committed.
	
2005-12-02  Justin Garcia <justin.garcia@apple.com>

        <rdar://problem/4345030>
        Denver REGRESSION (10.4.2-10.4.3): Two identical warnings on "Back" from Amazon's package tracker
        
        Before checking the navigation policy for a request, the request is compared
        against the last checked request.  If the two are the same, no check is done.
        In the bug, the two requests are identical except for the boolean on
        NSURLRequests that tells Foundation to support multipart loads for that request.
        One request was the one that was used to start servicing "Back" operation, and
        the second was being used to start loading the page (it needed to be reloaded 
        because it was the result of a form submission). Set the boolean on all 
        NSURLRequests, not just one's that are about to be used to start a load.   

        Reviewed by harrison

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource initWithRequest:]):
        * WebView.subproj/WebDataSourcePrivate.h:

2005-12-01  Darin Adler <darin@apple.com>

        Reviewed by Vicki.
	
	- fix <rdar://problem/4349721> Regression: Hovering over menu item doesn't highlight menu item or 
	mousing up on menu item in applet does not open URL in new window at smartmoney.com

	Since Java depends on doing a hit test inside it's mouse moved handling, let hit testing on Java 
	applets go through the standard NSView code path. Since this should only happen for Java, add a global
	so that we can Use our own WebHTMLView hit testing when calling from _updateMouseoverWithEvent.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _hitViewForEvent:]): rename forceRealHitTest to forceNSViewHitTest
        (-[WebHTMLView _updateMouseoverWithEvent:]): set global variable  to force a WebHTMLView-style hit test from here
        (-[WebHTMLView hitTest:]): perform the appropriate hit test based on global variables 

2005-11-29  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by darin.  Committed by eseidel.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=4726
        Drop of multiple non-image file URLs only yields one item

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentWithPaths:]):

2005-11-29  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan, Eric Seidel

	<rdar://problem/4340787> Safari & Dashcode create 2 instances of the QC plug-in
	
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _makeDocumentViewForDataSource:]):
	Instead of creating a new WebDocumentView, use the WebDataSource's representation if it is a WebDocumentView
	of the appropriate class.  Right now, this can only happen when the loading document is a standalone WebKit
	plugin, because WebPluginDocumentView is both the WebDocumentView and the WebDocumentRepresentation for that
	kind of page load.
	
	I have verified that this does not affect other kinds of page loads; in all other cases, the representation
	class is distinct from the document view class.

	I talked with Chris Blumenberg about this change (he knows this code), and he agreed that this is the right
	approach.

2005-11-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin. Committed by Maciej.

	- fixed "Word completion doesn't work at end of word (unless last word)"
	(http://bugs.webkit.org/show_bug.cgi?id=4062)

        * WebView.subproj/WebHTMLView.m:
        (-[WebTextCompleteController doCompletion]):

2005-11-28  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        Probable fix for <rdar://problem/4356060> crash in -[WebHistoryItem _mergeAutoCompleteHints:]

        * History.subproj/WebHistory.m:
        (-[WebHistoryPrivate addItem:]):
        retain/release oldEntry until we're done with it, since removing it from dictionary might
        cause it to be dealloc'ed otherwise.
        
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem _mergeAutoCompleteHints:]):
        added an assert

2005-11-26  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by mjs.  Committed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5230
        "characterIndexForPoint: not yet implemented"

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView characterIndexForPoint:]):
        (-[WebHTMLView firstRectForCharacterRange:]):

2005-11-22  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebView.h: Fixed incorrect comment in public header.

2005-11-18  Vicki Murley  <vicki@apple.com>

	Changes by Tim H, reviewed by Vicki.

	- call shouldClose on the bridge for the main frame

        * WebView.subproj/WebView.m:
        (-[WebView shouldClose]):

2005-11-18  Vicki Murley  <vicki@apple.com>

        Changes by Darin, reviewed by Beth and Vicki.

        - fix <rdar://problem/3939265> support "before unload" event and onbeforeunload handler (supported by both IE and Mozilla)

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canRunBeforeUnloadConfirmPanel]):
        (-[WebBridge runBeforeUnloadConfirmPanelWithMessage:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        * WebView.subproj/WebUIDelegatePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView shouldClose]):
        * WebView.subproj/WebViewPrivate.h:

2005-11-10  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.

        * Plugins.subproj/WebBaseNetscapePluginViewInternal.h: Added.

2005-11-10  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

	<rdar://problem/4237941> Dashboard needs a way to stop Netscape plug-ins from getting null events

        * Plugins.subproj/WebBaseNetscapePluginViewInternal.h: Added.
	Added WebInternal category, with -stopNullEvents and -restartNullEvents.  These methods already exist on WebBaseNetscapePluginView.
	I am just exposing them	to callers elsewhere within WebKit.

        * WebKit.xcodeproj/project.pbxproj:
	Added WebBaseNetscapePluginViewInternal.h.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _recursive_pauseNullEventsForAllNetscapePlugins]):
	Walks down the web frame hierarchy and calls -_pauseNullEventsForAllNetscapePlugins on each WebHTMLView.
        (-[WebFrame _recursive_resumeNullEventsForAllNetscapePlugins]):
	Same as above, but calls -_resumeNullEventsForAllNetscapePlugins.
	
        * WebView.subproj/WebFramePrivate.h:
	Declared -_recursive_pauseNullEventsForAllNetscapePlugins and -_recursive_pauseNullEventsForAllNetscapePlugins.
	
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]):
	Checks subviews for WebBaseNetscapePluginViews, and calls -stopNullEvents on them.
        (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]):
	Same as above, but calls -restartNullEvents.

        * WebView.subproj/WebHTMLViewInternal.h:
	Declared -_pauseNullEventsForAllNetscapePlugins and -_resumeNullEventsForAllNetscapePlugins.

2005-11-07  Geoffrey Garen  <ggaren@apple.com>

        Darin reviewed this a while back.

        - Fixed <rdar://problem/4161660> window.close followed by window.print
        in onload handler crashes Safari in KJS::ScopeChain::bottom
        (redmccombstoyota.com)
        
        Added a call to stopLoading inside closeWindowSoon to prevent load
        events from firing after a window has torn down.
        
        Manual test case: WebCore/manual-tests/window-close-during-parsing.html

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge closeWindowSoon]):

2005-11-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin and Vicki.

        * WebKit.xcodeproj/project.pbxproj:
          Change to use $(SYSTEM_LIBRARY_DIR) consistently and place
          $(NEXT_ROOT) in a few spots to make build-root work.

2005-11-01  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

	<rdar://problem/4318632>

	I've added a new notification, WebPluginWillPresentNativeUserInterfaceNotification.  Plugins are expected to post this
	notification before presenting "native UI", such as dialog boxes.  A Dashboard client can observe this notification to
	hide the Dashboard layer when plugins present external UI.
	
        * English.lproj/StringsNotToBeLocalized.txt:
	Added "WebPluginWillPresentNativeUserInterface".

        * Plugins.subproj/WebPluginsPrivate.h: Added.
        * Plugins.subproj/WebPluginsPrivate.m: Added.
	Declare WebPluginWillPresentNativeUserInterfaceNotification.

        * WebKit.xcodeproj/project.pbxproj:
	Added WebPluginsPrivate.[hm]

	* WebKit.exp:
	Added _WebPluginWillPresentNativeUserInterfaceNotification.

2005-11-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        fixed deployment build by hiding local variables used only in ASSERTs on builds for
        which ASSERT_DISABLED is true.

        * History.subproj/WebHistory.m:
        (-[WebHistoryPrivate removeItemForURLString:]):
        (-[WebHistoryPrivate setLastVisitedTimeInterval:forItem:]):

2005-11-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        - fixed <rdar://problem/4324104> Assertion failure (foundDate) in WebHistory
        
        WebFrame was updating the last visited date on a WebHistoryItem behind WebHistory's
        back, causing WebHistory's caches of items by date to get out of sync with reality.
        Changed to set the date through WebHistory rather than directly.

        * History.subproj/WebHistory.m:
        (-[WebHistoryPrivate _removeItemFromDateCaches:]):
        New method, extracted from removeItemForURLString.
        (-[WebHistoryPrivate removeItemForURLString:]):
        Now calls extracted method. Cleaned up white space a little.
        (-[WebHistoryPrivate _addItemToDateCaches:]):
        New method, extracted from addItem:
        (-[WebHistoryPrivate addItem:]):
        Now calls extracted method. Cleaned up white space a little.
        (-[WebHistoryPrivate setLastVisitedTimeInterval:forItem:]):
        New method, removes item from date caches, changes date, then adds item back to
        date caches and sends notification.
        (-[WebHistory setLastVisitedTimeInterval:forItem:]):
        New method, cover for WebHistoryPrivate version.
        
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
        Don't send notification here; send from new WebHistory method instead.
        
        * History.subproj/WebHistoryItemPrivate.h:
        Added comment about avoiding incorrect use of _setLastVisitedTimeInterval:
        * History.subproj/WebHistoryPrivate.h:
        Added declarations for WebHistory and WebHistoryPrivate versions of 
        setLastVisitedTimeInterval:forItem:
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):
        change history item's date via new WebHistory method rather than directly

2005-10-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Remove the use of a stamp file in the Frameworks symlink build phase.
        This lets us pass the build verification.

        * WebKit.xcodeproj/project.pbxproj:

2005-10-24  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - change internal methods in WebTextRenderer to be functions in case this
          has any effect on speed (also makes things a bit clearer, in my opinion)

        * WebCoreSupport.subproj/WebTextRenderer.h: Made all fields public, which is
        OK since this is really a private class. Made setAlwaysUseATSU: class method
        public too for the same reason.

        * WebCoreSupport.subproj/WebTextRenderer.m: Change all methods to functions.
        (destroy): Function name for method free.
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]): Removed code to first subtract
        lineSpacing - descent, then later add it back.
        (getSmallCapsRenderer): Function name for method smallCapsRenderer.
        (findSubstituteFont): Function name for method substituteFontForString:families:.
        (findSubstituteRenderer): Function name for method substituteRendererForCharacters:length:families:.
        (updateGlyphMapEntry): Function name for method updateGlyphEntryForCharacter:glyphID:substituteRenderer:.
        (extendGlyphMap): Function name for method extendCharacterToGlyphMapToInclude:.
        (extendWidthMap): Function name for method extendGlyphToWidthMapToInclude:.
        (getTextBounds): Function name for method trapezoidForRun:style:atPoint:.

2005-10-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.  Committed by David Harrison.

        http://bugs.webkit.org/show_bug.cgi?id=5415
        "Left border of selection highlight leaves behind a trail"
        
        * manual-tests/drag_select_highlighting.html: Added.
        (this test case was added to WebCore)
   
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation):
        (-[WebTextRenderer CG_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer ATSU_drawHighlightForRun:style:geometry:]):
        (advanceWidthIterator):


2005-10-23  Tim Omernick  <tomernick@apple.com>

        Reviewed by Dave Hyatt.

	<http://bugs.webkit.org/show_bug.cgi?id=5365>

	Send -webPlugInStop (or -pluginStop) and -webPluginDestroy (or -pluginDestroy)
	to complying plugins right when they're removed from the WebHTMLView, and also
	release them from the plugin controller's arrays.
	
	I think this patch makes WebKit behave more like plugins expect it to, which is
	the way it already behaves with Netscape plugins.
	
	I expect complying plugins to stop making noise when receiving the stop
	message, but QuickTime doesn't. If it's lucky, then it will be deallocated
	because of the release and will stop then. However, JS, for one, can retain the
	plugin (e.g. if you execute <javascript:document.getElementById('obj').width;>
	before clicking Remove OBJECT), in which case it will just keep playing.
	
        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController destroyPlugin:]):
	Stop and destroy the plugin.
        * WebView.subproj/WebHTMLView.m:
        (-[NSArray willRemoveSubview:]):
	Destroy plugins when they are removed from the HTML view.
	
2005-10-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        For better abstraction, made the tokenizer -- instead of the 
        data source -- responsible for calling [WebFrame _checkLoadComplete]
        when the tokenizer stops.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _stopLoadingInternal]):

2005-10-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.
        
        WebKit side of the fix for <rdar://problem/4184719> window.print() followed by 
        window.close() causes world leak
        
        No test case added because I have another reviewed patch that will include a test
        for this bug as well as many others.

        Under some conditions, [WebDataSource stopLoading] did not set [WebDataSource isLoading]
        to false, so the didFInishLoad delegates never fired.
        
        The reason isLoading didn't become false was that the tokenizer was still running.
        The fix here is to move the call to [WebCoreBridge stopLoading] above the early return
        inside [WebDataSource stopLoading] -- since the tokenizer may still be running even if the
        loader is finished loading -- and then to call [WebFrame _checkLoadComplete] to 
        give the frame a chance to fire its delegates.
        
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _stopLoadingInternal]):

2005-10-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin??

	Fix for <rdar://problem/3853672> Malformed HTML using crashes Safari in NSFireTimer

	The webFrame was being deleted prematurely by a call to stop(), so we changed it
	so that the calls to _receivedMainResourceError and _mainReceivedError happen 
	before the stop(), and we retain the bridge.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedMainResourceError:complete:]):

2005-10-21  Geoffrey Garen  <ggaren@apple.com>

        Patch by TimO, Reviewed by hyatt, tested and landed by me.

        Found what appears to be a misguided optimization that actually causes a measurable performance problem.
        A fixed-size buffer was allocated on the stack to pass into CFURLGetBytes(), presumably to avoid malloc()
        for URLs less than 2048 bytes.  There was also a fallback which malloc()'ed a buffer in case the fixed-size
        buffer was too small to hold the URL's bytes.  This malloc()'ed buffer was then wrapped in an NSData using
        +dataWithBytesNoCopy:length:, avoiding a memory copy (yay!)

        The problem with this approach is two-fold:
    
        1. Regardless of how the buffer was allocated and filled, it is immediately wrapped in an NSData using
        +dataWithBytes:length:, which copies the input bytes.  This is pretty much unavoidable; we need to get
        the data into a malloc()'ed buffer to return it to the caller, unless the caller provides its own storage
        (which would be super inconvenient).
    
        2. The size of the fixed buffer was large enough that it fit most (if not all) URLs involved in our Page
        Load Test.  This means the unintentionally-inefficient case was by far the most *common* case!
        
        My fix is to malloc() the buffer from the start, and then use +[NSData dataWithBytes:length:freeWhenDone:]
        to wrap the buffer in an NSData.  This avoids a memory copy for the normal case where a URL is less than
        2048 bytes, and keeps the efficient behavior for the uncommon long URL case.

        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_originalData]):

2005-10-21  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.

        - fixed a couple regressions caused by my last check-in
          http://bugs.webkit.org/show_bug.cgi?id=5437
          http://bugs.webkit.org/show_bug.cgi?id=5443

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer CG_drawHighlightForRun:style:geometry:]): Compute background width
        correctly, by subtracting position after run from position before run.
        (addDirectionalOverride): Make the range include only the characters between the
        directional override characters, not the directional override characters themselves.
        (initializeWidthIterator): Correctly compute "widthToStart" based on the offset to
        the beginning of the run, not to the end of the run!

2005-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - optimizations for a total of about 1% speed-up on PLT

        * WebCoreSupport.subproj/WebTextRenderer.h: Updated to use bool instead of BOOL,
        since BOOL is a signed char (which is not so efficient, at least on PPC).
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isSpace): Changed BOOL to bool and UniChar to UChar32. This actually fixes a
        potential bug when the passed-in character is a non-BMP character (> FFFF).
        (isRoundingHackCharacter): Ditto.
        (widthForGlyph): Merged getUncachedWidth, widthFromMap, and widthForGlyph into
        one function. Marked it inline. Changed to include syntheticBoldOffset in the
        cached widths to save an add in the cached case. Instead of the special constant
        UNINITIALIZED_GLYPH_WIDTH, just check for a width >= 0. This allows us to use
        a negative number or NAN for the uninitialized width value -- I chose NAN.
        (overrideLayoutOperation): Use bool instead of Boolean in one place.
        (-[WebTextRenderer initWithFont:]): Use lroundf instead of ROUND_TO_INT.
        (-[WebTextRenderer floatWidthForRun:style:]): Put the code to choose the ATSU
        vs. CG code path back in here, because there are no callers inside the class
        that need to call both.
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):
        Use bool instead of BOOL.
        (+[WebTextRenderer setAlwaysUseATSU:]): Ditto.
        (fontContainsString): Ditto.
        (-[WebTextRenderer computeWidthForSpace]): Ditto. Also use roundf instead of
        using ROUND_TO_INT.
        (-[WebTextRenderer setUpFont]): Use bool instead of BOOL.
        (drawGlyphs): Ditto.
        (-[WebTextRenderer CG_drawHighlightForRun:style:geometry:]): Restructure the
        code so it can use the new advanceWidthIterator function instead of the old
        widthForNextCharacter function.
        (-[WebTextRenderer CG_drawRun:style:geometry:]): Use malloc instead of calloc
        since we don't need initialization. Call CG_floatWidthForRun instead of
        floatWidthForRun -- no need to re-check whether to use the CG or ATSU code path.
        Removed code to handle a renderer of 0 since we no longer generate that in
        the renderers array in advanceWidthIterator.
        (CG_floatWidthForRun): Changed to call the new advanceWidthIterator instead of
        the old widthForNextCharacter.
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]): Use malloc instead of
        calloc and explicitly initialize the one field that needs it. Fixed a potential
        storage leak by adding a call to WKClearGlyphVector. Initialize the renderers
        to self instead of to 0.
        (-[WebTextRenderer extendGlyphToWidthMapToInclude:]): Initialize the widths to
        NAN instead of UNINITIALIZED_GLYPH_WIDTH.
        (addDirectionalOverride): Fixed bug where the first and last character in the buffer
        could be uninitialized and where characters before and after the direction override
        could be incorrect.
        (-[WebTextRenderer ATSU_drawRun:style:geometry:]): Use bool instead of BOOL.
        (-[WebTextRenderer ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        Ditto.
        (advanceWidthIteratorOneCharacter): Added new helper function for CG_pointToOffset.
        (-[WebTextRenderer CG_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        Reimplemented to use advanceWidthIteratorOneCharacter instead of widthForNextCharacter.
        Also call CG_floatWidthForRun instead of floatWidthForRun since we don't need to
        reconsider whether to use CG or ATSU.
        (glyphForCharacter): Removed the map parameter and changed the renderer parameter to
        be an in-out one. Removed uneeded special case for when map is 0 and always get the
        renderer from the map. Also call extendCharacterToGlyphMapToInclude in here instead of
        making that the caller's responsibility.
        (initializeWidthIterator): Renamed to make the name shorter (removed "Character").
        Streamlned common cases like "no padding" and removed some unneeded casts. Changed to
        use advanceWidthIterator to compute width fo the first part of the run.
        (normalizeVoicingMarks): Factored this out into a separate function, since it's not part
        of the common case.
        (advanceWidthIterator): Changed widthForNextCharacter to this, eliminating per-character
        function overhead for iterating past a few characters. Merged the handling of surrogate
        pairs and of voicing marks so that we typically only have to do one "if" to rule out both.
        Merged the mirroring for RTL and uppercasing for small caps into a single boolean so that
        we only need one "if" to rule out both. Call the new glyphForCharacter. Check for the
        character '\t' first since that's cheaper than looking at tabWidth. Check tabWidth for 0
        first so that we don't have to convert it to floating point when not using it. Changed
        the special case for spaces to first check width, so that we don't bother with the rest
        of the code for glyphs not the same width as spaces. Fixed substitution code to call
        CG_floatWidthForRun -- no need to reconsider whether to use CG or ATSU. Also changed to
        properly get width from the result of that function. Merged the handling of letter spacing,
        padding, and word spacing into a single boolean so that we typically only have to do one
        "if" to rule out all three. Check for letterSpacing of 0 first so that we don't have to
        convert it to floating point when not using it. Same for padding and wordSpacing.
        Move the work from ceilCurrentWidth in line into this function. Assume that either we have
        all three pointers (widths, renderers, glyphs), or none of the three, to cut down on branches.
        (fillStyleWithAttributes): Use bool instead of BOOL.
        (shouldUseATSU): Ditto.

        * Misc.subproj/WebKitNSStringExtras.m: (-[NSString _web_widthWithFont:]): Update since
        the floatWidthForRun method no longer takes a widths parameter.
        * Misc.subproj/WebStringTruncator.m: (stringWidth): Ditto.

2005-10-19  Tim Omernick  <tomernick@apple.com>

        Reviewed by eseidel & darin.

	Changed some of the run measurement methods to C functions
        to avoid overhead associated with objc_msgSend().
		
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer floatWidthForRun:style:widths:]):
	Updated to call new run measurement functions instead
        of calling ObjC methods.
        (-[WebTextRenderer CG_drawRun:style:geometry:]): ditto
        (floatWidthForRun): ditto
        (CG_floatWidthForRun): ditto
        (ATSU_floatWidthForRun): ditto
        (widthForNextCharacter): ditto

2005-10-14  Vicki Murley  <vicki@apple.com>

	Changes by Mitz Pettel, reviewed by Maciej.

	Fix http://bugs.webkit.org/show_bug.cgi?id=5029 (Assertion failure in -[NSPasteboard(WebExtras) 
	_web_writeImage:URL:title:archive:types:] when trying to drag an image from a site with no favicon)

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:URL:title:archive:types:]): Prefer the main resource if it is an image

2005-10-12  Vicki Murley  <vicki@apple.com>

        Reviewed by Darin.

	- fix <rdar://problem/4043643> iframe swallows events for overlapping elements (3449)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView hitTest:]): 
        (-[WebHTMLView _updateMouseoverWithEvent:]): eliminate _hitViewForEvent hackery and self
	dependency from this function

2005-10-12  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.
        
        Define WebNSInt and WebNSUInt to wrap around NSInt on Leopard and still build on Tiger
        Once building on Tiger isn't needed we will drop WebNSInt and use NSInt

        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveContentLength:fromDataSource:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _sendRemainingDelegateMessagesWithIdentifier:response:length:error:]):
        * WebView.subproj/WebLoader.m:
        (-[NSURLProtocol didReceiveData:lengthReceived:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView _mouseDidMoveOverElement:modifierFlags:]):
        (-[WebView spellCheckerDocumentTag]):
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2005-10-12  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebPolicyDelegate.h: Fix a comment.

2005-10-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.
        
        Test for 10.4 because of <rdar://problem/4243463>

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView conversationIdentifier]):

2005-10-11  Adele Peterson  <adele@apple.com>

        Rolling out fix for http://bugs.webkit.org/show_bug.cgi?id=5195
        since it caused:

        REGRESSION text areas draw focus ring around each glyph, no caret in text fields
        http://bugs.webkit.org/show_bug.cgi?id=5335

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _propagateDirtyRectsToOpaqueAncestors]):
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        (-[WebHTMLView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):

2005-10-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5195
          Would like API to flush rendering of pending DOM changes

        This was actually a Tiger regression. When AppKit added a new code path for rendering
        NSView, our special hack for doing layout when we draw didn't work any more. So we
        were able to fix this without adding any API.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _recursiveDisplayRectIgnoringOpacity:inContext:topView:]): Added.
        Does the same thing that other _recursiveDisplay methods do.

2005-10-08  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5187
          UTF-8 in long text files breaks at some point

        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation finishedLoadingWithDataSource:]):
        Call flushReceivedData on the WebTextView so it can decode any final bytes.

        * WebView.subproj/WebTextView.h: Added WebCoreTextDecoder field and flushReceivedData method.
        * WebView.subproj/WebTextView.m:
        (-[WebTextView dealloc]): Release WebCoreTextDecoder.
        (-[WebTextView appendReceivedData:fromDataSource:]): Create a WebCoreTextDecoder to decode
        the text; use the textEncodingName from the data source. Use it to decode instead of the
        data source's stringWithData.
        (-[WebTextView flushReceivedData]): Call flush on the decoder and append any last bytes to
        the text view.

2005-10-07  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        WebKit support for allowing clients to know which frame originated a particular JavaScript alert/dialog.

        * WebView.subproj/WebUIDelegatePrivate.h:
        New optional delegate methods for the three JavaScript alert/dialogs. These are just like the existing
        ones in WebUIDelegate.h except that each adds a parameter specifying the frame that the JavaScript was
        running in. Eventually we'll deprecate the old three methods in favor of these in the public API.
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge runJavaScriptAlertPanelWithMessage:]):
        Call version of the delegate method that has the frame parameter if the delegate supports it.
        (-[WebBridge runJavaScriptConfirmPanelWithMessage:]):
        ditto
        (-[WebBridge runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        ditto
        
        * WebView.subproj/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        Now implements the new version of the delegate method that includes the frame parameter. (Still
        doesn't do anything though.)
        (-[WebDefaultUIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]):
        Now implements the new version of the delegate method that includes the frame parameter. (Still
        doesn't do anything though.)
        (-[WebDefaultUIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:]):
        Now implements the new version of the delegate method that includes the frame parameter. Doesn't
        actually use the frame parameter here yet though.
        
2005-10-06  Darin Adler  <darin@apple.com>

        - fixed compiling on Deployment

        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer initWithFont:]):
        Put initialFont inside !LOG_DISABLED.

2005-10-06  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - tweaked formatting

        * WebCoreSupport.subproj/WebTextRenderer.m: Changed function names to remove underscores;
        fixed formatting to match our coding guidelines, other related tweaks.

2005-10-06  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fixed regression in drawing of text in non-flipped contexts from my last check-in

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (drawGlyphs): Only flip the matrix if the NSGraphicsContext is flipped.
        (-[WebTextRenderer _ATSU_drawRun:style:geometry:]): Use -[NSGraphicsContext isFlipped]
        instead of [[NSView focusView] isFlipped].

2005-10-06  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fixed <rdar://problem/3217793> Monaco bold comes out as Helvetica bold, very bad if you choose Monaco as your fixed-width font
        - fixed <rdar://problem/3256269> CSS1: bold/italic font styles not programmatically created if font doesn't include them (3231)
          also <http://bugs.webkit.org/show_bug.cgi?id=3231>

        * WebCoreSupport.subproj/WebTextRenderer.h: Removed public declarations of private structures that are not
        used in the header. Removed the separate 16-bit character map; the difference in code size is only a few
        bytes per page and there's no measurable performance difference by always using the 32-bit character version.
        Removed substitute font width maps altogether, since we now use the width map in the substitute font's renderer.
        Also removed a few more now-unused fields and methods. Changed initWithFont to take WebCoreFont. Changed
        the setAlwaysUseATSU: method to remove the underscore prefix.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (getUncachedWidth): Get font from WebCoreFont directly instead of taking a parameter, since we now use only
        one NSFont per WebTextRenderer.
        (widthFromMap): Removed NSFont parameter for same reason as above; simplified.
        (widthForGlyph): Ditto.
        (overrideLayoutOperation): Updated for change to WebCoreFont.
        (-[WebTextRenderer initWithFont:]): Changed to use WebCoreFont. Removed code to deal with substitute font maps.
        Changed lineGap computation to use floats instead of doubles. Added code to compute a synthetic bold offset.
        Currently this is the font size divided by 24 and then rounded up to an integer.
        (-[WebTextRenderer dealloc]): Updated for change to WebCoreFont and other related changes.
        (-[WebTextRenderer finalize]): Ditto.
        (-[WebTextRenderer xHeight]): Ditto.
        (-[WebTextRenderer drawRun:style:geometry:]): Remove small caps case here; no longer needed. Also updated as above.
        (-[WebTextRenderer floatWidthForRun:style:widths:]): Ditto.
        (-[WebTextRenderer drawHighlightForRun:style:geometry:]): Ditto.
        (-[WebTextRenderer pointToOffset:style:position:reversed:includePartialGlyphs:]): Ditto.
        (+[WebTextRenderer setAlwaysUseATSU:]): Renamed to remove underscore prefix.
        (-[WebTextRenderer smallCapsRenderer]): Ditto. Changed to create a renderer for the smaller sized font.
        (-[WebTextRenderer _substituteFontForString:families:]): Reorganized this to be more readable and to call
        the new rendererForAlternateFont method.
        (-[WebTextRenderer rendererForAlternateFont:]): Added. Used to select an alternate font taking into account
        bold and italic synthesis.
        (-[WebTextRenderer substituteRendererForCharacters:length:families:]): Renamed to remove underscore prefix.
        Updated to use rendererForAlternateFont.
        (-[WebTextRenderer _computeWidthForSpace]): Updated for name changes and to remove unnecessary parameters.
        (-[WebTextRenderer setUpFont]): Renamed to remove underscore prefix. Added code to get printer or screen
        font as specified by WebCoreFont so calers don't need to do this.
        (drawGlyphs): Renamed to remove underscore prefix. Added code for synthetic oblique (14 degree slant), and
        synthetic bold (add offset and draw text a second time).
        (-[WebTextRenderer _CG_drawRun:style:geometry:]): Keep an array of substitute renderers instead of fonts.
        Changed around the loop to reverse the run to be a single loop instead of 3.
        (-[WebTextRenderer floatWidthForRun:style:widths:substituteRenderers:glyphs:startPosition:numGlyphs:]):
        Renamed to remove the underscore prefix.
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:substituteRenderers:glyphs:startPosition:numGlyphs:]):
        Changed to use subsitute renderers rather than fonts.
        (-[WebTextRenderer updateGlyphEntryForCharacter:glyphID:substituteRenderer:]): Renamed to remove underscore
        prefix and changed to use a substitute renderer rather than a substitute NSFont.
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]): Updated to work with all characters, both ones
        that fit into 16-bit and ones that don't.
        (-[WebTextRenderer _extendGlyphToWidthMapToInclude:]): Removed NSFont parameter and simplified. This fixes
        a bug where numberOfGlyphs was accidentally used from the main font instead of "subFont".
        (glyphForCharacter): Changed to use subsitute renderers instead of substitute fonts.
        (widthForNextCharacter): Ditto. Also removed small caps code no longer needed here and replaced it with
        simpler small caps code that no longer assumes glyphs match.
        (shouldUseATSU): Changed the code to check ranges in order to slightly reduce the number of cases and
        to create earlier exit for lower character codes.

        * WebCoreSupport.subproj/WebTextRendererFactory.h: Added caches for synthesized font and oblique
        variants so we can still use the NSFont as the dictionary key. Removed coalesceTextDrawing methods.
        Changed methods to use WebCoreFont as the parameters and results instead of NSFont.
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory clearCaches]): Clear all 8 caches.
        (-[WebTextRendererFactory isFontFixedPitch:]): Changed code slightly so there's only one call to
        the CFDictionarySetValue function.
        (-[WebTextRendererFactory init]): Create all 8 caches.
        (-[WebTextRendererFactory dealloc]): Release all 8 caches.
        (-[WebTextRendererFactory rendererWithFont:]): Select the appropriate cache based on 3 booleans:
        synthetic bold, synthetic oblique, and printer. Use WebCoreFont instead of NSFont.
        (-[WebTextRendererFactory fontWithFamilies:traits:size:]): Set the synthetic bold and oblique flags
        when returning a WebCoreFont based on requested traits that are not present in the NSFont.
        (acceptableChoice): Ignore the synthesizable traits when deciding if a chosen font is acceptable.
        (betterChoice): Rather than assuming that every font has all the desired traits, implement a rule
        that says a font with an unwanted trait loses out over a font that does not have an unwanted trait.
        This lets us chose a bold font over a non-bold font that could use synthesized bold but treat both
        as candidates.

        * WebCoreSupport.subproj/WebGlyphBuffer.h: Removed.
        * WebCoreSupport.subproj/WebGlyphBuffer.m: Removed.
        * WebKit.xcodeproj/project.pbxproj: Removed WebGlyphBuffer source files.

        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_drawAtPoint:font:textColor:]): Update to use WebCoreFont.
        (-[NSString _web_widthWithFont:]): Ditto.
        * Misc.subproj/WebStringTruncator.m:
        (truncateString): Ditto.
        (+[WebStringTruncator widthOfString:font:]): Ditto.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView drawRect:]): Removed text drawing coalesce method calls.
        * WebView.subproj/WebTextView.m: (-[WebTextView setFixedWidthFont]): Updated to use cachedFontFromFamily
        method, which we still have, rather than fontWithFamilies method which we don't (since it now uses WebCoreFont).
        * WebView.subproj/WebView.m: (+[WebView _setAlwaysUseATSU:]): Updated for name change to underlying method.

2005-10-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

	<rdar://problem/4158439> Safari appears to hang when sending synchronous XMLHttpRequest that gets no server response

	No testcase - not testable w/o network.
	
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]): Set a timeout of 10.

2005-10-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin

	Fix for <rdar://problem/4285538> TOT fix for Denver Regression: Drawing glitch in the transparent dialog's cancel/ok 
	button in the widget manager. 

        * WebCoreSupport.subproj/WebImageData.m: Calls WKSetPatternPhaseInUserSpace() which is a new function that lies in 
						WebKitSystemInterface that and takes care of pattern-setting. Prevents 
						regression that occurred with image tiling in transparency layers. 
        (-[WebImageData tileInRect:fromPoint:context:]):

2005-10-03  Tim Omernick  <tomernick@apple.com>

        Reviewed by John Sullivan.

	<rdar://problem/4281095> Denver regression: Seed: Safari HTML 4.01 <object ...> tag problem

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge determineObjectFromMIMEType:URL:]):
	If no view class is registered to handle the MIME type, check to see if there is a plugin registered which can handle it.
	This check is required because the Java plugin does not register an NSView class, so that Java files are downloaded when
	not embedded.

	Prior to this fix, -determineObjectFromMIMEType:URL: would always return ObjectElementNone for Java applets (MIME type
	"application/x-java-applet"), which would cause Java applets embedded in <OBJECT> elements to not be loaded.

	This broke on 05-03-2005, when we changed how we handle fallback content for <OBJECT> elements so that we could pass the
	Acid2 test.

2005-09-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by geoff
        
        Fixed <rdar://problem/4276596> multipart/x-mixed-replace: saved inline images appear only partially loaded
        Fixed <rdar://problem/4265439> progress bar should look complete even if there is some more multipart content being loaded

        * WebCoreSupport.subproj/WebSubresourceLoader.h:
        * WebCoreSupport.subproj/WebSubresourceLoader.m:
        (-[WebSubresourceLoader didReceiveResponse:]):
        Now calls signalFinish and saveResource.
        
        (-[WebSubresourceLoader signalFinish]): 
        Added.  Does the part of didFinishLoading that signals to the WebDataSource and load delegates that the load is finished.
        
        (-[WebSubresourceLoader didFinishLoading]):
        * WebView.subproj/WebLoader.h:
        * WebView.subproj/WebLoader.m:
        (-[NSURLProtocol signalFinish]):
        Similar to above
        
        (-[NSURLProtocol didFinishLoading]):

2005-09-28  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        Moved _downloadWithLoadingConnection and _downloadWithRequestfrom WebDownload.h to WebDownloadInternal.h

        * Misc.subproj/WebDownload.h:
        * Misc.subproj/WebDownloadInternal.h: Added.
        * WebKit.xcodeproj/project.pbxproj: Added WebDownloadInternal.h
        * WebView.subproj/WebMainResourceLoader.m: Added import of WebDownloadInternal.h
        * WebView.subproj/WebView.m: ditto.

2005-09-27  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Changed ints to size_t where appropriate.

        * Misc.subproj/WebCoreStatistics.h:
        * Misc.subproj/WebCoreStatistics.m:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptInterpretersCount]):
        (+[WebCoreStatistics javaScriptNoGCAllowedObjectsCount]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _pageCacheSize]):
        (-[WebPreferences _objectCacheSize]):
        * WebView.subproj/WebPreferencesPrivate.h:

2005-09-26  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.

        - fixed <rdar://problem/4118126> Drag-and-drop text with text containing a colon causes a crash
        
        There were two problems here. One is that dragging and dropping text within the same WebTextView
        should have done nothing rather than try to navigate. The other is that navigating while processing
        the end of the drag would dealloc the drag-initiating WebTextView, leading to a crash. Fixing the
        former doesn't fix all cases of the latter, since dropping onto (e.g.) Safari's location field
        could cause a navigation during the drag. So these two issues needed to be fixed separately.

        * WebView.subproj/WebTextView.m:
        (-[WebTextView dragSelectionWithEvent:offset:slideBack:]):
        Before drag, retain self, and tell WebView that the drag is self-initiated. After drag, do the
        opposite. This is the same approach as WebImageView, but it can all be contained in one method
        here due to NSTextView's dragging API, which wraps up some of the drag-machinery guts.

2005-09-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5100
          -[WebTextRenderer _ATSU_drawRun:...] does not check view flippedness

        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer _ATSU_drawRun:style:geometry:]):
        Set up a the CGContext with a matrix that flips the text if the view is not flipped.

2005-09-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed, tweaked a tiny bit, and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4940
          CG and ATSUI give different width to the same text

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (overrideLayoutOperation): Added. ATSU callback to do the rounding.
        (-[WebTextRenderer _trapezoidForRun:style:atPoint:]): Use the new createATSULayoutParameters
        function instead of calling _createATSUTextLayoutForRun.
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:geometry:]): Use createATSULayoutParameters,
        and also compute the width in a way that works for any direction combination.
        (-[WebTextRenderer _ATSU_drawRun:style:geometry:]): Use createATSULayoutParameters.
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        Use createATSULayoutParameters. Also put in code that seems to work around an ATSU bug.
        (createATSULayoutParameters): Added.
        (disposeATSULayoutParameters): Added.

2005-09-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Dave.
        Landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4862
          Incorrect layout of bidi overrides

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (addDirectionalOverride): Renamed, and made it work in both directions.
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:geometry:]): Updated to call addDirectionalOverride.
        (-[WebTextRenderer _ATSU_drawRun:style:geometry:]): More of the same.
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]): Ditto.

2005-09-24  Alexey Proskuryakov  <ap@nypop.com>

        Tweaked, reviewed, and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4394
          Mouse clicks ignored in inline input areas

        * WebView.subproj/WebHTMLView.m:
        (-[NSArray mouseDown:]): Removed misleading comment and added code to send mouse event to input manager.
        (-[NSArray mouseDragged:]): Added code to send mouse event to input manager.
        (-[NSArray mouseUp:]): Ditto.
        (-[WebHTMLView _discardMarkedText]): Umnmark text before calling markedTextAbandoned: to match behavior
        of NSTextView (not sure why we did things in the opposite order before).
        (-[WebHTMLView _updateSelectionForInputManager]): Ditto.

        - unrelated tweak

        * WebView.subproj/WebView.m:
        (-[WebView _performTextSizingSelector:withObject:onTrackingDocs:selForNonTrackingDocs:newScaleFactor:]):
        Fix typecast that used ... for no good reason.

2005-09-23  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and landed by Darin.

        - name changes to prepare for fixing bugzilla bug 4582

        * WebView.subproj/WebHTMLView.m: Changed names to match WebCore changes.

2005-09-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.

        - fixed <rdar://problem/3228554> We should enforce one selection per WebView instead of per window
        
        Note that this checkin does not mean that we will always maintain a selection in a WebView when
        the focus is elsewhere. Instead it means that there should never be more than one frame containing
        a selection in a WebView, and that it's possible to maintain a selection in a WebView when the focus 
        is elsewhere.

        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]):
        removed unnecessary and somewhat confusing comment
        (-[WebView selectedFrame]):
        now calls the extracted method -_focusedFrame
        (-[WebView _focusedFrame]):
        new method, extracted from -selectedFrame; returns frame containing first responder, if any
        (-[WebView _findSelectedFrameStartingFromFrame:skippingFrame:]):
        added skippingFrame parameter, which is never returned
        (-[WebView _findSelectedFrameSkippingFrame:]):
        new method, starts from main frame and passes a frame to skip
        (-[WebView _findSelectedFrame]):
        now calls _findSelectedFrameSkippingFrame:nil
        (-[WebView _selectedFrameDidChange]):
        new method, called by WebDocumentText protocol implementors; calls -deselectAll on frame that
        formerly displayed a selection, if any

        * WebView.subproj/WebViewInternal.h:
        added category WebDocumentSelectionExtras, with the one method _selectedFrameDidChange

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView becomeFirstResponder]):
        call -[WebView _selectedFrameDidChange]

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView becomeFirstResponder]):
        call -[WebView _selectedFrameDidChange]
        (-[WebPDFView resignFirstResponder]):
        deselect all unless webview says not to; note that this doesn't work in all cases due to:
        <rdar://problem/4265966> PDFs continue to show a (secondary) selection when the focus moves elsewhere        

        * WebView.subproj/WebTextView.m:
        (-[WebTextView becomeFirstResponder]):
        call -[WebView _selectedFrameDidChange]
        (-[WebTextView resignFirstResponder]):
        deselect all unless webview says not to

2005-09-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

	Moved MIME type support from a hard coded list
        (in two places) to single lists in the corresponding
        *Representation classes.  Also moved the list of types
        supported by WebCore (WebHTMLRepresentation) into WebCore.
        http://bugs.webkit.org/show_bug.cgi?id=5037

        * WebView.subproj/WebDataSource.m:
        (addTypesFromClass): new inline function
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebFrameView.m:
        (addTypesFromClass): new inline function
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (+[WebHTMLRepresentation supportedMIMETypes]):
        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView supportedMIMETypes]):
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebImageRepresentation.m:
        (+[WebImageRepresentation supportedMIMETypes]):
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (+[WebImageView supportedMIMETypes]):
        * WebView.subproj/WebPDFRepresentation.h:
        * WebView.subproj/WebPDFRepresentation.m:
        (+[WebPDFRepresentation supportedMIMETypes]):
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        (+[WebPDFView supportedMIMETypes]):
        * WebView.subproj/WebTextRepresentation.h:
        * WebView.subproj/WebTextRepresentation.m:
        (+[WebTextRepresentation supportedMIMETypes]):
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (+[WebTextView supportedMIMETypes]):
        * WebView.subproj/WebView.m:
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:]):
        (+[WebView MIMETypesShownAsHTML]): updated to match style
        (+[WebView setMIMETypesShownAsHTML:]): ditto

2005-09-16  John Sullivan  <sullivan@apple.com>

        * WebView.subproj/WebImageView.m:
        (-[WebImageView copy:]):
        fixed build-breaking silly error in previous checkin

2005-09-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick
        
        - fixed <rdar://problem/4256557> CrashTracer: 238 crashes in Safari at 
        com.apple.AppKit: -[NSPasteboard setData:forType:] + 188

        * WebView.subproj/WebImageView.m:
        (-[WebImageView copy:]):
        declare types to pasteboard before starting to set their data
        (-[WebImageView writeSelectionToPasteboard:types:]):
        ditto

2005-09-16  Adele Peterson  <adele@apple.com>

        Rolling out the fix for http://bugs.webkit.org/show_bug.cgi?id=4924
            QPainter should use CGContext as much as possible rather than NSGraphicsContext 
        since it caused a performance regression.

2005-09-16  Adele Peterson  <adele@apple.com>

        Change by Darin, reviewed by me and Maciej.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=4547
        use int instead of long for 32-bit (to prepare for LP64 compiling)

        * Plugins.subproj/npapi.m: changed types to match those defined in npapi.h
        (NPN_MemAlloc):
        (NPN_MemFlush):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_Write):

2005-09-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by john

        Fixes <rdar://problem/4237479> REGRESSION (Cambridge-Denver): old QuickTime movie continues to play sound after reload
        We were adding the movie to the document twice after the changes were added to handle fallback content.
        There are some errors for which we should not render fall back content

        * Misc.subproj/WebKitErrorsPrivate.h:
        Introduced WebKitErrorPlugInWillHandleLoad to represent the cancel we do
        to prevent loading plugin content twice
        
        * Plugins.subproj/WebPluginDocumentView.m:
        (-[WebPluginDocumentView dataSourceUpdated:]): Ditto
        
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedMainResourceError:complete:]):
        Don't handleFallbackContent on WebKitErrorPlugInWillHandleLoad or on a user cancel

2005-09-14  Timothy Hatcher  <thatcher@apple.com>

        Reviewed by Eric.
        
        * WebKit.xcodeproj/project.pbxproj:
        made WebDashboardRegion.h a private header

2005-09-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4924
          QPainter should use CGContext as much as possible rather than NSGraphicsContext

        * WebCoreSupport.subproj/WebImageRendererFactory.m: Remove setCGCompositeOperationFromString
        method, no longer needed.

2005-09-13  Tim Omernick  <tomernick@apple.com>

        Reviewed by Justin Garcia, Darin Adler.

	- <rdar://problem/3163393> Safari does not support Windowless mode in Flash

        * Plugins.subproj/WebBaseNetscapePluginView.h:
	Added 'isTransparent' instance variable.

        * Plugins.subproj/WebBaseNetscapePluginView.m:	
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):
	When updating a plugin in "windowless" (transparent) mode, clip drawing to the dirty
	region of the opaque ancestor.  This means that a partially-transparent plugin, which
	by definition does not clear its port on redraw, will not overdraw the valid parts
	of its port.
        (-[WebBaseNetscapePluginView sendEvent:]):
	Disabled the "green debug background" for transparent plugins -- since they are not
	expected to cover their entire port every redraw, this debug code makes no sense.
        (-[WebBaseNetscapePluginView setVariable:value:]):
	Implemented -setVariable:value:, which is called from NPN_SetValue() (previously
	unimplemented).
	Right now we only handle NPPVpluginTransparentBool; if we choose to handle the other
	plugin variables, then we may do so here.
        * Plugins.subproj/WebBaseNetscapePluginViewPrivate.h:
	Added SPI for -[WebBaseNetscapePluginView setVariable:value].
        * Plugins.subproj/npapi.m:
        (NPN_SetValue):
	Implemented this function so that plugins may set state (such as window mode).
	
2005-09-11  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed, tweaked, and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4286
          .Mac prefpane crashes when Safari using CVS WebKit is running

        * WebView.subproj/WebView.m: (-[WebView initWithFrame:frameName:groupName:]):
        If ENABLE_WEBKIT_UNSET_DYLD_FRAMEWORK_PATH, and WEBKIT_UNSET_DYLD_FRAMEWORK_PATH
        is set in the environment, then unset DYLD_FRAMEWORK_PATH.

        * WebKit.xcodeproj/project.pbxproj: Set ENABLE_WEBKIT_UNSET_DYLD_FRAMEWORK_PATH
        in configurations other than Default -- we don't want that code in production
        builds, but we want it in builds we do ourselves and nightly builds.

2005-09-10  Ingmar J Stein  <IngmarStein@gmail.com>

        Reviewed and landed by Darin.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):
        Removed unused local variable.

2005-09-09  Tim Omernick  <tomernick@apple.com>

        Reviewed by John Sullivan.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList removeItem:]):
	SPI to remove a given WebHistoryItem.

        * History.subproj/WebBackForwardListPrivate.h: Added.

        * WebKit.xcodeproj/project.pbxproj:
	Added WebBackForwardListPrivate.h as a private header.

2005-09-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.
        
        fixed http://bugs.webkit.org/show_bug.cgi?id=4070:
        Find in plain text won't find only occurrence if it overlaps selection

        * Misc.subproj/WebSearchableTextView.m:
        (-[NSString findString:selectedRange:options:wrap:]):
        in the wrap case, extend the search range far enough that text overlapping the
        selection (including the exact-match case) will be considered.

2005-09-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        WebKit portion of multipart/x-mixed-replace support

        * WebCoreSupport.subproj/WebSubresourceLoader.m:
        (+[WebSubresourceLoader startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]):
        Subresource case: Check for Foundation level multipart support
        (-[WebSubresourceLoader didReceiveResponse:]): 
        Send previously received data in a multipart section to the coreLoader
        (-[WebSubresourceLoader didReceiveData:lengthReceived:]): 
        Don't send data to the coreLoader until it has been completely received
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _startLoading:]): 
        Main resource case: check for Foundation level multipart support 
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        Some server apps send data right after declaring content multipart/x-mixed-replace, and expect it to be treated as html
        (-[WebDataSource _commitIfReady:]):
        Don't ask the WebFrame to close its old WebDataSource when loading a multipart section, because we're going to reuse it
        (-[WebDataSource _receivedData:]):
        For non text/html multipart sections, we commit the data all at once, at the end
        (-[WebDataSource _doesProgressiveLoadWithMIMEType:]):
        Added heuristic for when to commit the load incrementally
        (-[WebDataSource _commitLoadWithData:]):
        Moved from _receivedData into its own function
        (-[WebDataSource _revertToProvisionalState]):
        (-[WebDataSource _setupForReplaceByMIMEType:]):
        Commits the data received for the previous multipart section if it wasn't loaded progresively, clears out the WebFrame and WebDatasource for the next multipart section
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]): 
        The very first multipart section is treated as a normal load, so that the back/forward list and history are updated.
        All later sections have a new load type, WebFrameLoadTypeReplace, and are treated like reloads
        (-[WebFrame _checkLoadCompleteForThisFrame]): Ditto
        (-[WebFrame _itemForRestoringDocState]): Ditto
        (-[WebFrame _setupForReplace]):
        Clears out the WebFrame for the next multipart section
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]): See above
        * WebView.subproj/WebLoader.h:
        * WebView.subproj/WebLoader.m:
        (-[NSURLProtocol clearResourceData]):
        (-[NSURLProtocol setSupportsMultipartContent:]):
        * WebView.subproj/WebMainResourceLoader.m: Straightforward
        (-[WebMainResourceLoader didReceiveResponse:]):

2005-09-06  Geoffrey Garen  <ggaren@apple.com>

        - fixed build bustage from last checkin.
        
        Reviewed by haytt.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList pageCacheSize]): updated debug printf since we no
        longer have a variable called 'multiplier'

2005-09-06  David Hyatt  <hyatt@apple.com>

	Reduce the # of cached pages for a back/forward list.  The old cache would cache the
	following per tab:
	> 1gb memory = 16 pages per tab/window
	> 512mb memory = 8 pages per tab/window
	<= 512mb memory = 4 pages per tab/window

	This consumes far too much memory and is way too aggressive.  The new cache sizes are
	as follows:
	>= 1gb memory = 3 pages per tab/window
	>= 512mb memory = 2 pages per tab/window
	< 512mb memory = 1 page per tab/window

        Reviewed by john

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList pageCacheSize]):
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):

2005-09-05  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4846
          REGRESSION: Carbon WebKit applications don't work at all

        * Carbon.subproj/HIWebView.m: Remove lots of unneeded declarations of private stuff.
        (Draw): Call WKNSWindowOverrideCGContext and WKNSWindowRestoreCGContext rather
        than calling a non-existent setCGContext: method on the context.

2005-09-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave Hyatt.
        
        - change related to <rdar://problem/4211999> Safari quits when click-drag-hold an image 
        that is set to automatically change.

        * WebView.subproj/WebHTMLView.m:
        (-[NSArray namesOfPromisedFilesDroppedAtDestination:]):
        handle nil wrapper with ERROR and early return rather than ASSERT, since we now know
        of a way to reproduce this (written up as 4244861)

2005-09-05  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4357
          crash related to animated GIFs, reproducible in non-Safari WebKit application

        * WebCoreSupport.subproj/WebImageData.m:
        (removeAnimatingRendererFromView): Added.
        (removeFromDictionary): Added.
        (-[WebImageData removeAnimatingRenderer:]): Rewrote using CF functions rather than
        NS functions so that we never retain the views, since this can be called from
        a view's dealloc method.
        (setNeedsDisplayInAnimationRect): Added.
        (-[WebImageData _nextFrame:]): Rewrote as above, even though in this case it can't
        be called from the dealloc method.

2005-08-26  David Hyatt  <hyatt@apple.com>

	Add support for a new scaling and tiling function so that border images from CSS3
	can be implemented.
	
        Reviewed by darin

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData scaleAndTileInRect:fromRect:withHorizontalTileRule:withVerticalTileRule:context:]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer scaleAndTileInRect:fromRect:withHorizontalTileRule:withVerticalTileRule:context:]):
        (-[WebImageRenderer setAnimationRect:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusState]):

2005-08-26  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        * WebKit.xcodeproj/project.pbxproj: Changed WebKit.Framework to WebKit.framework in UMBRELLA_FRAMEWORK.

2005-08-25  David Harrison  <harrison@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4227734> Denver Regression: WebCore selection bug on lines starting with tab (clownfish)

        The text is in a DIV styled with "white-space:pre", and uses newline characters as linebreaks.
        WebKit's text renderer is erroneously considering the width of the lines leading up to the tab
        character when calculating the width of the tab.
        Easily fixed by having widthForNextCharacter ignore the widthToStart when working with tabWidth.
        Any prior text that fits in the same line is already factored into the xpos, which is paid attention to.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):
        Ignore the widthToStart when working with tabWidth.

2005-08-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth Dakin.
        
        - fixed <rdar://problem/4229167> 14 leaks of WebFileButton and associated objects, 
        seen after running webkit layout tests

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge fileButtonWithDelegate:]):
        this method was returning a retained object; I added an autorelease

2005-08-23  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2005-08-23  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4604
          LEAK -[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:] leaks an ATSUTextLayout
          <rdar://problem/4228787> ATSUTextLayout leak in _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs: (4604)

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        Added missing call to ATSUDisposeTextLayout.

2005-08-22  Geoffrey Garen  <ggaren@apple.com>

        - fixed <rdar://problem/4227011> Debugger SPI should be removed from WebView.h API
        
        Reviewed by mjs and adele.

        Cut and pasted debugging SPI from WebView to WebView(WebPendingPublic)
        
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView setScriptDebugDelegate:]):
        (-[WebView scriptDebugDelegate]):
        * WebView.subproj/WebViewPrivate.h:

2005-08-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - WebKit part of fix for 
        <rdar://problem/3977607> ER: Safari should check framework versions at launch

        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebView.m:
        (+[WebView _minimumRequiredSafariBuildNumber]):
        new method, returns the minimum build number of Safari that this WebKit is
        willing to work with. (The Safari version has to be new enough to check
        for this value in order for this to have any effect.)

2005-08-19  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by rjw
        
        The boolean justOpenedForTargetedLink is never used to determine a course of action.  
        It was added long ago for findOrCreateFramedNamed, which has since been removed.

        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadDataSource:withLoadType:formState:]):
        * WebView.subproj/WebFramePrivate.h:

2005-08-19  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * English.lproj/Localizable.strings: Updated to include a new localizable string
        that was added a long while back. Apprently no one has run into the code using
        this string, because if they had, they'd have seen an assert.
        * English.lproj/StringsNotToBeLocalized.txt: Updated for various recent changes.

2005-08-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- fix mysterious CGImageSource error message and possibly crash on layout tests.

        * WebView.subproj/WebMainResourceLoader.m:
        (-[WebMainResourceLoader receivedError:]): Retain the data source since it may
	prematurely self-destruct otherwise.
        (-[WebMainResourceLoader cancelWithError:]): ditto

2005-08-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by rjw
        
        Addresses <rdar://problem/4192534> new frame load delegate SPI needed for Dashboard
            Added handledOnloadEvents delegate method (private for now)

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge handledOnloadEvents]):
        * WebView.subproj/WebDefaultFrameLoadDelegate.m:
        (-[WebDefaultFrameLoadDelegate webView:didHandleOnloadEventsForFrame:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _handledOnloadEvents]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebViewPrivate.h:

2005-08-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen.
        
        - fixed <rdar://problem/4219817> Particular icon database + bookmarks + history crashes Safari on launch

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase releaseIconForURL:]):
        Move line that might remove last reference to iconURL to the end of the block.

2005-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

	- improved fix for <rdar://problem/4211631>, tiled images tiled incorrectly when printing or 
	  drawing offscreen

        * WebCoreSupport.subproj/WebImageData.m: (-[WebImageData tileInRect:fromPoint:context:]):
        Fix pattern phase origin to use the image tile origin, which is clearly right, rather than
        the image rectangle, which isn't right, but often is the same.

2005-08-16  Adele Peterson  <adele@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4210320> URL tooltips should display a URL for elements that submit forms

        When the setShowsURLsInToolTips preference is set, we will display a tooltip containing 
        the form's url when you mouse over a submit button.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _updateMouseoverWithEvent:]):

2005-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Beth Dakin.

        - removed Panther-only code that was not being compiled and was
          simply "bit-rotting"

        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabase _createLRUList:]):
        (+[WebFileDatabase _syncLoop:]):
        * Misc.subproj/WebKitErrors.m:
        (registerErrors):
        * Misc.subproj/WebNSObjectExtras.h:
        (WebCFAutorelease):
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_declareAndWriteDragImage:URL:title:archive:source:]):
        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageDecodeItem.h:
        * WebCoreSupport.subproj/WebImageDecodeItem.m:
        * WebCoreSupport.subproj/WebImageDecoder.h:
        * WebCoreSupport.subproj/WebImageDecoder.m:
        (decoderThread):
        (startDecoderThread):
        * WebCoreSupport.subproj/WebKeyGeneration.cpp: Removed.
        * WebCoreSupport.subproj/WebKeyGeneration.h: Removed.
        * WebCoreSupport.subproj/WebKeyGenerator.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (getUncachedWidth):
        (_drawGlyphs):
        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[WebViewFactory getBytes:fromTextMarker:length:]):
        * WebKit.xcodeproj/project.pbxproj:
        * WebKitPrefix.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _setPrimaryLoadComplete:]):
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        (-[WebDataSource isLoading]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (localizedMenuTitleFromAppKit):
        (-[WebDefaultUIDelegate menuItemWithTag:]):
        (-[WebDefaultUIDelegate contextMenuItemsForElement:defaultMenuItems:]):
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:defaultMenuItems:]):
        * WebView.subproj/WebFormDataStream.m:
        (formCanRead):
        (webSetHTTPBody):
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:chosePlainText:]):
        (-[WebHTMLView resourceForData:preferredFilename:]):
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView validateUserInterfaceItem:]):
        (-[WebHTMLView _attributeStringFromDOMRange:]):
        (-[WebHTMLView toggleBaseWritingDirection:]):
        (-[WebHTMLView changeBaseWritingDirection:]):
        * WebView.subproj/WebPDFRepresentation.h:
        * WebView.subproj/WebPDFRepresentation.m:
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences _systemCFStringEncoding]):
        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2005-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Beth Dakin.

        - removed some unnecessary code

        * WebCoreSupport.subproj/WebGraphicsBridge.h: Removed pattern-phase related field and methods.
        * WebCoreSupport.subproj/WebGraphicsBridge.m: Ditto.

        * WebCoreSupport.subproj/WebImageData.m: Tweaked formatting and removed some unused code
        inside #if and comments.

        * WebCoreSupport.subproj/WebImageRenderer.h: Removed USE_CGIMAGEREF (which is always true now).
        * WebCoreSupport.subproj/WebImageRenderer.m: Removed old non-CGImageRef code.

        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]): Removed non-USE_CGIMAGEREF code.
        (-[WebImageRendererFactory imageRendererWithData:MIMEType:]): Ditto.
        (-[WebImageRendererFactory imageRendererWithSize:]): Ditto.
        (-[WebImageRendererFactory imageRendererWithName:]): Ditto.

2005-08-15  Darin Adler  <darin@apple.com>
	
        Reviewed by Beth.

	This is a fix for <rdar://problem/4211631> tiled images tiled incorrectly when printing or 
	drawing offscreen.

	Cayenne found there was a problem when they were trying to take screen shots of widgets, and
	it was ultimately a problem with the way we tile images. Darin was able to fix the problem
	by replacing some confusing hacked code with CG calls.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData tileInRect:fromPoint:context:]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebInternalImage tileInRect:fromPoint:context:]):
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForMisspelling:withWidth:]):

2005-08-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	- 1% speedup on HTML load speed iBench by avoiding icon database thrash
	http://bugs.webkit.org/show_bug.cgi?id=4423
	
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _setIconURL:forURL:]): Be more aggressive about returning early, because
	updating the database does some expensive data structure copies.
	

2005-08-14  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and landed by Darin.

        WebKit part of fix for <http://bugs.webkit.org/show_bug.cgi?id=4011>:
        "Editing delegate selection methods not called when using mouse"

        Clicking on editable content would move the cursor or alter the selection without
        calling the appropriate editing delegate method
        (webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:). The
        core of the patch is in the KHTMLPart::handleMousePressEvent* methods, the rest
        is glue needed to drill through all the layers.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        Bridge glue.

        * WebView.subproj/WebView.m:
        (-[WebView(WebViewEditingExtras) _shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        Final step in glue, calling editing delegate.

        * WebView.subproj/WebViewInternal.h:
        Added _shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting: private method to WebViewEditingExtras
        category.

2005-08-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Vicki

	This is a fix for <rdar://problem/4141161> REGRESSION (Tiger): WebKit does not display in composited Carbon windows.
	I basically did what Troy suggests in his bug comments, and everything seems to work fine!

        * Carbon.subproj/HIViewAdapter.m:
        (-[HIViewAdapter setNeedsDisplayInRect:]):

2005-08-10  Adele Peterson  <adele@apple.com>

        Bumping version to 420+

        * Info.plist:

2005-08-08  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fixed <rdar://problem/3996324> REGRESSION (1.2-2.0): scroll bars sometimes not updated properly (with >40 duplicate reports!)
          also http://bugs.webkit.org/show_bug.cgi?id=3416

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Propagate dirty rects after doing a layout, since a layout can create new dirty rects.

2005-08-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        * WebKit.xcodeproj/project.pbxproj: Unchecked 'statics are thread safe' option.

2005-08-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        Fix for:
        <rdar://problem/3167884> Shockwave: 3D sprites rendered in OpenGL draw over the browser (3447)
        also as <http://bugs.webkit.org/show_bug.cgi?id=3447>
        
        The WindowRef created by -[NSWindow windowRef] has a QuickDraw GrafPort that covers 
        the entire window frame (or structure region in Carbon parlance) rather then just the window content.
        
        We filed this as an NSWindow bug <rdar://problem/4201099>

        To work around, we modify the CGrafPort to only cover the content area before we let the plug-in draw.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView fixWindowPort]):
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):

2005-08-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen.
        
        - fixed <rdar://problem/3918675> Remove code to replace authentication dialog 
        with a subclass when out of localization freeze

        * Panels.subproj/WebAuthenticationPanel.h:
        moved declaration of NonBlockingPanel here so it can be accessed by the nib
        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel replacePanelWithSubclassHack]):
        removed this method
        (-[WebAuthenticationPanel loadNib]):
        stop calling the removed method

        * Panels.subproj/English.lproj/WebAuthenticationPanel.nib/classes.nib:
        * Panels.subproj/English.lproj/WebAuthenticationPanel.nib/info.nib:
        * Panels.subproj/English.lproj/WebAuthenticationPanel.nib/objects.nib:
        the panel in the nib now has custom class NonBlockingPanel

2005-08-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by cblu

	Removing calls to WKCreateUncorrectedRGBColorSpace and
        WKCreateUncorrectedGrayColorSpace in WebKit to patch up
	TOT...Eric removed them from WebCore last night.

        * WebCoreSupport.subproj/WebImageData.m:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (WebCGColorSpaceCreateRGB):
        (WebCGColorSpaceCreateGray):

2005-08-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        Preemptively moved some WebMenuItemTag values from SPI to API, in anticipation of
        approval from macosx-api-reviewers. Retitled one of them in response to API reviewers feedback:
        WebMenuItemSearchInGoogle -> WebMenuItemSearchWeb
        
        Note that as a side effect of this change, the actual numbers used for these WebMenuItemTags has
        changed from what it was in Tiger. This causes "Search in Spotlight", "Search in Google", and
        "Look Up in Dictionary" to not appear in Tiger Safari if running on tip of tree WebKit.

        * WebView.subproj/WebUIDelegatePrivate.h:
        removed WebMenuItemTagSearchInSpotlight, WebMenuItemTagSearchInGoogle, and WebMenuItemTagLookUpInDictionary

        * WebView.subproj/WebUIDelegate.h:
        added WebMenuItemTagSearchInSpotlight, WebMenuItemTagSearchWeb, and WebMenuItemTagLookUpInDictionary

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]):
        updated for rename
        (-[WebDefaultUIDelegate contextMenuItemsForElement:defaultMenuItems:]):
        ditto
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:defaultMenuItems:]):
        ditto
        
2005-08-01  Geoffrey Garen  <ggaren@apple.com>

        -fixed <rdar://problem/3572585> window.open fails if name param = 
        the name of a window just closed in same function

        Reviewed by darin.

        Test cases added:

        * manual-tests/open-after-close.html: Added.
        * manual-tests/resources/open-after-close-popup.html: Added.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge closeWindowSoon]): We now remove a WebView from 
        WebViewSets when the WebView is *scheduled* to close.

2005-08-01  John Sullivan  <sullivan@apple.com>

        * PublicHeaderChangesFromTiger.txt:
        added a comment about isTextField -> _isTextField

2005-08-01  John Sullivan  <sullivan@apple.com>

        Patch by Trey Matteson <trey@usa.net>
        Reviewed by me.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=4255
          underlines still print too thick

        The real problem here is that we have code that scales a 0 width line to always
        be width=1.0 in device space.  I'm leaving that in for the screen, but when printing
        a width of 0.5 looks good.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):

2005-08-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * WebCoreSupport.subproj/WebGraphicsBridge.m:
        removed create*ColorSpace methods, now using CG API directly.
        http://bugs.webkit.org/show_bug.cgi?id=4211

2005-07-31  John Sullivan  <sullivan@apple.com>

        Patch by Trey Matteson <trey@usa.net>
        Reviewed by me.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=4014
          PDF files by default load with a poor choice of sizing

        For now the various PDF viewing settings are sticky, stored in 2 new defaults.  Since
        there are a number of ways these settings are changed, I made a proxy for the PDFView
        through which all view changing messages are sent.  The proxy adds the behavior of
        updating the defaults upon any change.

        * Misc.subproj/WebNSDictionaryExtras.h:
        * Misc.subproj/WebNSDictionaryExtras.m:
        (-[NSMutableDictionary _webkit_setFloat:forKey:]):  New support method.
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView initWithFrame:]):  Create proxy for PDFView.
        (-[WebPDFView dealloc]):  Free proxy.
        (-[WebPDFView _menuItemsFromPDFKitForEvent:]):  For relevant context menu items, set the
            target to the proxy instead of the PDFView.
        (-[WebPDFView _readPDFDefaults]):  Init PDFView with settings from defaults.
        (-[WebPDFView layout]):  Call _readPDFDefaults, once.  This turned out to be the best hook.
        (-[WebPDFView _makeTextSmaller:]):  Change PDFView via proxy
        (-[WebPDFView _makeTextLarger:]):  Ditto
        (-[WebPDFView _makeTextStandardSize:]):  Ditto
        (-[PDFPrefUpdatingProxy initWithView:]):  trivial
        (-[PDFPrefUpdatingProxy forwardInvocation:]):  Forward the msg, then update defaults
        (-[PDFPrefUpdatingProxy methodSignatureForSelector:]):  Simple forwarding support.
        * WebView.subproj/WebPreferenceKeysPrivate.h:
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):  Set initial values for new PDF viewing defaults.
        (-[WebPreferences _integerValueForKey:]):  Nuke stray comment.
        (-[WebPreferences _floatValueForKey:]):  New simple support method.
        (-[WebPreferences _setFloatValue:forKey:]):  Ditto.
        (-[WebPreferences PDFScaleFactor]):  4 accessors for new defaults 
        (-[WebPreferences setPDFScaleFactor:]):
        (-[WebPreferences PDFDisplayMode]):
        (-[WebPreferences setPDFDisplayMode:]):
        * WebView.subproj/WebPreferencesPrivate.h:

2005-08-01  Justin Garcia  <justin.garcia@apple.com>

        Patch by Trey Matteson <trey@usa.net>

        Reviewed by Maciej.

        Fixed <http://bugs.webkit.org/show_bug.cgi?id=4226>
          link underlines print too thickly

        Reinstate the fix made by sullivan on 1/11/05.  There was a merge
        error with an mjs fix on 1/13/05.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):

2005-07-30  Maciej Stachowiak  <mjs@apple.com>

        Build fixes for previous change (missing includes)

        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebScriptDebugDelegate.m:

2005-07-29  Maciej Stachowiak  <mjs@apple.com>

        Changes by Michael Kahl, reviewed by me.

	- fixed <rdar://problem/4164112> MASTER: JavaScript debugging support
	
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge windowObjectCleared]):
        * WebCoreSupport.subproj/WebSubresourceLoader.m:
        * WebKit.xcodeproj/project.pbxproj:
        * WebView.subproj/WebDefaultScriptDebugDelegate.h: Added.
        * WebView.subproj/WebDefaultScriptDebugDelegate.m: Added.
        (+[WebDefaultScriptDebugDelegate sharedScriptDebugDelegate]):
        (-[WebDefaultScriptDebugDelegate webView:didParseSource:fromURL:sourceId:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]):
        (-[WebFrame _attachScriptDebugger]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebScriptDebugDelegate.h: Added.
        * WebView.subproj/WebScriptDebugDelegate.m: Added.
        (-[WebScriptDebugger initWithWebFrame:]):
        (-[WebScriptDebugger dealloc]):
        (-[WebScriptDebugger globalObject]):
        (-[WebScriptDebugger newWrapperForFrame:]):
        (-[WebScriptDebugger parsedSource:fromURL:sourceId:]):
        (-[WebScriptDebugger enteredFrame:sourceId:line:]):
        (-[WebScriptDebugger hitStatement:sourceId:line:]):
        (-[WebScriptDebugger leavingFrame:sourceId:line:]):
        (-[WebScriptCallFrame _initWithFrame:]):
        (-[WebScriptCallFrame dealloc]):
        (-[WebScriptCallFrame setUserInfo:]):
        (-[WebScriptCallFrame userInfo]):
        (-[WebScriptCallFrame caller]):
        (-[WebScriptCallFrame scopeChain]):
        (-[WebScriptCallFrame functionName]):
        (-[WebScriptCallFrame exception]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView.subproj/WebScriptDebugDelegatePrivate.h: Added.
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]):
        (-[WebView _scriptDebugDelegateForwarder]):
        (-[WebView setScriptDebugDelegate:]):
        (-[WebView scriptDebugDelegate]):
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2005-07-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.

	- fixed http://bugs.webkit.org/show_bug.cgi?id=4153
	
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _purgePageCache]): Find the oldest candidate for
	purging that is not a snapback item.

2005-07-29  David Harrison  <harrison@apple.com>

        Reviewed by Dave Hyatt (rendering) and Maciej (editing and performance improvements).

        Test cases added: Existing tab-related basic editing tests were updated.  More complex tests are coming soon.

        <rdar://problem/3792529> REGRESSION (Mail): Tabs do not work the way they did in Panther (especially useful in plain text mail)
        
        Basic strategy is to put tabs into spans with white-space:pre style, and
        render them with tabs stops every 8th space, where the space width and
        the left margin are those of the enclosing block.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isSpace):
        (isRoundingHackCharacter):
        (getUncachedWidth):
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):
        (-[WebTextRenderer _computeWidthForSpace]):
        (_drawGlyphs):
        (-[WebTextRenderer _CG_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startPosition:numGlyphs:]):
        (-[WebTextRenderer _extendCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        (glyphForCharacter):
        (initializeCharacterWidthIterator):
        (ceilCurrentWidth):
        (widthForNextCharacter):

2005-07-29  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave Hyatt.
        
        - WebKit part of <rdar://problem/4187404> Redo form SPI so that it doesn't rely on NSViews
        
        Much of 4187404 was addressed in earlier checkins. This checkin completes the task.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        removed viewForElement:, which was the only remaining NSView-related SPI that Safari autofill was
        still using. I added viewForElement a week ago as a transitional measure, so removing it won't
        affect any other clients.

2005-07-29  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _firstResponderIsFormControl]):
        renamed from _firstResponderIsControl for clarity. Explicitly rejects WebHTMLView, since
        it's now a control.
        (-[WebFrameView keyDown:]):
        updated for renamed method.

2005-07-28  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth Dakin.
        
        - removed method -[WebHTMLRepresentation elementForView:], which was SPI used only for
        Safari autofill. Tip of tree Safari no longer includes any calls to this method. Also, 
        Tiger Safari never gets around to actually calling it due to the other recent form-SPI-related
        changes, so removing this method doesn't break Tiger Safari running on tip of tree WebKit
        (though autofill continues to not work in that configuration).

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation elementForView:]): removed
        
2005-07-27  John Sullivan  <sullivan@apple.com>

	Patch by Trey Matteson <trey@usa.net>
        Reviewed by me.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=4169
          scaling PDF view up leaves later HTML view scaled too

        An additional step of separating scaling of HTML and PDF.  If we do a zoom and there
        are no docViews that track the common scaling factor, then don't change it.  Thus in
        the common PDF case where it is the only doc view, scaling the PDF does not affect
        HTML pages loaded in the same window.

        * WebView.subproj/WebView.m:
        (-[WebView canMakeTextSmaller]):  Pass 0 for new scaling factor, since we just querying.
        (-[WebView canMakeTextLarger]):  Ditto.
        (-[WebView makeTextSmaller:]):  Pass new scaling factor.
        (-[WebView makeTextLarger:]):  Ditto.
        (-[WebView canMakeTextStandardSize]):  Pass 0 for new scaling factor.
        (-[WebView makeTextStandardSize:]):  Pass new scaling factor.
        (-[WebView _performTextSizingSelector:withObject:onTrackingDocs:selForNonTrackingDocs:newScaleFactor:]):
          The meat of the change is that this Swiss Army Knife also takes a new scaling
          factor, which it will set as the common scaling factor if it finds any doc views that
          are able to be scaled which track the common scaling factor.

2005-07-27  John Sullivan  <sullivan@apple.com>

	Patch by Trey Matteson <trey@usa.net>
        Reviewed by me.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=4015
          PDF views should remember viewing mode, scroll position across back/forward
          Note this doesn't work within frames because of a PDFKit bug - see 4164
        Fixed http://bugs.webkit.org/show_bug.cgi?id=4091
          PDF views should keep a separate scaling factor from shared text scaling factor

        Basic idea #1 is that we now have a general mechanism for a WebDocView to save/restore some UI
        state to the WebHistoryItem.
        Basic idea #2 is that _WebDocumentTextSizing is expanded to allow for the case of a WebDocView
        keeping its own notion of a scaling factor.  WebPDFView's -_tracksCommonSizeFactor has justification.

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setViewState:]):  New methods to hold PList of arbitrary WebView state
        (-[WebHistoryItem viewState]):
        * History.subproj/WebHistoryItemPrivate.h:
        * WebKit.xcodeproj/project.pbxproj:  Add Quartz to framework path so we can import PDFKit files
        * WebView.subproj/WebDocumentInternal.h:  New methods added to _WebDocumentTextSizing.
          Also the _ prefix is sufficient instead of _web_WebDocumentTextSizing.
          Added _WebDocumentViewState protocol.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _createItemTreeWithTargetFrame:clippedAtTarget:]):  Rename of save/restore methods.
        (-[WebFrame _detachFromParent]):  Ditto
        (-[WebFrame _transitionToCommitted:]):  Ditto
        (-[WebFrame _checkLoadCompleteForThisFrame]):  Ditto
        (-[WebFrame _loadItem:withLoadType:]):  Ditto
        (-[WebFrame _recursiveGoToItem:fromItem:withLoadType:]):  Ditto
        (-[WebFrame _saveViewStateToItem:]):  Call doc view to retrieve view state.
        (-[WebFrame _restoreViewState]):  Call doc view to set view state.
        (-[WebFrame _scrollToTop]):  Nuked dead code.
        (-[WebFrame _textSizeMultiplierChanged]):  This work now appears in WebView.
        (-[WebFrame _saveDocumentAndScrollState]):  Same rename, one code cleanup.
        (-[WebFrame _accumulateDocumentViews:]): Add our docview to the array, call kids.
        (-[WebFrame _documentViews]):  New helper to return all docviews.
        (-[WebFrame _didFirstLayout]):  Same name change.
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLView.m:  Removed redundant category decl.
        (-[WebHTMLView _makeTextSmaller:]):  Implement new protocol.
        (-[WebHTMLView _makeTextLarger:]):
        (-[WebHTMLView _makeTextStandardSize:]):
        (-[WebHTMLView _tracksCommonSizeFactor]):
        * WebView.subproj/WebPDFRepresentation.m:  Tweak #imports.
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _menuItemsFromPDFKitForEvent:]):  No longer intercept context menu text sizing items.
        (-[WebPDFView setDataSource:]):  No longer track the WebView's scaling factor.
        (-[WebPDFView scrollPoint]):  Dig through PDFKit view tree to get real scroll position
        (-[WebPDFView setScrollPoint:]):  Ditto
        (-[WebPDFView viewState]):  Return bundle of viewing params
        (-[WebPDFView setViewState:]):  Restore bundle of viewing params
        (-[WebPDFView _makeTextSmaller:]):  Implement new text sizing protocol
        (-[WebPDFView _makeTextLarger:]):
        (-[WebPDFView _makeTextStandardSize:]):
        (-[WebPDFView _tracksCommonSizeFactor]):
        (-[WebPDFView _canMakeTextSmaller]):
        (-[WebPDFView _canMakeTextLarger]):
        (-[WebPDFView _canMakeTextStandardSize]):
        * WebView.subproj/WebTextView.m:
        (-[WebTextView _makeTextSmaller:]):  Implement new text sizing protocol
        (-[WebTextView _makeTextLarger:]):
        (-[WebTextView _makeTextStandardSize:]):
        (-[WebTextView _tracksCommonSizeFactor]):
        * WebView.subproj/WebView.m:
        (-[WebView setTextSizeMultiplier:]):  Calling docViews is now more complicates than just posting
           a notification to the frame.
        (-[WebView _performTextSizingSelector:withObject:onTrackingDocs:selForNonTrackingDocs:]):  Workhorse
           that sends the text sizing method to the right doc views.
        (-[WebView canMakeTextSmaller]):  Call workhorse.
        (-[WebView canMakeTextLarger]):  Ditto
        (-[WebView makeTextSmaller:]):  Ditto
        (-[WebView makeTextLarger:]):  Ditto
        (-[WebView canMakeTextStandardSize]):  Ditto
        (-[WebView makeTextStandardSize:]):  Ditto

2005-07-26  Justin Garcia  <justin.garcia@apple.com>

        Patch by Trey Matteson <trey@usa.net>

        Reviewed by John Sullivan.
        
        Fixed <http://bugs.webkit.org/show_bug.cgi?id=4072>
        Pressing back in browser misses out a page
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):  When reloading the same page or refreshing the
        page, update the URL in the b/f item with the URL that we wind up at.  Due to cookies,
        it might be different than the result we just got when we loaded the same page.

2005-07-26  David Hyatt  <hyatt@apple.com>

	Make WebHTMLView inherit from NSControl instead of NSView.
	This change is necessary because the theme renderer for
	WebCore that draws controls with the Aqua appearance does so
	using NSCells.  NSCells must be hosted within a control view
	in order to paint properly.

	The method updateCell must be overridden because it wants to
	repaint the whole control when the windows resigns/becomes
	key, and this would result in behavior that we don't want
	(the repainting of the whole view).  We already have hooks
	in WebHTMLView for the window resigning/becoming key so
	we will do our proper control updating there instead (in a
	future patch).

        Reviewed by john

        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateCell:]):
        
2005-07-26  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.
        
        - more work to wean form-related SPI from NSView. All that's left (but this is a big "all")
        is viewForElement: and elementForView:        

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge textField:doCommandBySelector:]):
        changed signature to pass along DOMElement* rather than NSView*
        
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate textField:doCommandBySelector:inFrame:]):
        ditto

2005-07-25  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - big hunk of weaning form-related SPI from NSView; autofill continues to
        work (but only on tip of tree Safari)
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge textFieldDidBeginEditing:]):
        changed name from controlTextXXX:, now takes a DOMHTMLInputElement*
        (-[WebBridge textFieldDidEndEditing:]):
        ditto
        (-[WebBridge textDidChangeInTextField:]):
        ditto
        (-[WebBridge textDidChangeInTextArea:]):
        changed name from textDidChange:, now takes a DOMHTMLTextAreaElement*
        (-[WebBridge control:textShouldBeginEditing:]):
        removed this method as it wasn't being used by autofill, and did nothing in WebKit
        (-[WebBridge control:textShouldEndEditing:]):
        ditto
        (-[WebBridge textField:shouldHandleEvent:]):
        changed name from control:textView:shouldHandleEvent:, now takes a DOMHTMLInputElement*.
        The textView parameter wasn't being used, so I eliminated it.
        
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate textFieldDidBeginEditing:inFrame:]):
        (-[WebFormDelegate textFieldDidEndEditing:inFrame:]):
        (-[WebFormDelegate control:textShouldBeginEditing:inFrame:]):
        (-[WebFormDelegate control:textShouldEndEditing:inFrame:]):
        (-[WebFormDelegate textDidChangeInTextField:inFrame:]):
        (-[WebFormDelegate textDidChangeInTextArea:inFrame:]):
        (-[WebFormDelegate textField:shouldHandleEvent:inFrame:]):
        These all changed in the same way as the WebBridge methods
        

2005-07-25  Vicki Murley <vicki@apple.com>

        Reviewed by Darin.
 
	- fixed <rdar://problem/3470523> Safari's user agent should be changed to say Intel rather 
	than PPC on Intel machines

        * WebView.subproj/WebView.m: add conditional #defines for "PPC" and "Intel"
        (-[WebView userAgentForURL:]): use this variable when constructing the user agent string

2005-07-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        - Fixes <rdar://problem/4120535> deleteToEndOfLine: does not delete thew newline when at the end of a line
            Fix to match NSTextView.  Delete the next character if deleteToEndOfLine fails

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView deleteToEndOfLine:]):

2005-07-24  Justin Garcia  <justin.garcia@apple.com>

        Patch by Trey Matteson <trey@apple.com>

        Reviewed by john
        
        Fixes <http://bugs.webkit.org/show_bug.cgi?id=3953> back-forward items have wrong titles after sub-frame navigations

        This was caused by a mistaken data structure, where WebDataSource tried to keep a list of
        b/f items it was responsible for.  The problem arose in the case of frames, where a subframe
        was loaded with new content.  When this happens a fresh tree of b/f items is created,
        but the reference in the DataSource still pointed to the old item.

        Since the WebFrame does a lot of work to track the current b/f item, the easiest thing is to
        get rid of the DataSource's reference, and have it ask the WebFrame to set the title on the
        right b/f item.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]):
        (-[WebDataSource _setTitle:]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _createItem:]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _setTitle:]):
        * WebView.subproj/WebFramePrivate.h:

2005-07-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin
        
        Fixed make clean problem

        * Makefile.am:

2005-07-23  Justin Garcia  <justin.garcia@apple.com>

        Patch by <opendarwin.org@mitzpettel.com>

        Reviewed by darin and hyatt
        
        Fixes <http://bugs.webkit.org/show_bug.cgi?id=3862>
        The fix for <http://bugs.webkit.org/show_bug.cgi?id=3545> enclosed each run of visually ordered
        hebrew with LRO and PDF control characters, but adjusted the run's to and from to include those characters,
        so that they would be rendered if the font includes a glyph for bidi control characters.
        
        Also adding a manual test

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (reverseCharactersInRun):

2005-07-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Justin Garcia.
        
        Mail (running on tip of tree WebKit) was running into an assertion I recently added.
        The assertion is actually correct, catching an old bug in this code.

        * WebView.subproj/WebView.m:
        (-[WebView selectedFrame]):
        if the first responder is a WebFrameView, then we've found the WebFrameView we're 
        looking for, and we shouldn't look at its superviews.

2005-07-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.

        - some changes in the direction of weaning all the form-related SPI from NSView

        * PublicHeaderChangesFromTiger.txt:
        noted that the WebCore change to add -[DOMHTMLInputElement isTextField] to
        DOMExtensions.h is a public header change.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation viewForElement:]):
        added viewForElement: as a stopgap measure. This allowed me to convert controlsInForm:
        to return DOMElements rather than NSViews, while keeping autocomplete working in
        Safari tip of tree. When I finish the SPI conversion I'll delete this method. Note that
        from this point on, autocomplete will not work in Tiger Safari with tip of tree WebKit
        (it will always fail to find anything to autocomplete)

2005-07-21  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Changing temporary #ifndef to #if

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _checkSolidColor:]):

2005-07-21  Adele Peterson  <adele@apple.com>

        Reviewed by Chris Blumenberg.

        - fixed <rdar://problem/4132797> don't register thin PPC WebKit plug-ins
        Merged fix for:
        <rdar://problem/4127100> [WebKit] 8B1016: After installing Acrobat Reader, can no longer see pdf's in Safari

        * Plugins.subproj/WebBasePluginPackage.h: Added isNativeLibraryData method.
        * Plugins.subproj/WebBasePluginPackage.m: (-[WebBasePluginPackage isNativeLibraryData:]): Added isNativeLibraryData method.
        * Plugins.subproj/WebNetscapePluginPackage.m: (-[WebNetscapePluginPackage initWithPath:]):
          calls isNativeLibraryData to determine whether or not to register the plug-in.
        * Plugins.subproj/WebPluginPackage.m: (-[WebPluginPackage initWithPath:]): ditto.
        * WebCoreSupport.subproj/WebImageData.m: (-[WebImageData _checkSolidColor:]): added comment for #ifdef.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * WebKit.pbproj/project.pbxproj: Removed.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * WebKit.xcodeproj/.cvsignore: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * WebKit.xcodeproj/project.pbxproj: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * Makefile.am:

2005-07-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Vicki Murley.

        - removed some form-related methods that weren't being used anywhere, in preparation
        for weaning WebKit's WebFormDelegate protocol from NSView.

        * WebCoreSupport.subproj/WebBridge.m:
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        removed these methods:
        -control:didFailToFormatString:errorDescription:
        -control:didFailToValidatePartialString:errorDescription:
        -control:isValidObject:

2005-07-20  Adele Peterson  <adele@apple.com>

          Merged fix for:
          <rdar://problem/4125127> [WebKit] horizontal rulers don't render on Safari on web.apple.com

          * WebCoreSupport.subproj/WebImageData.m:
          (-[WebImageData _checkSolidColor:]):

2005-07-20  Adele Peterson  <adele@apple.com>

        Merged fix for :
        <rdar://problem/4118278> mail divide by zero navigating messages
  
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _extendGlyphToWidthMapToInclude:font:]):

2005-07-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele Peterson.
        
        - added -[WebView selectedFrame] to SPI (pending public API), needed for 4180958

        * WebView.subproj/WebView.m:
        (-[WebView selectedFrame]):
        new method, extracted from _selectedOrMainFrame
        (-[WebView _selectedOrMainFrame]):
        now calls extracted method
        
        * WebView.subproj/WebViewPrivate.h:
        add -selectedFrame to PendingPublic category

2005-07-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - cleaned up code related to dealing with the "selected frame"; fixes radar bugs 4118830 and 4118820

        * WebView.subproj/WebTextView.m:
        (-[WebTextView resignFirstResponder]):
        call deselectAll here instead of replicating its guts, just for clarity
        
        * WebView.subproj/WebViewInternal.h:
        eliminated category WebInternal; all of these methods were used only inside WebView.m, so I moved
        them into the existing category WebFileInternal that was declared and implemented in WebView.m
        
        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]):
        updated for name changes. Also, uses new _deselectFrame: to clear the selection if the found
        text is in a different frame.
        (-[WebView pasteboardTypesForSelection]):
        (-[WebView writeSelectionWithPasteboardTypes:toPasteboard:]):
        (-[WebView setSelectedDOMRange:affinity:]):
        (-[WebView selectedDOMRange]):
        (-[WebView selectionAffinity]):
        (-[WebView setTypingStyle:]):
        (-[WebView typingStyle]):
        (-[WebView styleDeclarationWithText:]):        
        (-[WebView replaceSelectionWithNode:]):
        (-[WebView replaceSelectionWithText:]):
        (-[WebView replaceSelectionWithMarkupString:]):
        (-[WebView replaceSelectionWithArchive:]):
        (-[WebView deleteSelection]):
        (-[WebView applyStyle:]):
        updated for name changes only
        
        (-[WebView _frameIsSelected:]):
        new method, returns YES if given frame has a non-zero-length selection
        (-[WebView _deselectFrame:]):
        new method, clears selection from given frame
        (-[WebView _findSelectedFrameStartingFromFrame:]):
        new method, recursive helper used by _findSelectedFrame
        (-[WebView _findSelectedFrame]):
        new method, finds first frame that returns YES for _frameIsSelected, or nil
        (-[WebView _debugCollectSelectedFramesIntoArray:startingFromFrame:]):
        new method, recursive helper used by _debugCheckForMultipleSelectedFrames
        (-[WebView _debugCheckForMultipleSelectedFrames]):
        new method for debugging, fires an assertion if there's more than one selected frame.
        (-[WebView _selectedOrMainFrame]):
        renamed from _frameForCurrentSelection, which was a misleading name since the returned
        frame does not necessarily have a selection (or even focus). Now checks for a selected
        but non-focused frame if the first responder is not in any frame. Also, moved in file
        from WebInternal category to WebFileInternal category.
        (-[WebView _bridgeForSelectedOrMainFrame]):
        renamed from _bridgeForCurrentSelection, which was a misleading name for the same
        reasons as _frameForCurrentSelection. Also, moved in file from WebInternal category to
        WebFileInternal category.
        (-[WebView _isLoading]):
        (-[WebView _frameViewAtWindowPoint:]):
        (-[WebView _bridgeAtPoint:]):
        just moved in file from WebInternal category to WebFileInternal category

2005-07-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - improve handling of plug-ins when the WebView or a superview is hidden with -[NSView setHidden]

        * Plugins.subproj/WebBaseNetscapePluginView.m: (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):
        Add "hidden" to the list of reasons to clip out all plug-in drawing.

2005-07-18  John Sullivan  <sullivan@apple.com>
        
        Written by Trey Matteson  <trey@usa.net>
        Reviewed by John Sullivan.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=4049
          scroll position not restored when going back/forward at ebay
        Fixed http://bugs.webkit.org/show_bug.cgi?id=4061
          When going back/forward to some pages, they redraw at top before restoring scroll position

        The short story is that attempting to restore the scroll position
        at the time when the first layout finishes addresses both of these
        issues.  An explanation of the underlying race condition is in
        a large comment near -_restoreScrollPosition.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge didFirstLayout]):  Pass through to WebFrame.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):  Get rid of attempt to
          restoreScrollPosition that never did anything because the
          docView was always 0x0 size at that point.
        (-[WebFrame _opened]):  Get rid of redundant call to restoreScrollPosition.
          The imminent call to layoutCompleted makes the same call.
        (-[WebFrame _didFirstLayout]):  Restore the scroll position on
          first layout, if we're doing a b/f nav.
        * WebView.subproj/WebFrameInternal.h:

2005-07-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        - fixed these bugs:
        <rdar://problem/4158121> context menu in PDF view should contain the selection-based items like Copy
        <rdar://problem/4184691> WebPDFView should conform to the WebDocumentElement protocol
        <rdar://problem/4184663> "Search in Spotlight" is present but dimmed in context menu for plain-text documents

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate contextMenuItemsForElement:defaultMenuItems:]):
        added ASSERT and comments

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _searchWithGoogleFromMenu:]):
        removed this method (now handled by WebView)
        (-[WebHTMLView _searchWithSpotlightFromMenu:]):
        ditto
        (-[WebHTMLView validateUserInterfaceItem:]):
        removed validation for removed items. The validation wasn't necessary anyway, since we only put these items
        in the menu in the case where they should be enabled.

        * WebView.subproj/WebPDFView.h:
        now conforms to WebDocumentElement protocol (which lets [WebView elementAtPoint:] work better)
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView copy:]):
        added, hands off to PDFView, needed to enable Copy in context menu
        (-[WebPDFView _pointIsInSelection:]):
        new method, checks whether given point is in the selected bounds
        (-[WebPDFView elementAtPoint:]):
        add WebElementIsSelectedKey to returned element
        (-[WebPDFView menuForEvent:]):
        use actual point instead of dummy placeholder, now that we have code that pays attention to the point

        * WebView.subproj/WebView.m:
        (-[WebView _searchWithGoogleFromMenu:]):
        moved here from WebHTMLView so it will work for any documentView that conforms to WebDocumentText.
        Rewrote slightly to be non-WebHTMLView-specific. (This menu item was always enabled in Safari because
        Safari replaces its action, but it would not have been always enabled in other WebKit clients, though
        it should have been.)
        (-[WebView _searchWithSpotlightFromMenu:]):
        moved here from WebHTMLView so it will work for any documentView that conforms to WebDocumentText.
        Rewrote slightly to be non-WebHTMLView-specific.

2005-07-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Richard Williamson.
        
        - fixed <rdar://problem/4184366> WebPDFView should conform to the WebDocumentSelection protocol

        * Misc.subproj/WebNSAttributedStringExtras.h: Added.
        * Misc.subproj/WebNSAttributedStringExtras.m: Added.
        (-[NSAttributedString _web_attributedStringByStrippingAttachmentCharacters]):
        New category on NSAttributedString, initially contains this one method that had been in WebHTMLView.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _writeSelectionWithPasteboardTypes:toPasteboard:cachedAttributedString:]):
        now uses _web_attributedStringByStrippingAttachmentCharacters
        
        * WebView.subproj/WebPDFView.h:
        now conforms to WebDocumentSelection protocol
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView selectionRect]):
        new, implementation of WebDocumentSelection protocol method
        (-[WebPDFView pasteboardTypesForSelection]):
        ditto
        (-[WebPDFView writeSelectionWithPasteboardTypes:toPasteboard:]):
        ditto

        * WebKit.pbproj/project.pbxproj:
        updated for new files

2005-07-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.
        
        - some refactoring cleanup in the selection/searching code

        * Misc.subproj/WebSearchableTextView.h:
        moved WebDocumentSelection protocol conformation to this class, was in subclass WebTextView
        * Misc.subproj/WebSearchableTextView.m:
        (-[WebSearchableTextView selectionRect]):
        new method (moved here from Safari) to return a single rect encompassing all selected text
        (-[WebSearchableTextView pasteboardTypesForSelection]):
        moved here from WebTextView
        (-[WebSearchableTextView writeSelectionWithPasteboardTypes:toPasteboard:]):
        ditto
        
        * WebView.subproj/WebDocumentInternal.h:
        moved WebDocumentSelection protocol out of here
        
        * WebView.subproj/WebDocumentPrivate.h:
        moved WebDocumentSelection protocol into here, added selectionRect method
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView selectionRect]):
        new method, calls existing bridge method formerly called by _selectionRect
        (-[WebHTMLView _selectionRect]):
        now calls [self selectionRect]. We can't just delete _selectionRect because it's used by Mail.
        
        * WebView.subproj/WebHTMLViewPrivate.h:
        removed _selectionRect since it's in WebDocumentSelection now
        
        * WebView.subproj/WebTextView.h:
        removed WebDocumentSelection from protocol list since it's in superclass now
        
        * WebView.subproj/WebTextView.m:
        removed old WebDocumentSelection methods because they are in superclass now

2005-07-15  Adele Peterson  <adele@apple.com>

        Written by Trey Matteson  <trey@usa.net>
        Reviewed by John Sullivan.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=3910 - REGRESSION: Replying "Cancel" to the form repost nag leaves wrong b/f cursor

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _resetBackForwardList]):  new helper method
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
          If the delegate bailed on the navigation, tell the main frame
          to reset the b/f cursor back to where it was before we started.

2005-07-15  John Sullivan  <sullivan@apple.com>

        Written by Trey Matteson
        Reviewed by me.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=4013
                text find doesn't wrap in PDF files

        This just works once WebPDFView implements the WebDocumentText protocol, which is
        mostly just a matter of forwarding the methods to PDFKit appropriately.

        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView supportsTextEncoding]):
        (-[WebPDFView string]):
        (-[WebPDFView attributedString]):
        (-[WebPDFView selectedString]):
        (-[WebPDFView selectedAttributedString]):
        (-[WebPDFView selectAll]):
        (-[WebPDFView deselectAll]):

2005-07-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker.
        
        - fixed <rdar://problem/4181884> Searching for text that overlaps selection works 
        differently in PDFView than in HTMLView

        * WebView.subproj/WebPDFView.m:
        (PDFSelectionsAreEqual):
        new function, stand-in for nonexistent -[PDFSelection isEqual:] since calling isEqual:
        on two identical PDFSelections returns NO
        (-[WebPDFView searchFor:direction:caseSensitive:wrap:]):
        Make search algorithm match that in WebCore: initially search inside selection, then check for the case
        where the found text exactly matches the previous selection, and search from past the selection if so.
        The implementation is slightly more complicated than it should be due to PDFKit API limitations (about
        which I added FIXMEs and filed bugs)

2005-07-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej Stachowiak.
        
        - fixed these bugs:
        <rdar://problem/4181875> Searching for text that overlaps selection works differently in WebTextView than in HTMLView
        <rdar://problem/3393678> Find not finding text in plain (non-HTML) if all text is selected

        * Misc.subproj/WebSearchableTextView.m:
        (-[NSString findString:selectedRange:options:wrap:]):
        Make search algorithm match that in WebCore: initially search inside selection, then check for the case
        where the found text exactly matches the previous selection, and search from past the selection if so.

2005-07-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave Hyatt.

        - WebKit part of fix for: 
        <rdar://problem/4181227> webpages incorrectly use standard instead of secondary highlighting in certain cases

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge formControlIsResigningFirstResponder:]):
        Implementation of new method defined in WebCore, passes call along to WebHTMLView
        
        * WebView.subproj/WebHTMLViewInternal.h:
        declare _formControlIsResigningFirstResponder: so bridge can call it

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusState]):
        just moved in file so it could be called from a different category
        (-[WebHTMLView _formControlIsResigningFirstResponder:]):
        new method, updates focus state

2005-07-14  John Sullivan  <sullivan@apple.com>

	added missing #import to fix build
	* WebView.subproj/WebPDFView.m

2005-07-14  Kevin Decker  <kdecker@apple.com>

        Reviewed by cblu

	Fixed: <rdar://problem/4122282> clicking a link in an PDF file opens the link with NSWorkspace without the usual security checks or WebView delegate control

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _safeLoadURL:]): added
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView initWithFrame:]):
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): prevents evilness with a call to _safeLoadURL
        * WebView.subproj/WebTextView.m:
        (-[WebTextView clickedOnLink:atIndex:]): factored calling out to the bridge, and instead call _safeLoadURL

2005-07-14  Vicki Murley  <vicki@apple.com>

        Reviewed by Kocienda.

	- WebKit part of fix for  <rdar://problem/4172380> [GENENTECH] window.opener 
	not available when child opened via target="_new"

	Add a setOpener function to the WebCore bridge, and call this function when opening
	new windows through Web Kit.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):

2005-07-13  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by John
        
        Rolling in changes necessary to build with newer versions of gcc 4.0

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem copyWithZone:]):
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:URL:title:archive:types:]):
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_URLWithLowercasedScheme]):
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge MIMETypeForPath:]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithBytes:length:MIMEType:]):
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _webDataRequestForData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _styleFromFontAttributes:]):
        * WebView.subproj/WebView.m:
        (-[WebView _writeImageElement:withPasteboardTypes:toPasteboard:]):
        (-[WebView mainFrameTitle]):

2005-07-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej Stachowiak.

        - cleaned up Find-related experimental code that I checked in a while back

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:]):
        remove variant of this method that had findInSelection flag; this method is now
        the same as it was on Tiger.
        
        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]):
        ditto

2005-07-12  Geoffrey Garen  <ggaren@apple.com>

        -rolled in patch by opendarwin.org@mitzpettel.com 
        for http://bugs.webkit.org/show_bug.cgi?id=3435
        Parentheses are backwards in Hebrew text (no bidi mirroring?)
        
        Reviewed by mjs.

        Layout test added to WebCore.

        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _initializeATSUStyle]):
        (applyMirroringToRun):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer _ATSU_drawRun:style:geometry:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):

2005-07-12  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris Blumenberg

        * WebCoreSupport.subproj/WebBridge.m: Removed some glue that allowed one
        of two unicode (TEC or ICU ) to be chosen at runtime. I just added this
        dual support yesterday, and while Maciej and I agreed that it was good
        to land in the tree in case we run into problems in the near future, we
        also agreed that cutting over to using ICU full time right now is
        probably the best way to find bugs.

2005-07-11  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        * WebCoreSupport.subproj/WebBridge.m:
        (+[WebBridge setTextConversionMethod:]): New method to support switching text conversion method.
        (+[WebBridge textConversionMethod]): Returns current text conversion method.

2005-07-11  Kevin Decker  <kdecker@apple.com>

        Reviewed by cblu and mjs.

	Fixed: <rdar://problem/4099552> REGRESSION: Safari 1.3 Netscape API NPN_PostURL[Notify] no longer allows manual headers
	
	Most plugins (flash) send 2 CRFL's between the header and body of their POST requests, while the adboe plugin sends two LF's. This caused us to send custom headers as part of the actual POST data itself, and correspondently, would skew Content-Length.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[NSData _web_locationAfterFirstBlankLine]): Look for two LF's as well

2005-07-09  Maciej Stachowiak  <mjs@apple.com>

        - back out my revent page cache changes, turns out they cause a
	major performance regression on PLT

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _purgePageCache]):

2005-07-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by hyatt.

	Replace int with unsigned, to avoid going into a huge loop when
	back list count is 0.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _purgePageCache]):

2005-07-09  Maciej Stachowiak  <mjs@apple.com>

        - fixed broken Development build

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _purgePageCache]):

2005-07-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by hyatt.

	- fix page cache purging logic; this gets rid of a bug where the
	page cache would grow without bound if the oldest page cache item
	was the snapback item, and changed the rule a bit so page cache
	items farther back than the max size get purged, even if fewer
	than the max size are in current use.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _purgePageCache]):

2005-07-08  Geoffrey Garen  <ggaren@apple.com>

        Rolled in patch by opendarwin.org@mitzpettel.com

        -fixes http://bugs.webkit.org/show_bug.cgi?id=3818
        Fallback font doesn't have requested weight in ATSUI-rendered text

        (See WebCore Changelog for layout test)

        Reviewed by mjs.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _createATSUTextLayoutForRun:style:]):

2005-07-05  Adele Peterson  <adele@apple.com>

       Rolling out changes for <rdar://problem/3792529> REGRESSION (Mail): Tabs do not work the way they did in Panther (especially useful in plain text mail)
       since it caused a 2% performance regression.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isSpace):
        (-[WebTextRenderer _CG_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startPosition:numGlyphs:]):
        (-[WebTextRenderer _extendCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        (initializeCharacterWidthIterator):
        (widthForNextCharacter):

2005-07-05  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.
        
        - fixed <rdar://problem/4158230> Zoom In/Zoom Out in PDF context menu don't update window's notion of text size

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _menuItemsFromPDFKitForEvent:]):
        Redirect Actual Size, Zoom In, and Zoom Out context menu items so that they behave exactly like Make Text Standard Size,
        Make Text Larger, and Make Text Smaller.

2005-07-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - fixed http://bugs.webkit.org/show_bug.cgi?id=3711: Displayed PDF have limited options in contextual menu
        
        This was a problem with using Tiger's version of Safari with tip of tree WebKit.

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _anyPDFTagsFoundInMenu:]):
        new method, returns YES if the menu contains any items with any of the new PDF-related tags.
        (-[WebPDFView menuForEvent:]):
        If the executable was linked on Tiger or older (but it will never be older, since this code is
        new to Tiger), force all of the PDF-related items into the menu if none of them were there 
        after processing by the delegate.

2005-06-30  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3774>
          do renaming so that loaders are called "loader", not "client" or "delegate"

        * Misc.subproj/WebIconLoader.h:
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]):
        (-[WebNetscapePluginStream start]):
        (-[WebNetscapePlugInStreamLoader didFinishLoading]):
        (-[WebNetscapePlugInStreamLoader didFailWithError:]):
        (-[WebNetscapePlugInStreamLoader cancelWithError:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:customHeaders:]):
        (-[WebBridge startLoadingResource:withURL:customHeaders:postData:]):
        (-[WebBridge canRunModalNow]):
        * WebCoreSupport.subproj/WebSubresourceClient.h: Removed.
        * WebCoreSupport.subproj/WebSubresourceClient.m: Removed.
        * WebCoreSupport.subproj/WebSubresourceLoader.h:
        * WebCoreSupport.subproj/WebSubresourceLoader.m:
        (-[WebSubresourceLoader initWithLoader:dataSource:]):
        (-[WebSubresourceLoader dealloc]):
        (+[WebSubresourceLoader startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]):
        (+[WebSubresourceLoader startLoadingResource:withURL:customHeaders:referrer:forDataSource:]):
        (+[WebSubresourceLoader startLoadingResource:withURL:customHeaders:postData:referrer:forDataSource:]):
        (-[WebSubresourceLoader didReceiveResponse:]):
        (-[WebSubresourceLoader didReceiveData:lengthReceived:]):
        (-[WebSubresourceLoader didFinishLoading]):
        (-[WebSubresourceLoader didFailWithError:]):
        (-[WebSubresourceLoader cancel]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.h: Removed.
        * WebView.subproj/WebBaseResourceHandleDelegate.m: Removed.
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]):
        (-[WebDataSource _setLoading:]):
        (-[WebDataSource _updateLoading]):
        (-[WebDataSource _setPrimaryLoadComplete:]):
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _addSubresourceLoader:]):
        (-[WebDataSource _removeSubresourceLoader:]):
        (-[WebDataSource _addPlugInStreamLoader:]):
        (-[WebDataSource _removePlugInStreamLoader:]):
        (-[WebDataSource _stopLoadingInternal]):
        (-[WebDataSource _defersCallbacksChanged]):
        (-[WebDataSource _stopLoadingWithError:]):
        (-[WebDataSource data]):
        (-[WebDataSource isLoading]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebLoader.h:
        * WebView.subproj/WebLoader.m:
        * WebView.subproj/WebMainResourceClient.h: Removed.
        * WebView.subproj/WebMainResourceClient.m: Removed.
        * WebView.subproj/WebMainResourceLoader.h:
        * WebView.subproj/WebMainResourceLoader.m:
        (-[WebMainResourceLoader didReceiveResponse:]):

2005-06-29  David Harrison  <harrison@apple.com>

        Reviewed by Dave Hyatt (rendering) and Maciej (editing).

        Test cases added:  Coming soon.  Will include with next round of changes for this bug.

        This is the first checkin for...
        
        <rdar://problem/3792529> REGRESSION (Mail): Tabs do not work the way they did in Panther (especially useful in plain text mail)
        
        Basic strategy is to put tabs into spans with white-space:pre style, and
        render them with tabs stops every 8th space, where the space width and
        the left margin are those of the enclosing block.
        
        What's left is to switch to implement white-space:pre-wrap so
        that we can coalesce consecutive tabs while maintaining proper
        line breaking.  That will keep the markup smaller.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isSpace):
        (-[WebTextRenderer _CG_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startPosition:numGlyphs:]):
        (-[WebTextRenderer _extendCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        (initializeCharacterWidthIterator):
        (widthForNextCharacter):

2005-06-29  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin.
        
        - deleted some never-used stub code

        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2005-06-27  Justin Garcia  <justin.garcia@apple.com>

        Patch by Anders Carlsson <andersca@mac.com>

        Reviewed by Darin.

        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=3489>
        WebView's setSelectedDOMRange doesn't not implement clearing the selection as described in the WebView documentation:
        <http://developer.apple.com/documentation/Cocoa/Reference/WebKit/ObjC_classic/Classes/WebView.html>
	
        * WebView.subproj/WebView.m:
        (-[WebView setSelectedDOMRange:affinity:]):
        If range is nil, call deselectText.

2005-06-24  Justin Garcia  <justin.garcia@apple.com>

        Patch contributed by Duncan Wilcox <duncan@mclink.it>

        Reviewed by Darin

        - Fixed <http://bugs.webkit.org/show_bug.cgi?id=3535>
            Spelling suggestions in the context menu don't call the should* delegate methods

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _changeSpellingFromMenu:]):
        give delegate's webView:shouldInsertText:replacingDOMRange:givenAction: a chance
        to prevent replacing of selected text

2005-06-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.
        
        - fixed <rdar://problem/3764645> please add a way to allow WebKit clients to override the WebPDFView context menu

        * PublicHeaderChangesFromTiger.txt: Added.
        New file to keep track of changes made to public headers that haven't been through API review yet.
        Initially lists the WebMenuItem enum tags added to WebUIDelegate.h as part of this change.
        
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate appendDefaultItems:toArray:]):
        new method, handles initial separator
        (-[WebDefaultUIDelegate contextMenuItemsForElement:defaultMenuItems:]):
        now has defaultMenuItems: parameter. Any menu items in this array are appended at the end of
        the standard set.
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:defaultMenuItems:]):
        ditto
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        This had a defaultMenuItems parameter before but it was always nil. Now it passes the defaultMenuItems
        parameter on to the two methods that construct lists (one for editing, the other for viewing). Also
        tweaked variable name and type for clarity.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView menuForEvent:]):
        passes nil for new defaultItems parameter of _menuForElement:
        
        * WebView.subproj/WebImageView.m:
        (-[WebImageView menuForEvent:]):
        ditto
        
        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]):
        ditto

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView elementAtPoint:]):
        new method to create the element dictionary needed for _menuForElement:defaultItems:. Only supplies the
        webFrame at this point.
        (-[WebPDFView _menuItemsFromPDFKitForEvent:]):
        new method to return copies of the menu items that PDFKit would include in the context menu, with
        WebKit tags applied
        (-[WebPDFView menuForEvent:]):
        now calls standard WebKit context menu mechanism, so clients' delegates can modify the context menu as
        desired. The initial set of items are the ones WebKit was already displaying for PDF context menus.
        
        * WebView.subproj/WebUIDelegate.h:
        added enum values for the menu items in the PDF context menu
        
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _menuForElement:defaultItems:]):
        Added the defaultItems: parameter to this method, which is then passed along to WebDefaultUIDelegate.
        All callers pass nil except for WebPDFView, at least for now.

2005-06-22  Darin Adler  <darin@apple.com>

        Change by Mitz Pettel.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3618>
          RTL runs drawn by CG not reversed properly

        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer _CG_drawRun:style:geometry:]):
        Fix off-by-one mistake in order-swapping loops.

2005-06-22  Darin Adler  <darin@apple.com>

        Change by Michael Gaiman.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3436>
          Missing implementation of -[NSData(WebNSDateExtras) _webkit_parseRFC822HeaderFields]

        * Misc.subproj/WebNSDataExtras.h: Fixed name of category say NSData, not NSDate.
        * Misc.subproj/WebNSDataExtras.m: (-[NSData _webkit_parseRFC822HeaderFields]): Fixed method name.

2005-06-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Vicki Murley
        
        - fixed assertion failure Vicki ran into

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _forgetIconForIconURLString:]):
        Handle the case where there are no associated page URLs for the icon URL

2005-06-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.
        
        - fixed <rdar://problem/4155182> icon database retain counts can be incorrect after removing all icons
        
        Replaced the concept of "future retain count per page URL" with a simpler concept of "retain count per
        page URL", which is maintained even after the icon is actually loaded (unlike the future retain count).
        The total retain count for an icon is now the sum of the retain counts per page URL along with any retain
        count not associated with a page URL -- this is still needed for some internal housekeeping purposes.

        * Misc.subproj/WebIconDatabasePrivate.h:
        renamed iconURLToURLs -> iconURLToPageURLs for clarity
        renamed URLToIconURL -> pageURLToIconURL for clarity
        renamed futureURLToRetainCount -> pageURLToRetainCount (there's no more "future" aspect)
        renamed iconURLToRetainCount -> iconURLToExtraRetainCount (it now maintains only some of the retain count)
        
        * Misc.subproj/WebIconDatabase.m:
        (+[WebIconDatabase sharedIconDatabase]):
        updated for name changes only
        (-[WebIconDatabase init]):
        ditto
        (-[WebIconDatabase iconForURL:withSize:cache:]):
        ditto
        (-[WebIconDatabase iconURLForURL:]):
        ditto
        (-[WebIconDatabase retainIconForURL:]):
        just bump the retain count in pageURLToRetainCount, instead of behaving differently based on whether 
        an icon had been loaded for this URL; this let me delete the internal method _retainFutureIconForURL:
        (-[WebIconDatabase releaseIconForURL:]):
        decrement the retain count in pageURLToRetainCount, then handle the case where the retain count for 
        this page has gone to zero. I deleted the internal method _releaseFutureIconForURL: formerly called here.
        (-[WebIconDatabase removeAllIcons]):
        remove all the code that dealt with retain counts; this operation no longer affects retain counts
        (-[WebIconDatabase _setIconURL:forURL:]):
        remove the code that consolidated multiple retain counts for different page URLs into a single retain 
        count; the multiple retain counts are now maintained even after the icon is loaded
        (-[WebIconDatabase _clearDictionaries]):
        updated for name changes only
        (-[WebIconDatabase _loadIconDictionaries]):
        ditto
        (-[WebIconDatabase _updateFileDatabase]):
        ditto
        (-[WebIconDatabase _totalRetainCountForIconURLString:]):
        new method, sums the retain counts associated with specific page URLs and the extra retain count
        not associated with specific page URLs
        (-[WebIconDatabase _retainIconForIconURLString:]):
        updated for name changes
        (-[WebIconDatabase _forgetIconForIconURLString:]):
        no longer affects retain counts at all; this is up to callers
        (-[WebIconDatabase _releaseIconForIconURLString:]):
        this now distinguishes the case where the retain count not associated with any page URLs hits 
        zero from the case where the total retain count hits zero, and handles both

2005-06-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris Blumenberg.
        
        - added support for emptying the icon database

        * Misc.subproj/WebIconDatabase.h: just fixed a typo
        * Misc.subproj/WebIconDatabasePrivate.h:
        added WebPendingPublic category with method removeAllIcons, and
        declared WebIconDatabaseDidRemoveAllIconsNotification string.
        
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase removeAllIcons]):
        new method, removes all known icons from memory and disk. There's one loose end,
        covered by radar bug 4155182, where it's possible for the icon database's retain
        counts to get off after this operation. I plan to fix this next.
        (-[WebIconDatabase _setIconURL:forURL:]):
        just fixed some extra whitespace
        (-[WebIconDatabase _forgetIconForIconURLString:]):
        new method, extracted from _releaseIconForIconURLString
        (-[WebIconDatabase _releaseIconForIconURLString:]):
        now calls extracted method

        * WebKit.exp:
        added _WebIconDatabaseDidRemoveAllIconsNotification

2005-06-19  Darin Adler  <darin@apple.com>

	Changes by Mitz Pettel
        Reviewed by me.
        
        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3466>
          ATSUI text doesn't render at coordinates greater than 32K

        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer _ATSU_drawRun:style:geometry:]):
        Translate the matrix of the CGContext instead of passing the appropriate coordinates to ATSU.

2005-06-17  Richard Williamson   <rjw@apple.com>

	Changes by Mitz Pettel
        Reviewed by Richard Williamson.

	Fixed http://bugs.webkit.org/show_bug.cgi?id=3545

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (reverseCharactersInRun):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):

2005-06-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.

        - fixed <rdar://problem/4151001> Reloading javascript-spawned window with no URL erases its contents

        * WebView.subproj/WebFrame.m:
        (-[WebFrame reload]):
        do nothing if URL is zero-length

2005-06-14  John Sullivan  <sullivan@apple.com>

        Changes by Devin Lane.
        Reviewed by me.

        - fixed <rdar://problem/3766909> PDF viewing could use a zoom control other than the one in the context menu

        * WebView.subproj/WebPDFView.h:
        now implements protocol _web_WebDocumentTextSizing
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView _updateScalingToReflectTextSize]):
        new method, sets the PDF scaling from the text size multiplier
        (-[WebPDFView setDataSource:]):
        call _updateScalingToReflectTextSize
        (-[WebPDFView _web_textSizeMultiplierChanged]):
        implementation of protocol _web_WebDocumentTextSizing, calls _updateScalingToReflectTextSize

2005-06-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave Harrison.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _delayedEndPrintMode:]):
        After discussing this with Dave, I made this method both more debugger-friendly with asserts for
        the cases we don't think could ever happen, and more paranoid by handling these cases in deployment
        builds.

2005-06-14  Darin Adler  <darin@apple.com>

        - fixed build for Xcode 2.1

        * WebKit.pbproj/project.pbxproj: Use BUILT_PRODUCTS_DIR instead of SYMROOT to search for the
        WebKitSystemInterface.h file. We could re-jigger this again later, but for now this is consistent
        with both the .a file's location and where build-webkit puts the file.

2005-06-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave Harrison and Maciej.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _endPrintMode]):
        new method, extracted from identical code in beginDocument and endDocument. This method must be called
        once to counterbalance the code called from knowsPageRange that turns on "printing mode".
        (-[WebHTMLView _delayedEndPrintMode:]):
        new method, called from "perform after delay". Checks whether the same print operation is still underway
        and, if so, delays further. Otherwise calls _endPrintMode directly.
        (-[WebHTMLView knowsPageRange:]):
        after turning on "printing mode", queue up a delayed call to _delayedEndPrintMode:. If there's an early
        error in the print mechanism such that beginDocument is never called, this will cleanly end "printing
        mode" and make the webview usable again.
        (-[WebHTMLView beginDocument]):
        cancel any delayed call to _delayedEndPrintMode:. If we get this far along in printing, then we don't need
        the failsafe call to _delayedEndPrintMode: that was set up in knowsPageRange:. Also, call extracted method.
        (-[WebHTMLView endDocument]):
        call extracted method

2005-06-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris Blumenberg and Adele.

	- better fix for <rdar://problem/4142247> REGRESSION: List to browse widgets at Apple website failed. Closing tab afterwards caused Safari crash
	http://bugs.webkit.org/show_bug.cgi?id=3445

	With this change and the matching WebKit change we'll still stop loading the moment you click
	a download link, but the unload event and detaching of event handlers will not happen early any more.
	
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _stopLoadingInternal]): call stopLoading on bridge instead of closeURL.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]): Revert previous attempt at fix.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): ditto
        (-[WebFrame stopLoading]): ditto

2005-06-13  Chris Petersen  <cpetersen@apple.com>

        Changes by Darin.
        Reviewed by me.

        - fixed problems building deployment due to recent init change

        * WebView.subproj/WebArchive.m: (-[WebArchive initWithCoder:]):
        Put the [super init] call and check for nil outside the exception handler.
        * WebView.subproj/WebResource.m: (-[WebResource initWithCoder:]): Ditto.

2005-06-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/4141569> REGRESSION (412+): printing fails on any page with images, and for standalone images
          also <http://bugs.webkit.org/show_bug.cgi?id=3318>

        * WebCoreSupport.subproj/WebImageData.m: Got rid of use of tabs instead of spaces throughout the file.
        (-[WebImageData _checkSolidColor:]): Wrap use of NSGraphicsContext with an autorelease pool.
        (-[WebImageData _fillSolidColorInRect:compositeOperation:context:]): Ditto.
        (-[WebImageData tileInRect:fromPoint:context:]): Ditto.
        (-[WebImageData _PDFDrawFromRect:toRect:operation:alpha:flipped:context:]): Ditto.

2005-06-12  Darin Adler  <darin@apple.com>

        Changes by Nick Zitzmann.
        Reviewed by me.

        - fixed init methods that don't handle return values from the init methods they call

        * WebView.subproj/WebArchive.m:
        (-[WebArchive init]): Use value returned by init, check it for nil too.
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]): Ditto.
        (-[WebArchive _initWithPropertyList:]): Ditto.
        (-[WebArchive initWithCoder:]): Ditto.
        * WebView.subproj/WebClipView.m:
        (-[WebClipView initWithFrame:]): Ditto.
        * WebView.subproj/WebDebugDOMNode.m:
        (-[WebDebugDOMNode initWithName:value:source:children:]): Ditto.
        * WebView.subproj/WebFrame.m:
        (-[WebFormState initWithForm:values:sourceFrame:]): Ditto.
        (-[WebFrame initWithName:webFrameView:webView:]): Ditto.
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView initWithFrame:]): Ditto.
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation init]): Ditto.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView initWithFrame:]): Ditto.
        (-[WebTextCompleteController initWithHTMLView:]): Ditto.
        * WebView.subproj/WebImageView.m:
        (-[WebImageView initWithFrame:]): Ditto.
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences initWithIdentifier:]): Ditto.
        * WebView.subproj/WebRenderNode.m:
        (-[WebRenderNode initWithName:position:rect:view:children:]): Ditto.
        * WebView.subproj/WebResource.m:
        (-[WebResource init]): Ditto.
        (-[WebResource initWithCoder:]): Ditto.
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate init]): Call super init.
        (-[_WebSafeForwarder initWithTarget:defaultTarget:templateClass:]): Use value returned by init, check it for nil too.
        (-[WebView initWithFrame:]): Ditto.

2005-06-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris Blumenberg.

	- fixed <rdar://problem/4142247> REGRESSION: List to browse widgets at Apple website failed. Closing tab afterwards caused Safari crash
	http://bugs.webkit.org/show_bug.cgi?id=3445
	
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]): Stop loading the non-provisional data
	source before swapping in the provisional.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): Stop only
	the provisional load here, we would not want to stop loading if this navigation
	later turns into a download or is cancelled before being committed.
        (-[WebFrame stopLoading]): Factored a bit.
        (-[WebFrame _cancelProvisionalLoad]): New method to stop only provisional load,
	and cancel any pending policy deicions.
        (-[WebFrame _stopNonProvisionalLoadOnly]): New mthod that stops only the main
	load.

2005-06-10  John Sullivan  <sullivan@apple.com>

        reviewed by Dave Harrison (first & second drafts) and Darin Adler (third draft)

        - WebKit part of fix for 
        <rdar://problem/4145214> REGRESSION (412+): Can't drag URLs from the location bar

        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard initialize]):
        Reinstate variation of old code that uses CreatePasteboardFlavorTypeName to set up our new pasteboard types.
        The newfangled way didn't work.

2005-06-07  Darin Adler  <darin@apple.com>

        Change by Mark Rowe <opendarwin.org@bdash.net.nz>.
        Reviewed by me.

        - fixed the WebKit half of build failure with spaces in the path
          http://bugs.webkit.org/show_bug.cgi?id=3291

        * WebKit.pbproj/project.pbxproj: Quote DERIVED_FILE_DIR when it is substituted
        into FRAMEWORK_SEARCH_PATHS, and SYMROOT when into HEADER_SEARCH_PATHS.

2005-06-06  Darin Adler  <darin@apple.com>

        * Info.plist: Bumped version to 412+. For some reason it was set to 312.1!

2005-06-05  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fixed build that I broke with the license change (some includes of WebException were still around)

        * WebKit.pbproj/project.pbxproj: Removed references to WebException.h/m.
        * WebView.subproj/WebDataSource.m: Removed include of WebException.h.
        * WebView.subproj/WebHTMLView.m: Ditto.
        * WebView.subproj/WebView.m: Ditto.

        - fixed build under gcc 4.0 (some code moved here from Foundation had warnings)

        * Misc.subproj/WebNSDataExtras.m:
        (-[NSString _web_capitalizeRFC822HeaderFieldName]): Use char instead of UInt8.
        (-[NSData _webkit_guessedMIMEType]):  Use char instead of UInt8, and take out now-
        unneeded type casts.

2005-06-05  Darin Adler  <darin@apple.com>

        - added appropriate license headers to most files and updated copyright to reflect publication dates

        * LICENSE: Added.
        * <lots of files>: Added license header.

        * WebKit.pbproj/project.pbxproj: Removed references to NP_objc.h.

        * API-Issues.rtf: Removed.
        * Misc.subproj/WebException.h: Removed.
        * Misc.subproj/WebException.m: Removed.
        * Plugins.subproj/NP_objc.h: Removed.

2005-06-01  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - WebKit part of fix for <rdar://problem/3166090> add IE JavaScript extension window.showModalDialog

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createModalDialogWithURL:]): Added. Calls the UI delegate, falling back to the generic
        "create WebView" method.
        (-[WebBridge canRunModal]): Added. Checks the UI delegate to see if it implements runModal.
        (-[WebBridge canRunModalNow]): Added. Checks the "inConnectionCallback" field so we can prevent
        deadlock since we can't do any I/O while inside a connection callback until this aspect of NSURLConnection
        is changed.
        (-[WebBridge runModal]): Added. Sets "defersCallbacks" on all other web views in the group, then
        calls runModal on the UI delegate.

        * WebView.subproj/WebBaseResourceHandleDelegate.h: Added inConnectionCallback class method.
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]): Bump count and then
        decrement count so we can tell if we are in a callback.
        (-[WebBaseResourceHandleDelegate connection:didReceiveAuthenticationChallenge:]): Ditto.
        (-[WebBaseResourceHandleDelegate connection:didCancelAuthenticationChallenge:]): Ditto.
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]): Ditto.
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:lengthReceived:]): Ditto.
        (-[WebBaseResourceHandleDelegate connection:willStopBufferingData:]): Ditto.
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]): Ditto.
        (-[WebBaseResourceHandleDelegate connection:didFailWithError:]): Ditto.
        (-[WebBaseResourceHandleDelegate connection:willCacheResponse:]): Ditto.
        (+[WebBaseResourceHandleDelegate inConnectionCallback]): Added. Return YES if count is not 0.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]): Changed to use the method without the connection: parameter
        in the base class, since we no longer are overriding the connection: version.
        (-[WebMainResourceClient willSendRequest:redirectResponse:]): Change to override the version without
        the connection prefix/parameter; now only the base class overrides the actual connection delegate methods.
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Ditto.
        (-[WebMainResourceClient didReceiveResponse:]): Ditto.
        (-[WebMainResourceClient didReceiveData:lengthReceived:]): Ditto.
        (-[WebMainResourceClient didFinishLoading]): Ditto.
        (-[WebMainResourceClient didFailWithError:]): Ditto.
        (-[WebMainResourceClient loadWithRequestNow:]): Call the method without the connection parameter.

        * WebView.subproj/WebUIDelegatePrivate.h: Added new SPI here that WebBrowser implements.

2005-05-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fix build failure from when I removed WebCoreUnicode

        * WebCoreSupport.subproj/WebTextRenderer.m: Removed import of WebUnicode.h that I missed.
        (-[WebTextRenderer _convertUnicodeCharacters:length:toGlyphs:]): Switch from our own macros
        to the ICU macros for surrogate pairs.
        (widthForNextCharacter): Ditto.

2005-05-26  David Harrison  <harrison@apple.com>

        <rdar://problem/4120518> Mail: control-T in an empty message crashes mail

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge issueTransposeCommand]):
        New, to support transpose in JS.

2005-05-26  Darin Adler  <darin@apple.com>

        Reviewed by Richard and Dave Harrison.

        - eliminate WebCoreUnicode and use ICU directly instead

        * Misc.subproj/WebKitNSStringExtras.m: (canUseFastRenderer): Use u_charDirection directly.
        * WebCoreSupport.subproj/WebTextRenderer.m: Removed import of <WebCore/WebCoreUnicode.h>.
        * WebView.subproj/WebHTMLView.m: (+[WebHTMLView initialize]): Removed call to WebKitInitializeUnicode.

        * Misc.subproj/WebUnicode.h: Removed.
        * Misc.subproj/WebUnicode.m: Removed.
        * Misc.subproj/WebUnicodeTables.m: Removed.

        * WebKit.pbproj/project.pbxproj: Removed files.

2005-05-24  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4097289> -[WebView elementAtPoint:] failing when WebView is nested and offset

	Code to determine the correct frame under the window point was
	converting the point incorrectly.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView _frameViewAtWindowPoint:]):

2005-05-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin.
        
        - WebKit part of <rdar://problem/4125783> WebKit needs a way to control whether textareas are resizable

        * WebView.subproj/WebPreferencesPrivate.h:
        added private-for-now getter and setter for new preference
        * WebView.subproj/WebPreferenceKeysPrivate.h:
        added private preference key controlling whether textareas are resizable
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        initial value of new preference is NO, so other clients' behavior doesn't change
        (-[WebPreferences textAreasAreResizable]):
        new getter
        (-[WebPreferences setTextAreasAreResizable:]):
        new setter
        
        * WebView.subproj/WebView.m:
        (-[WebView _updateWebCoreSettingsFromPreferences:]):
        update this new setting in WebCore

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for these changes

2005-05-23  Chris Blumenberg  <cblu@apple.com>

	Changed type for identifier parameter in WebResourceLoadDelegate-related calls to id from NSString.

        Reviewed by kevin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:data:]):
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]):
        (-[WebFrame _requestFromDelegateForRequest:identifier:error:]):
        (-[WebFrame _sendRemainingDelegateMessagesWithIdentifier:response:length:error:]):
        (-[WebFrame _saveResourceAndSendRemainingDelegateMessagesWithRequest:identifier:response:data:error:]):
        * WebView.subproj/WebFrameInternal.h:

2005-05-20  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/4098786> sync. XMLHttpRequest works w/o AllowNetworkAccess key because load delegate is not consulted

	Synchronous loads did not cause the willSendRequest method on the resource load delegate to be called. This is the method that Dashboard uses to enforce AllowNetworkAccess and this must be called to avoid exploits.

        Reviewed by sullivan.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:data:]): call [WebFrame _requestFromDelegateForRequest:identifier:error:] then 
	[WebFrame _saveResourceAndSendRemainingDelegateMessagesWithRequest:identifier:response:data:error:] so synthetic resource load delegate 
	methods are called and the data is saved as a WebResource for resources in the WebCore cache.

        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]): call [WebFrame _requestFromDelegateForRequest:identifier:error:],
	respect its result, do the load and then call [WebFrame _saveResourceAndSendRemainingDelegateMessagesWithRequest:identifier:response:data:error:] 
	for synchronous loads

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]): call [WebFrame _requestFromDelegateForRequest:identifier:error:] then 
	[WebFrame _sendRemainingDelegateMessagesWithIdentifier:response:length:error:] so synthetic resource load delegate methods are called 
	for subresrources in the page cache
        
	(-[WebFrame _requestFromDelegateForRequest:identifier:error:]): new, was part of the removed _sendResourceLoadDelegateMessagesForURL:::
	This method calls identifierForInitialRequest and willSendRequest.

        (-[WebFrame _sendRemainingDelegateMessagesWithIdentifier:response:length:error:]): new, was part of the removed _sendResourceLoadDelegateMessagesForURL:::
	This method calls the remaining resource load delegate messages.

        (-[WebFrame _saveResourceAndSendRemainingDelegateMessagesWithRequest:identifier:response:data:error:]): new, saves the resource and calls
	[WebFrame _sendRemainingDelegateMessagesWithIdentifier:response:length:error:]

        * WebView.subproj/WebFrameInternal.h:

2005-05-17  Chris Blumenberg  <cblu@apple.com>
	
	Fixed: <rdar://problem/4119282> clicking a link in an RTF file opens the link with NSWorkspace without the usual security checks or WebView delegate control

        Reviewed by mjs.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]): pass the passed referrer to canLoadURL::: not [self referrer]
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): ditto
        * WebView.subproj/WebTextView.m:
        (-[WebTextView clickedOnLink:atIndex:]): call the loadURL bridge method so that security checks are made, command/option clicks work, policy delegate is consulted etc.

2005-05-17  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/4120255> web archives on remote servers can be viewed directly (with major security issues); should download instead

        Reviewed by mjs.

        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): if the WebKit client has chosen to "use" a remote web archive, stop the load with an error

2005-05-16  Darin Adler  <darin@apple.com>

        - attempt to get things building under "Saffron" development tools

        * WebKit.pbproj/project.pbxproj: Use BUILT_PRODUCTS_DIR instead of SYMROOT.

2005-05-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin.
        
        - fixed <rdar://problem/4093306> Safari crashes if Esc key is held down during series 
        of authentication sheets

        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel cancel:]):
        retain and autorelease self. This is a workaround for an AppKit key-handling issue, which I wrote up as:
        <rdar://problem/4118422> Key-down events can be sent to a closed window if a key is kept pressed down

2005-05-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin.

        - rolled in changes from experimental-ui-branch to support resizable textareas
        and find-as-you-type and confirming unsubmitted form changes. The files/functions 
        modified are listed just below. After that are the ChangeLog comments from the branch.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge textDidChange:]):
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate textDidChange:inFrame:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView maintainsInactiveSelection]):
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:]):
        (-[WebHTMLView _searchFor:direction:caseSensitive:wrap:findInSelection:]):
        * WebView.subproj/WebView.m:
        (-[WebView _searchFor:direction:caseSensitive:wrap:findInSelection:]):
        (-[WebView searchFor:direction:caseSensitive:wrap:]):
        (-[WebView makeTextStandardSize:]):
        (-[WebView maintainsInactiveSelection]):
        * WebView.subproj/WebViewPrivate.h:
        
        2005-04-18  John Sullivan  <sullivan@apple.com>

                WebKit support for notifying a form delegate when a
                textarea's contents have changed (as opposed to a 
                textfield, which was already handled).

                Reviewed by Maciej.

                * WebView.subproj/WebFormDelegate.h:
                * WebView.subproj/WebFormDelegate.m:
                (-[WebFormDelegate textDidChange:inFrame:]):
                new form delegate method

                * WebCoreSupport.subproj/WebBridge.m:
                (-[WebBridge textDidChange:]):
                new method, calls through to form delegate
                
        2005-04-11  John Sullivan  <sullivan@apple.com>

                Fixed inability to wrap around in Find in Page 

                * WebView.subproj/WebView.m:
                (-[WebView _searchFor:direction:caseSensitive:wrap:findInSelection:]):
                changed wrapFlag from NO to YES on two lines (copy/paste error)

        2005-04-07  John Sullivan  <sullivan@apple.com>

                WebKit support for find-as-you-type. Needed an additional parameter on
                a method from WebDocumentSearching protocol. Since that's a public protocol, 
                I couldn't just add the parameter. For now I hacked it with an undeclared
                internal method that's discovered via respondsToSelector. Probably the right
                long-term approach is to deprecate the WebDocumentSearching protocol and introduce
                a replacement that has a more flexible set of parameters for possible future
                expansion.

                Reviewed by Dave Hyatt.

                * WebView.subproj/WebHTMLView.m:
                (-[WebHTMLView searchFor:direction:caseSensitive:wrap:]):
                now calls new one-more-parameter version passing NO for new parameter to match old behavior
                (-[WebHTMLView _searchFor:direction:caseSensitive:wrap:findInSelection:]):
                new method, adds findInSelection parameter and passes it through to bridge
                 
                * WebView.subproj/WebView.m:
                (-[WebView searchFor:direction:caseSensitive:wrap:]):
                now calls new one-more-parameter version passing NO for new parameter to match old behavior
                (-[WebView _searchFor:direction:caseSensitive:wrap:findInSelection:]):
                new method, adds findInSelection parameter and passes it through

        2005-04-07  John Sullivan  <sullivan@apple.com>

                WebKit support to allow clients to control whether the selection is still
                drawn when the first responder is elsewhere. Formerly this was hardwired
                to be true only when -[WebView isEditable] was true.

                Reviewed by Darin.

                * WebView.subproj/WebHTMLView.m:
                (-[WebHTMLView maintainsInactiveSelection]):
                check [WebView maintainsInactiveSelection] rather than just [WebView isEditable]
                
                * WebView.subproj/WebViewPrivate.h:
                * WebView.subproj/WebView.m:
                (-[WebView maintainsInactiveSelection]):
                new method for clients to override, returns -[self isEditable]
        

2005-05-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin.
        
        - WebKit support for <rdar://problem/3795701> Menu item/keyboard shortcut to 
        restore text zoom to normal

        * WebView.subproj/WebView.m:
        (-[WebView validateUserInterfaceItem:]):
        validate makeTextStandardSize by calling canMakeTextStandardSize
        (-[WebView canMakeTextStandardSize]):
        new method, returns YES unless text size multiplier is currently 1
        (-[WebView makeTextStandardSize:]):
        new method, sets text size multiplier to 1
        
        * WebView.subproj/WebViewPrivate.h:
        add makeTextStandardSize: and canMakeTextStandardSize to pending public category

2005-05-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        - fixed <rdar://problem/4067981> Mail places RTF flavor before RTFD flavor when dragging 
        mixed image/text content.

        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _selectionPasteboardTypes]):
        put RTFD type before RTF type in array of types to declare

2005-05-09  Chris Blumenberg  <cblu@apple.com>

	Turned assertion into error message to prevent crash when encountering this bug:
	<rdar://problem/4067625> connection:willCacheResponse: is called inside of [NSURLConnection initWithRequest:delegate:]
	
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): set flag to track when we're initializing the connection
        (-[WebBaseResourceHandleDelegate connection:willCacheResponse:]): log error

2005-05-09  Darin Adler  <darin@apple.com>

        * Makefile.am: Don't set up PBXIntermediatesDirectory explicitly;
        Not needed to make builds work, spews undesirable error messages too.

2005-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - make building multiple trees with make work better

        * Makefile.am: Set up Xcode build directory before invoking xcodebuild.

2005-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Dave Hyatt.

        - fixed layout tests

        * WebKit.pbproj/project.pbxproj: Set deployment target to 10.3 in the build styles.
        When built without a build style (by Apple B&I) we want to get the target from the
        environment. But when built with a build style (by Safari engineers and others), we want
        to use 10.3. Because our deployment target was not set, we ran into this bug:

            <rdar://problem/4108717> CTFontGetGlyphWithName doesn't work with some strings

        * Makefile.am: Took out extra parameters that make command-line building different from
        Xcode building. Now that this is fixed, you should not get a full rebuild if you switch
        from command line to Xcode or back.

2005-05-04  Chris Blumenberg  <cblu@apple.com>

	Fixed: 
	<rdar://problem/4078417> REGRESSION (125-412): MLB gameday page doesn't update (Flash)
	<rdar://problem/4072280> XMLHttpRequest calls onReadyStateChange callback with bogus status value
        
	Reviewed by john.

	Our WebKit-level caching of subresources "dumbed-down" information held in NSURLResponse. This caused some loads to lack response headers and thus disabling cache directives. Status codes were also not retained and this caused XMLHttpRequest to fail frequently. The fix is to have WebResource retain the NSURLResponse and to use the NSURLResponse when we decide to load from WebResources.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:data:]): call new [WebResource _initWithData:URL:response:]
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate _canUseResourceWithResponse:]): new, checks response cache directives
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): call _canUseResourceWithResponse:
        (-[WebBaseResourceHandleDelegate saveResource]): call new [WebResource _initWithData:URL:response:]
        * WebView.subproj/WebResource.m:
        (-[WebResourcePrivate dealloc]):
        (-[WebResource initWithData:URL:MIMEType:textEncodingName:frameName:]): call renamed _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:
        (-[WebResource initWithCoder:]): decode the NSURLReponse
        (-[WebResource encodeWithCoder:]): encode the NSURLReponse
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]): take the NSURLReponse
        (-[WebResource _initWithData:URL:response:]): new
        (-[WebResource _initWithPropertyList:]): decode the NSURLReponse
        (-[WebResource _propertyListRepresentation]): encode the NSURLReponse
        (-[WebResource _response]): return ivar if we have one
        * WebView.subproj/WebResourcePrivate.h:

2005-05-03  David Hyatt  <hyatt@apple.com>

	Fix object element support so that fallback content works.  With this change Safari passes the Acid2 test.
	
        Reviewed by Maciej

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge determineObjectFromMIMEType:URL:]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedMainResourceError:complete:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):

2005-05-03  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebUIDelegate.h: Fixed incorrect comment.

2005-05-01  Darin Adler  <darin@apple.com>

        - move to Xcode native targets and stop checking in generated files

        * WebKit.pbproj/project.pbxproj: Updated to use native targets and generate all the generated
        files, so we don't have to check them in any more.
        * Info.plist: Added. Native targets use a separate file for this.

        * Plugins.subproj/npapi.m: Fixed import statement to get npapi.h from <WebKit/> rather than current directory.

        * Makefile.am: Removed timestamp cleaning rules since we don't use it any more.

        * .cvsignore: Removed various timestamp files.

        * DOM.subproj/DOM-compat.h: Removed.
        * DOM.subproj/DOM.h: Removed.
        * DOM.subproj/DOMCSS.h: Removed.
        * DOM.subproj/DOMCore.h: Removed.
        * DOM.subproj/DOMEvents.h: Removed.
        * DOM.subproj/DOMExtensions.h: Removed.
        * DOM.subproj/DOMHTML.h: Removed.
        * DOM.subproj/DOMPrivate.h: Removed.
        * DOM.subproj/DOMRange.h: Removed.
        * DOM.subproj/DOMStylesheets.h: Removed.
        * DOM.subproj/DOMTraversal.h: Removed.
        * DOM.subproj/DOMViews.h: Removed.
        * Plugins.subproj/WebScriptObject.h: Removed.
        * Plugins.subproj/npapi.h: Removed.
        * Plugins.subproj/npruntime.h: Removed.
        * copy-webcore-files-to-webkit: Removed.
        * embed-frameworks.sh: Removed.
        * force-clean-timestamp: Removed.

2005-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed problems preventing us from compiling with gcc 4.0

        * WebKit.pbproj/project.pbxproj: Removed -fobjc-exceptions because I can't figure out an easy
        way to pass it only when compiling Objective-C/C++. Removed -Wmissing-prototypes from
        WARNING_CPLUSPLUSFLAGS since it's now a C-only warning.

        * History.subproj/WebHistoryItem.m: (-[WebHistoryItem pageCache]): Changed return type
        to match the declaration.
        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]):
        Fixed a BOOL that should have been a Boolean.
        * WebCoreSupport.subproj/WebTextRenderer.m: Removed redundant copy of ROUND_TO_INT, also in
        a WebCore header.
        (-[WebTextRenderer _computeWidthForSpace]): Had to add cast because of difference in type of
        ROUND_TO_INT vs. CEIL_TO_INT.
        (pathFromFont): Added a cast to convert UInt8 * to char *.
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _setDocumentView:]): Fixed parameter type to match the declaration.
        (-[WebFrameView documentView]): Fixed return type to match the declaration.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
        Initialized a variable to quiet an incorrect gcc 4.0 uninitialized variable warning.
        (-[WebHTMLView deleteToMark:]): Switched from @try style to NS_DURING style of exception handler
        because we can't pass -fobjc-exceptions just to Objective-C at the moment (see above).
        (-[WebHTMLView selectToMark:]): Ditto.
        (-[WebHTMLView swapWithMark:]): Ditto.

2005-04-27  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave Harrison.
        
        - fixed <rdar://problem/3547489> pop-up window blocking preference and 
        menu item can easily get out of sync.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _setStringValue:forKey:]):
        save local value before setting value in NSUserDefaults, so clients reacting to NSUserDefaults
        change notification but calling back on WebPreferences API will see the updated value.
        (-[WebPreferences _setIntegerValue:forKey:]):
        ditto
        (-[WebPreferences _setBoolValue:forKey:]):
        ditto

2005-04-26  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla

        Reviewed by Chris.

        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:

2005-04-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3655817> please add support for mouse wheel events and the onmousewheel handler

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView scrollWheel:]): Call sendScrollWheelEvent: method
        instead of the old scrollOverflowWithScrollWheelEvent: (just a name change).

2005-04-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fixed <rdar://problem/4092614> REGRESSION (Tiger): progressively loaded background images "scroll around" instead of just appearing

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _imageSourceOptions]): Moved a global inside this function, since it's only used here.
        (-[WebImageData _cacheImages:allImages:]): Fixed a sizeof that was getting the size of the wrong thing.
        (-[WebImageData _isSizeAvailable]): Used calloc in a more consistent way.
        (drawPattern): Removed an unneeded cast.
        (-[WebImageData tileInRect:fromPoint:context:]): Here's the actual bug fix. Don't use the image size
        when deciding whether the image needs to be tiled as a pattern nor when creating the pattern: in both
        cases, use the tile size. The old way was wrong, and the new way works perfectly. Also removed uneeded
        error message when the image is not yet loaded enough to create a CGImageRef for it -- it's fine to
        draw nothing in that case.

2005-04-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willCacheResponse:]):
        Beefed up assertion that's been bugging me and Chris to include
        the two troublemaking values.

2005-04-05  David Hyatt  <hyatt@apple.com>

	Fix for 4077106, wheel scroll amount smaller in Tiger.  All along wheeling should have been 4x the default
	line height of 10 (just as arrow keys did).  Scroll arrows should have done this too for scroll views (they did
	already for overflow sections).  This patch puts the override into the scrollview itself, and removes the
	multipliers in the private frame methods.
	
        Reviewed by darin

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _verticalKeyboardScrollDistance]):
        (-[WebFrameView initWithFrame:]):
        (-[WebFrameView _horizontalKeyboardScrollDistance]):

=== WebKit-312.1 ===

2005-03-31  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/4070729> REGRESSION (125-311, Panther-only?): Safari crashes while reloading "My eBay" page

        Reviewed by rjw.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resourceData]): retain and autorelease resourceData since releaseResources (which releases resourceData) may be called before the caller of this method has an opporuntity to retain the returned data

=== Safari-412 ===

=== Safari-411 ===

2005-03-23  Richard Williamson   <rjw@apple.com>

	Use Patti Yeh's hack to determine the appropriate rectangle
	to place the "associated word" window.  
	If there is no marked text firstRectForCharacterRange: will
	use the selected range to determine the returned rectangle,
	ignoring the input range.  This is the fix from
	4029491 that I previously backed out.

        Reviewed by Vicki.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]):

2005-03-23  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4062490> REGRESSION (WebKit-408): no subresources reported in Activity window after going back at hrweb.apple.com

	Stop collecting subresource responses after the document
	had loaded, not after it has been opened.

        Reviewed by Chris.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _setState:]):
        (-[WebFrame _opened]):

2005-03-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	<rdar://problem/4051145> The QuickTime Cocoa plug-in needs an SPI that it can call to check for URL policy

        * Plugins.subproj/WebPluginContainerCheck.h: Added.
        * Plugins.subproj/WebPluginContainerCheck.m: Added this new helper class to encapsulate
	an async plugin navigation check.
        (+[WebPluginContainerCheck checkWithRequest:target:resultObject:selector:controller:]): Convenience allocator that gives autoreleased value.
        (-[WebPluginContainerCheck initWithRequest:target:resultObject:selector:controller:]): Initializer.
        (-[WebPluginContainerCheck finalize]): Just assert that we're done, it would
	be bad to deallocate this object while request is still outstanding.
        (-[WebPluginContainerCheck dealloc]): Ditto.
        (-[WebPluginContainerCheck _continueWithPolicy:]): Method to continue after async
	policy check.
        (-[WebPluginContainerCheck _isDisallowedFileLoad]): Do "file: URL from remote content"
	check.
        (-[WebPluginContainerCheck _actionInformationWithURL:]): Helper to make action
	dictionary.
        (-[WebPluginContainerCheck _askPolicyDelegate]): Call policy delegate to let
	the app decide if this load is allowed.
        (-[WebPluginContainerCheck start]): Start the check.
        (-[WebPluginContainerCheck cancel]): Cancel a check in progress.
        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController initWithDocumentView:]): Initialize new _checksInProgress field.
        (-[WebPluginController _webPluginContainerCancelCheckIfAllowedToLoadRequest:]): Implement
	this new SPI method.
        (-[WebPluginController _cancelOutstandingChecks]): New helper to make sure to cancel
	all outstanding requests when destroying all plugins.
        (-[WebPluginController destroyAllPlugins]): Call above helper.
        (-[WebPluginController _webPluginContainerCheckIfAllowedToLoadRequest:inFrame:resultObject:selector:]): Implement this new plug-in SPI method.
        (-[WebPluginController bridge]): New helper method.
        (-[WebPluginController webView]): New helper method.
        * WebView.subproj/WebPolicyDelegatePrivate.h: Add new navigation
	type WebNavigationTypePlugInRequest.
        * WebKit.pbproj/project.pbxproj: Add new files.
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]): Don't open externally on a plug-in request.

2005-03-23  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4053515> REGRESSION (Mail): Kotoeri input method reconversion does not work in WebViews

	We now use actual document NSRanges to represent both marked text
	ranges and selection ranges.

        Reviewed by Ken Kocienda.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView validAttributesForMarkedText]):
        (-[WebHTMLView firstRectForCharacterRange:]):
        (-[WebHTMLView selectedRange]):
        (-[WebHTMLView markedRange]):
        (-[WebHTMLView _selectMarkedText]):
        (-[WebHTMLView setMarkedText:selectedRange:]):

=== Safari-410 ===

2005-03-22  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

=== Safari-409 ===

2005-03-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	<rdar://problem/4060020> Add stub version of security SPI for QuickTime plug-in so QuickTime team has something to compile and link against
        
	* Plugins.subproj/WebPluginContainerPrivate.h: Added.
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController _webPluginContainerCheckIfAllowedToLoadRequest:inFrame:resultObject:selector:]):
        (-[WebPluginController _webPluginContainerCancelCheckIfAllowedToLoadRequest:]):
        * WebKit.pbproj/project.pbxproj:

2005-03-19  David Harrison  <harrison@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/4059479> Misspelling underline does underline the whole word, could go farther to the right

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer misspellingLinePatternGapWidth]):
        (-[WebTextRenderer drawLineForMisspelling:withWidth:]):
        Consider that the last pixel in the underline dot pattern is transparent.

2005-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej (a while back).

        - fixed <rdar://problem/4059323> local-file security check is allowing plug-in streams, but must not

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]):
        Roll out change I made on 3-13. That change is needed for subresource, but not for plug-in streams.
        For plug-in streams it's too risky, and leaves a serious security hole open.

2005-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Ken and John.

        - fixed <rdar://problem/4059123> REGRESSION (402-403): deleteWordForward: and deleteWordBackward: start deleting single characters after the first delete

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _deleteWithDirection:granularity:killRing:isTypingAction:]):
        Fixed backwards logic in here and added missing check. Set action to one of the two typing actions only
        if isTypingAction is YES.

2005-03-19  David Harrison  <harrison@apple.com>

        Reviewed by me (written by Patti Yeh).
        
        <rdar://problem/4029491> <TCIM> CangJie: the candidate window appears at the top left hand corner during typing in Mail and iChat

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]):
        Use selected range if there is no marked range.

=== Safari-408 ===

2005-03-18  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/3584942> AX: Safari Accessibility parent-child mismatch

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView webCoreBridge]):
        New to conform to WebCoreBridgeHolder protocol.

2005-03-18  Richard Williamson   <rjw@apple.com>
	
	Fixed <rdar://problem/4057004> Data from XMLHTTPRequest is never dealloced

	WebDataSource keeps an array of all the NSURLResponses associated
	with the load for a page.  This is used to playback delegate messages
	when loading from the page cache.  However, after the document
	has completed it's initial load, we continue to keep track of responses. 
	So, this has the consequence of keeping all the responses for a page
	around for the life of the page.  NSURLResponses are now very
	heavy.  They indirectly reference the resource data (via the
	download assessment dictionary).  This fix will keep
	references to responses around for those resources loaded during initial
	page load, but not after that point.

        Reviewed by Ken.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _addResponse:]):
        (-[WebDataSource _stopRecordingResponses]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]):

2005-03-18  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:
        
        <rdar://problem/4053729> Copy/paste of page with frames into Blot or Mail does nothing and loses insertion point

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedArchive]): Wrap frameset documents in an iframe, so they can be pasted into 
        existing documents which will have a body or frameset of their own.

=== Safari-407 ===

2005-03-17  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4055562> REGRESSION (Tiger): Safari doesn't draw progressively-loaded JPEGs (www.theregister.co.uk, www.titantalk.com)

	Anothe side effect of lazy loading of image meta data.  We now
	don't cache image size until size meta data is actually available.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData size]):

2005-03-16  David Harrison  <harrison@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/4048506> Deleting from beginning of editable div deletes other document elements
        
        Also changed WebCore.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _shouldDeleteRange:]):
        Added call to new bridge method canDeleteRange.

2005-03-16  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:
        
        <rdar://problem/4042935> undo doesn't work properly during inline input

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView setMarkedText:selectedRange:]): Call new -[WebCoreBridge replaceMarkedTextWithText:] instead of 
        -[WebCoreBridge replaceSelectionWithText:selectReplacement:smartReplace:]. The former call was just added in 
        order to provide a better mapping of international text input onto the typing command/undo design.

2005-03-15  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4040321> Exception: Someone's trying to encode a WebDataRequestParameters instance

	If client mutates request use new Foundation SPI to address remove applewebdata properties	from request.

        Reviewed by Ken Kocienda.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate willSendRequest:redirectResponse:]):
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (+[NSURLRequest _webDataRequestPropertyKey]):

2005-03-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Vicki

        Fox for this bug:
        
        <rdar://problem/4052642> Each delete keystroke is in its own undo group; not included in undo group with other typing

        Calling -[WebCore setSelectedDOMRange:range affinity:] had the result of "closing" any active set of typing
        keystrokes grouped together in a single undo operation. My change on 27 Jan to route delete keystrokes 
        through _deleteRange:killRing:... made this feature regress. Previous to that change, the backwards delete
        key went through separate code that is no longer in the tree that did not set the selection in the way
        it is done now.
        
        The solution is to add an extra argument to the set-selection call. The WebCoreBridge now offers this method:
        -[WebCore setSelectedDOMRange:range affinity:closeTyping:]. Now, callers must indicate whether setting the 
        selection will act to close typing or not. The code changes below all add this new argument with the
        appropriate value for closeTyping.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _deleteRange:killRing:prepend:smartDeleteOK:deletionAction:]): Passes NO for closeTyping when
        deletionAction is deleteKeyAction or forwardDeleteKeyAction; YES when deleteSelectionAction.
        (-[WebHTMLView _expandSelectionToGranularity:]): Passes YES for closeTyping.
        (-[WebHTMLView selectToMark:]): Passes YES for closeTyping.
        (-[WebHTMLView swapWithMark:]): Passes YES for closeTyping.
        (-[WebHTMLView transpose:]): Passes YES for closeTyping.
        (-[WebHTMLView _selectMarkedText]): Passes NO for closeTyping.
        (-[WebHTMLView _selectRangeInMarkedText:]): Passes NO for closeTyping.
        * WebView.subproj/WebView.m:
        (-[WebView setSelectedDOMRange:affinity:]): Passes YES for closeTyping.

2005-03-14  Richard Williamson   <rjw@apple.com>

	Fix <rdar://problem/4051389> 8A413: gifs animating too fast

        Reviewed by Maciej.

	Match Mozilla's policy for minimum frame duration, which is somewhat odd:

	<= 0.01 sec use .1 sec, otherwise use specified duration.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _frameDurationAt:]):

2005-03-14  Darin Adler  <darin@apple.com>

        Reviewed by Harrison.

        - fixed <rdar://problem/4049776> Seed: Mail: Disable spellcheck leaves red artifacts

        * WebView.subproj/WebFrameInternal.h: Added _unmarkAllMisspellings.
        * WebView.subproj/WebFrame.m: (-[WebFrame _unmarkAllMisspellings]): Added.
        Calls unmarkAllMisspellings on the bridge and self and all subframes.

        * WebView.subproj/WebView.m: (-[WebView setContinuousSpellCheckingEnabled:]):
        Call _unmarkAllMisspellings on the main frame when turning continuous spell checking off.

2005-03-14  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4027928> Tiger_8A394:Acrobat crashes while tried to remove the subscription errors by clicking on "Would you like to remove the subscription" from Tracker details view pane

	The Acrobat application triggers loads of new documents in it's policy delegate.  This
	ultimately causes the WebHTMLView to be released before their event handlers have
	returned.  To bullet proof against this case we retain/release self before passing
	the event on for further handling.
	
        Reviewed by Maciej.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _updateMouseoverWithEvent:]):
        (-[WebHTMLView scrollWheel:]):
        (-[WebHTMLView mouseDown:]):
        (-[WebHTMLView mouseDragged:]):
        (-[WebHTMLView mouseUp:]):
        (-[WebHTMLView keyDown:]):
        (-[WebHTMLView keyUp:]):
        (-[WebHTMLView performKeyEquivalent:]):

2005-03-14  Vicki Murley  <vicki@apple.com>

	- roll out the fix for 4040321, since it is still pending CCC review.

    2005-03-10  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4040321> Exception: Someone's trying to encode a WebDataRequestParameters instance 

        Reviewed by Darin.

        If a delegate returns a mutated applewebdata: request in it's willSendRequest:
        method, we don't load using the WebDataRequest.  Instead we do a normal load.
        Unfortunately, if the request they return is mutated *copy* of the applewebdata: 
        request it will hold the applewebdata: special properties.  These properties 
        will be encoded into the cache.   They should not be.  So, to fix, we sanitize the
        request, by removing the special properties from the request.

        Note that we had to dig into the private guts of NSURLRequest because there is
        no public mechanism to remove properties from a request, see 4046775.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate willSendRequest:redirectResponse:]):
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestExternalRequest]):
        (-[NSURLRequest _webDataRequestSanitize]):

=== Safari-406 ===

2005-03-13  Darin Adler  <darin@apple.com>

        Reviewed by Ken and Maciej.

        - fixed <rdar://problem/4049040> REGRESSION (403-405): security check prevents user stylesheet from loading (Dictionary.app doesn't work at all!)

        * Plugins.subproj/WebNetscapePluginStream.m: (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]):
        Allow plug-in subresource streams to load with any URL, ignoring the "canLoadURL" method's restriction (only
        file URLs can load other file URLs), which now applies only to main resources, like web pages in frames or
        object tags and plug-in main resources.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:customHeaders:]): Allow subresources to load with any URL, as above.
        This allows things like images, stylesheets, and JavaScript to be loaded without the "canLoadURL" method's
        restriction.
        (-[WebBridge startLoadingResource:withURL:customHeaders:postData:]): Ditto.
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]): Ditto.

2005-03-10  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4040321> Exception: Someone's trying to encode a WebDataRequestParameters instance 

        Reviewed by Darin.

	If a delegate returns a mutated applewebdata: request in it's willSendRequest:
	method, we don't load using the WebDataRequest.  Instead we do a normal load.
	Unfortunately, if the request they return is mutated *copy* of the applewebdata: 
	request it will hold the applewebdata: special properties.  These properties 
	will be encoded into the cache.   They should not be.  So, to fix, we sanitize the
	request, by removing the special properties from the request.

	Note that we had to dig into the private guts of NSURLRequest because there is
	no public mechanism to remove properties from a request, see 4046775.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate willSendRequest:redirectResponse:]):
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestExternalRequest]):
        (-[NSURLRequest _webDataRequestSanitize]):

=== Safari-405 ===

2005-03-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Vicki.

	<rdar://problem/4046510> REGRESSION (TOT): All Flash and Shockwave plugin-based web content missing
        
	* Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]):

2005-03-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Vicki.
        
        - fixed <rdar://problem/4045843> Going back/forward to error page 
        hits assertion in -[WebDataSource(WebPrivate) _setData:]

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _setData:]):
        Removed bogus assertion

2005-03-09  Deborah Goldsmith  <goldsmit@apple.com>

        Reviewed by Darin.

        - fixed <rdar://problem/3997044> default encoding for non-Latin incorrect

	* WebKit/WebView.subproj/WebPreferences.m: (+[WebPreferences _systemCFStringEncoding]):
        Call __CFStringGetUserDefaultEncoding to get region, and TECGetWebTextEncodings to get
        the first encoding to determine the default encoding.

2005-03-09  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed <rdar://problem/4034175> REGRESSION (Mail): Can't use any font with style Light/Condensed/Semibold/Extrabold, etc

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _styleFromFontAttributes:]): Use a constant instead of hard-coded weight for clarity.
        (-[WebHTMLView _originalFontA]): Ditto.
        (-[WebHTMLView _originalFontB]): Ditto.
        (-[WebHTMLView _addToStyle:fontA:fontB:]): Add code to detect the case where the family name is not good enough
        to specify the font precisely. In that case, use the Postscript font name instead. Also change variable names
        so it's easier to understand the method.

2005-03-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	<rdar://problem/4005575> Arbitrary file disclosure vulnerability due to ability to load local html from remote content
        
	* Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView didStart]):
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge startLoadingResource:withURL:customHeaders:]):
        (-[WebBridge startLoadingResource:withURL:customHeaders:postData:]):
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]):
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebBridge createChildFrameNamed:withURL:referrer:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        (-[WebBridge viewForPluginWithURL:attributeNames:attributeValues:MIMEType:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadURL:referrer:intoChild:]):
        * WebView.subproj/WebFramePrivate.h:

2005-03-09  Richard Williamson   <rjw@apple.com>
	
	Fixed <rdar://problem/4032938> Safari: text layout for MS P Gothic font is corrupted

	The AppKit and ATS reports that MS P Gothic is fixed pitch.  It is
	not!  This is another case of "fixed pitch" being wrong.  I've
	coalesced all the special cases into our isFontFixedPitch:, and
	used a dictionary to improve speed.  No performance regression.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _computeWidthForSpace]):
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory clearCaches]):
        (-[WebTextRendererFactory isFontFixedPitch:]):

2005-03-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4040388> REGRESSION (172-173): nonrepro crash in -[NSString(WebNSURLExtras) _web_isUserVisibleURL]

        * Misc.subproj/WebNSURLExtras.m:
        (-[NSString _web_isUserVisibleURL]): Fixed some pointer expressions that didn't include the index in the expression.
        (readIDNScriptWhiteListFile): Removed NSLog statements in here since we decided they aren't useful and they will
        write some messages on Tiger.

2005-03-09  Darin Adler  <darin@apple.com>

        * DOM.subproj/DOMPrivate.h: Checked in file copied from WebCore.

2005-03-08  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4036949> many JPEG images fail to incremental-load due to change in ImageIO JPEG header parsing (to be fixed in WebKit)
	Fixed <rdar://problem/4042570> Need to check image properties for presence of width/height properties

	ImageIO-55 changed how image properties are created.  They
	are now created incrementally.  So we need "re-get" the image
	properties if the properties we care about (width/height) aren't
	in the property dictionary.

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData init]):
        (-[WebImageData fileProperties]):
        (-[WebImageData propertiesAtIndex:]):
        (-[WebImageData _isSizeAvailable]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:callback:]):
        (-[WebImageData size]):

2005-03-08  John Sullivan  <sullivan@apple.com>

        A couple of tweaks to the previous patch, from Darin's review.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (_writableTypesForImageWithoutArchive):
        remove unnecessary _web prefix
        (_writableTypesForImageWithArchive):
        ditto
        (+[NSPasteboard _web_writableTypesForImageIncludingArchive:]):
        use mutableCopy rather than initWithArray:, and adjust for name changes

2005-03-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/4031826> REGRESSION (Mail): standalone images from 
        Safari can't be pasted into Mail (WebKit part of fix)
        
        We were always declaring webarchive-related pasteboard types, even in the standalone
        image cases where we had no webarchive. Unfortunately, the WebView pasteboard-related
        API doesn't prevent this kind of thing from happening, because the code that
        declares the types isn't guaranteed to be anywhere near the code that writes
        the pasteboard data.
        
        After this fix, I discovered that pasting standalone images into Mail still doesn't
        work right, but the remaining issues seem to be entirely in Mail. I wrote up 4041671
        to cover these.

        * Misc.subproj/WebNSPasteboardExtras.h:
        (+[NSPasteboard _web_writableTypesForImageIncludingArchive:]):
        Added boolean parameter; clients must specify whether or not there's an
        archive involved, because the array of types is different if there is.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (_web_writableTypesForImageWithoutArchive):
        new static function, constructs (once) and returns the array of types
        for images that don't have archives
        (_web_writableTypesForImageWithArchive):
        new static function, constructs (once) and returns the array of types
        for images that do have archives
        (+[NSPasteboard _web_writableTypesForImageIncludingArchive:]):
        added boolean parameter, now calls one of the two new static functions
        
        (-[NSPasteboard _web_writeImage:URL:title:archive:types:]):
        added asserts that we aren't declaring the archive types if we don't have archive data
        
        (-[NSPasteboard _web_declareAndWriteDragImage:URL:title:archive:source:]):
        updated to pass parameter to _web_writableTypesForImageIncludingArchive:
        
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]):
        updated to pass parameter to _web_writableTypesForImageIncludingArchive:

        * WebView.subproj/WebImageView.m:
        (-[WebImageView copy:]):
        updated to pass parameter to _web_writableTypesForImageIncludingArchive:

        * WebView.subproj/WebView.m:
        (-[WebView pasteboardTypesForElement:]):
        updated to pass parameter to _web_writableTypesForImageIncludingArchive:

2005-03-07  Richard Williamson   <rjw@apple.com>

	More bullet proofing for <rdar://problem/4038304> CrashTracer: ....9 crashes at com.apple.WebKit: -[WebTextRenderer initWithFont:usingPrinterFont:] + 840

	Protect against removal of Times and Times New Roman from
	system.  If these fonts are removed attempt to get system font
	instead of FATAL_ALWAYS.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

=== Safari-403 ===

2005-03-06  Darin Adler  <darin@apple.com>

        - fixed obvious mistake in IDN script code (luckily it hasn't been in a submission yet!)

        * Misc.subproj/WebNSURLExtras.m: (readIDNScriptWhiteListFile): Use "index" to index into the array,
        not "script", which is the script number, not the 32-bit-word index.

2005-03-05  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

	Fixed: <rdar://problem/4038529> Infinite progress bar loading webcams and other sites that use multipart/x-mixed-replace

	The previous patch I landed prevented us from loading multipart/x-mixed-replace but did not always update the progress bar accordingly.  
        This stops websites from having seemingly infinite progress in the browser UI.  

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient didReceiveResponse:]): If this is "multipart/x-mixed-replace", remove the WebBaseResourceHandleDelegate client from 
        the datasource's subresource array, otherwise -[WebDataSource isLoading] incorrectly returns YES.   Also it's possible at this point in
         time we're done loading now (loaded everything else except for the multipart/x-mixed-replace content) so go ahead and check to see if 
         in fact we're complete. 
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:didReceiveResponse:]): ditto

2005-03-05  Richard Williamson   <rjw@apple.com>

	Fixed panther build problem.  Shouldn't include
	changes for 3968753 on panther.

        Reviewed by John.

        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2005-03-05  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4034603> REGRESSION (185-188): RadarWeb can't send enclosures anymore

        * WebView.subproj/WebFormDataStream.m:
        (closeCurrentStream): Release currentData when closing the stream.
        (advanceCurrentStream): Set up and retain currentData when the current stream is reading that data, so the
        data won't be released while in use.
        (formCreate): Initialize currentData to NULL.

        - fixed <rdar://problem/4037562> Tiger8A402: Help Viewer crashed when viewing help for iChat (infinite recursion in WebView)

        * WebView.subproj/WebView.m: (-[WebView _responderValidateUserInterfaceItem:]):
        Check for the case where we ourselves are the responder. This avoids an infinite loop.
        The actual code to perform operations avoids this with a global variable, but this lighter weight
        solution is sufficient here because validate operations don't call through to the next responder.

2005-03-04  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3968753> REGRESSION: Poor performance with differing multiple animated GIFs (was fast in Panther)

	Disable coalesced updates (in CG).  This restores the
	panther behavior.

        Reviewed by David Harrison.

        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2005-03-04  Adele Amchan  <adele@apple.com>

        Reviewed by Darin.

        * English.lproj/StringsNotToBeLocalized.txt: added new strings "text/x-vcf" and "text/x-csv" to the list

2005-03-04  Adele Amchan  <adele@apple.com>

        Reviewed by Chris.

        Fix for <rdar://problem/4032982> Sun iPlanet app: not able to import AddressBook CSV format addresses properly
        Fix for <rdar://problem/4032985> Sun iPlanet app: not able to import vCard format addresses properly

        * WebView.subproj/WebTextView.m:
        (+[WebTextView unsupportedTextMIMETypes]): added "text/x-csv" and "text/x-vcf" to the list of MIME types that our text view doesn't handle

2005-03-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4036817> REGRESSION: ctrl-y broken when a line + carriage return cut

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _deleteRange:killRing:prepend:smartDeleteOK:deletionAction:]): Merged _handleKillRing behavior
        into this function, since there's now a more-complicated way the startNewKillRingSequence boolean needs to
        be handled. Set the startNewKillRingSequence boolean after the entire process so changing the selection before
        and during the editing dosn't clear it. Also change "isTypingAction" parameter to "deletionAction" so we can
        handle forward delete with this method.
        (-[WebHTMLView _deleteSelection]): Pass deleteSelectionAction for action rather than NO for isTypingAction,
        which is the way to say the same thing using the new parameter.
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:isTypingAction:]): Refactor to use the _deleteRange
        method above. Also calls _shouldDeleteRange: for the pre-existing selection case; not doing that before was
        a bug.
        (-[WebHTMLView deleteToMark:]): Pass deleteSelectionAction for action rather than NO for isTypingAction,
        which is the way to say the same thing using the new parameter.

2005-03-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4020413> REGRESSION (Mail): can't use fonts with names that start with "#" in Mail (Korean fonts)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _styleFromFontAttributes:]): Quote font name when calling setFontFamily.
        (-[WebHTMLView _addToStyle:fontA:fontB:]): Ditto.

2005-03-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3965666> IDN spoofing vulnerability caused by Unicode characters that look like ASCII characters

        * Misc.subproj/WebNSURLExtras.m:
        (readIDNScriptWhiteListFile): Added. Reads file and parses script names.
        (readIDNScriptWhiteList): Added. Calls readIDNScriptWhiteList on each of the white list locations in succession.
        (allCharactersInIDNScriptWhiteList): Renamed from containsPossibleLatinLookalikes and changed sense.
        Now calls readIDNScriptWhiteList first time, and then uses the read-in list to check the scripts.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Call allCharactersInIDNScriptWhiteList instead of
        containsPossibleLatinLookalikes.
        * Resources/IDNScriptWhiteList.txt: Added.
        * WebKit.pbproj/project.pbxproj: Added IDNScriptWhiteList.txt file.

        * Misc.subproj/WebKitLocalizableStrings.m: Removed. This is simply unused.
        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2005-03-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3937667> REGRESSION (Mail): Zooming a window from titlebar button doesn't paint newly-exposed portions of window

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):
        Re-set-up the visRect if the bounds changes due to layout.

=== Safari-402 ===

2005-03-03  Jens Alfke  <jens@apple.com>

        Reviewed by rjw.

	<rdar://problem/3991818> REGRESSION: Images scale while loading
	The code could crop an image when not all the scanlines were available yet, and it could crop when only a sub-rect of the image was to be drawn; but if it had to do both at once, it got the coordinates wrong. Fixed that.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData incrementalLoadWithBytes:length:complete:callback:]):

2005-03-01  David Hyatt  <hyatt@apple.com>

	Fix for 3841186, scrollbar shows up disabled when it should not appear at all.  Make sure updateScrollers
	is never allowed to be re-entrant from any call point by moving the guard inside the function itself.
	
        Reviewed by John Sullivan

        * WebView.subproj/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):

2005-03-02  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/4029010> Expose method to retrieve drag image for WebView's selection

        Reviewed by sullivan.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]): call _selectionDraggingImage
        (-[WebHTMLView _selectionDraggingImage]): new SPI for Mail, factored from previous method
        (-[WebHTMLView _selectionDraggingRect]): new SPI for Mail
        * WebView.subproj/WebHTMLViewPrivate.h:

2005-03-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele.
        
        - fixed <rdar://problem/4023337> Safari stops loading any page (-[NSCFDictionary setObject:forKey:]: 
        attempt to insert nil key)
        
        It is very likely that the exception being hit is caused by the same problem as WebFoundation
        bug 4018486. This change makes the code robust against this kind of problem regardless.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate saveResource]):
        Don't call addSubresource if newly-created resource is nil (but do assert on debug builds).
        Also assert that originalURL and MIMEType are not nil.
        
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource addSubresource:]):
        Don't add nil subresource to dictionary, but do assert on debug builds.

=== Safari-401 ===

2005-03-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed <rdar://problem/3987482> Format>Style>Italic is not enabled when a 
        compose window is empty (works in Blot)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView becomeFirstResponder]):
        call _updateFontPanel here so NSFontManager knows the right font for the menu
        items and the font panel

2005-03-01  David Harrison  <harrison@apple.com>

        Reviewed by Chris.
        
        <rdar://problem/3915560> Mail would like an SPI to enable "smart" text paste/drop

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _smartDeleteRangeForProposedRange:]):
        (-[WebHTMLView _smartInsertForString:replacingRange:beforeString:afterString:]):
        New.

2005-02-28  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - WebKit part of fix for <rdar://problem/4023490> REGRESSION (125-185): Tabbing through links 
        on frameset page gets stuck at end (tivofaq.com)
        
        This tab-to-links stuff has been in shaky condition ever since AppKit futzed with
        tabbing behavior in Tiger to add support for including the toolbar in the key loop.
        I made some changes months ago to compensate for that, but some cases, such as this
        one, still weren't fixed.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge _nextKeyViewOutsideWebFrameViewsWithValidityCheck:]):
        new bottleneck method, extracted from nextKeyViewOutsideWebFrameViews; handles
        nextKeyView or nextValidKeyView depending on parameter.
        (-[WebBridge nextKeyViewOutsideWebFrameViews]):
        now calls extracted method
        (-[WebBridge nextValidKeyViewOutsideWebFrameViews]):
        new method, calls new bottleneck method
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView nextValidKeyView]):
        when we're stuck at the end of a nextKeyView chain inside a nexted frame, use
        nextValidKeyViewOutsideWebFrameViews. Make sure we don't end up looking inside
        the web frame views while doing this.

2005-02-25  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4025088> window onblur and onfocus don't fire when text field has focus

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusState]): Renamed from updateFocusDisplay. Added call to setWindowHasFocus: method.
        (-[WebHTMLView viewDidMoveToWindow]): Call method by new name.
        (-[WebHTMLView windowDidBecomeKey:]): Ditto.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView becomeFirstResponder]): Ditto.
        (-[WebHTMLView resignFirstResponder]): Ditto.

=== Safari-400 ===

2005-02-25  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4000962> 8A375: Help Viewer displays voiced sound and semi-voiced characters strangely (characters don't seem to be composed)

	Added special case for voiced marks.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):

2005-02-25  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4019823> Seed: Control-Y doesn't work

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:isTypingAction:]): Call _handleKillRing
        after setting the selection, since it uses the selection to get the text.
        (-[WebHTMLView _insertText:selectInsertedText:]): Check for empty string to avoid an assertion
        on the other side of the bridge when you yank the empty string.

2005-02-24  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3382926> Bidi neutrals at RTL/LTR boundaries not handled correctly.

	If directionality is specified use that as initial directionality,
	rather than neutral directionality.	

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):

2005-02-24  Adele Amchan  <adele@apple.com>

        Reviewed by Chris.
       
        Fix for <rdar://problem/4023393> Safari crashed in khtml::RenderObject::repaintAfterLayoutIfNeeded(QRect const&, QRect const&)

        We were crashing after hitting PageDown when viewing a pdf because 
        WebKit was calling over to WebCore to scroll overflow areas.
        Since this only needs to be done if we're dealing with a WebHTMLView, 
        I added a wrapper function to check the documentView before calling
        over to WebCore.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _scrollOverflowInDirection:granularity:]): added wrapper function that checks if documentView is a WebHTMLView 
        (-[WebFrameView scrollToBeginningOfDocument:]): uses new wrapper function now
        (-[WebFrameView scrollToEndOfDocument:]): uses new wrapper function now
        (-[WebFrameView _pageVertically:]): uses new wrapper function now
        (-[WebFrameView _pageHorizontally:]): uses new wrapper function now
        (-[WebFrameView _scrollLineVertically:]): uses new wrapper function now
        (-[WebFrameView _scrollLineHorizontally:]): uses new wrapper function now

2005-02-24  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3985889> REGRESSION (125-180): setting <img> src to GIF that already animated does not animate; just shows final frame
	
        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData resetAnimation]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer resetAnimation]):
        (-[WebInternalImage resetAnimation]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):

2005-02-24  Kevin Decker  <kdecker@apple.com>

        Reviewed by John.

	Fixed <rdar://problem/3962401> Don't load multipart/x-mixed-replace content to prevent memory leak

	Since we're not going to fix <rdar://problem/3087535> for Tiger, we should not load multipart/x-mixed-replace content.  Pages with such content contain what is essentially an infinite load and therefore may leak.

        * WebView.subproj/WebMainResourceClient.m: 
        (-[WebMainResourceClient connection:didReceiveResponse:]):  Disabled loading of multipart/x-mixed-replace content until we fully implement server side push. 
    	 * WebCoreSupport.subproj/WebSubresourceClient.m: 
        (-[WebSubresourceClient didReceiveResponse:]): Ditto. Same exact thing for sub resources. 


2005-02-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/4021370> REGRESSION (Tiger): WebKit part of fix for 
        shift-tab on tivofaq doing the wrong thing

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView becomeFirstResponder]):
        If our previousValidKeyView is nil or self (same as nil modulo AppKit oddness),
        look out of the box and get the previousValidKeyView of our webview.

2005-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fixed <rdar://problem/4010196> REGRESSION (125-186+): 8-character timestamps in gmail wrap to 2 lines (width:8ex; font-size:80%)

        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer xHeight]): Return the maximum
        of the "x" height and width. Comment in the code explains why in more detail.

2005-02-22  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3937203> when a div adds a scrollbar (overflow:auto) we do not get regions

	Compare regions after automatice scroll regions have been
	added.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge dealloc]):
        (-[WebBridge _compareDashboardRegions:]):
        (-[WebBridge dashboardRegionsChanged:]):

2005-02-22  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4012463> Dashboard widgets don't work with authenticating proxies

	Added new SPI for dashboard that just calls default delegate
	behavior.

        Reviewed by Maciej.

        * WebView.subproj/WebView.m:
        (-[WebView handleAuthenticationForResource:challenge:fromDataSource:]):
        * WebView.subproj/WebViewPrivate.h:

2005-02-22  Chris Blumenberg  <cblu@apple.com>

        Reviewed by mjs.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge issuePasteAndMatchStyleCommand]): support for new "PasteAndMatchStyle" exec command

=== Safari-188 ===

2005-02-21  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/3943090> REGRESSION (Mail): Spelling underline incompletely erased following certain steps

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer misspellingLineThickness]):
        (-[WebTextRenderer misspellingLinePatternWidth]):
        Replaced #defines with these methods, so others can get the same info.
        
        (-[WebTextRenderer drawLineForMisspelling:withWidth:]):
        Keep underline within originally specified bounds.
        

2005-02-21  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4016358> don't ever display IDN URLs with characters from "possible Latin look-alike" scripts

        * Misc.subproj/WebNSURLExtras.m:
        (containsPossibleLatinLookalikes): Added.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Call containsPossibleLatinLookalikes, and if true,
        don't decode the host name.

2005-02-19  Kevin Decker  <kdecker@apple.com>

        Reviewed by Chris.

	Fixed <rdar://problem/4010765> Flash player can be used to arbitrarily open popup windows without user permission
	
	Our window.open() policy is to refuse the <script>window.open(...)</script> case and allow the inline the <a href="javascript:window.open('foo')> case.  Clever advertisers at some point realized that by executing their Javascript through the Flash plugin, Safari would always treat their code as the inline case, and thus, they were able to work around our popup blocker. 

        * Plugins.subproj/WebBaseNetscapePluginView.h: Addded currentEventIsUserGesture boolean ivar. 
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): If at any point the user clicks or presses a key from within a plugin, set the currentEventIsUserGesture flag to true. This is important to differentiate legitimate window.open() calls originating from plugins;  we still want to allow those. 
        (-[WebBaseNetscapePluginView initWithFrame:]): In our asynchronous load, pass along currentEventIsUserGesture to the PluginRequest. 
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]): Inform WebCore if this was a user originated gesture when calling executeScript(). 
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        (-[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:didStartFromUserGesture:]):
        (-[WebPluginRequest isCurrentEventUserGesture]): Added. 

2005-02-18  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3945271> REGRESSION (Mail): pasted plain text should pick up typing style instead of being unstyled

        Reviewed by kocienda.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _replaceSelectionWithArchive:selectReplacement:]): pass NO for matchStyle to replaceSelection
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:chosePlainText:]): return new chosePlainText parameter
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]): pass chosePlainText for matchStyle to replaceSelection
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): ditto

2005-02-17  Richard Williamson   <rjw@apple.com>

	Removed code that should not have been checked in from
	last patch.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory isFontFixedPitch:]):

2005-02-17  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead

	Fixed w/o introducing a performance regression.

        Reviewed by Vicki (and earlier by Dave Harrison).

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _computeWidthForSpace]):
        (widthForNextCharacter):
        * WebCoreSupport.subproj/WebTextRendererFactory.h:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[NSFont _web_isFakeFixedPitch]):
        (-[WebTextRendererFactory isFontFixedPitch:]):
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):

2005-02-17  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3959304> PDF in img tag is not rendered correctly anymore

	We were incorrectly adding image position when flipping coordinates.

        Reviewed by David Harrison.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _PDFDrawFromRect:toRect:operation:alpha:flipped:context:]):

2005-02-17  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4007262> Seed: Flight tracker scrolling moves to the left

	Added SPI for dashboard to disable wheel scrolling of the WebClipView.

        Reviewed by Ken.

        * ChangeLog:
        * WebView.subproj/WebClipView.m:
        (-[WebClipView _focusRingVisibleRect]):
        (-[WebClipView scrollWheel:]):
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate init]):
        (-[WebView drawRect:]):
        (-[WebView _dashboardBehavior:]):
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

=== Safari-187 ===

2005-02-17  Vicki Murley <vicki@apple.com>

	- roll out this change, since it causes a 1.5% performance regression

    2005-02-15  Richard Williamson   <rjw@apple.com>
        
        Fixed <rdar://problem/3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead
        
        Lie about Osaka-Mono.  Treat it as fixed pitch, even though,
        strictly speaking it isn't.  (Similar to what we do with
        Courier New.)

        Reviewed by David Harrison.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _computeWidthForSpace]):
        * WebCoreSupport.subproj/WebTextRendererFactory.h:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[NSFont _web_isFakeFixedPitch]): 
        (-[WebTextRendererFactory isFontFixedPitch:]):
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):

2005-02-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3997185> The Web view on .Mac Prefs caused System Prefs 
        to lockup (resolved by re-boot only)

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge nextKeyViewOutsideWebFrameViews]):
        Don't allow recursion here; assert on debug build, return nil on deployment. I
        couldn't get my machine into a state to repro this problem (and neither could the
        originator), but it's obvious from the stack crawl that this method was recursing
        when it shouldn't have.

2005-02-16  John Sullivan  <sullivan@apple.com>

        Written by Darin, reviewed by me.
        
        - WebKit part of fix for <rdar://problem/4007384> 
        FILTER: Bookmark of RSS with Japanese search word & multiple RSS pages loses filter

        * DOM.subproj/DOMPrivate.h:
        updated this file, which is a copy of the WebCore version

2005-02-16  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3966973> Tiger 8A357: Binary Compatiblity: frequent Webstractor.app crashes [WebImageData _nextFrame]

	Webstractor.app was playing tricks to create thumbnails of
	pages.  This caused the 'focusView' to be incorrect during
	animated GIF frame rendering.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer _startOrContinueAnimationIfNecessary]):

2005-02-16  Vicki Murley  <vicki@apple.com>

        Reviewed by me, code change by Darin.

        - fixed the build on Panther

        * WebView.subproj/WebFormDataStream.m: (webSetHTTPBody):
        Added a Panther-specific code path that just loads all the data into one big
        NSData object. This means that bug 3686434 won't be fixed on SUPanWheat; we'll
        still load the file into memory before sending it to the server on Panther.

2005-02-15  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3998368> Tiger8A376: WebTextRenderer assertion failure in Safari while browsing news.bbc.co.uk

	Removed use of FATAL_ALWAYS from getUncachedWidth().  It's unclear
	why we would trigger the FATAL_ALWAYS.  In the past we've seen
	the message triggered because of corrupt fonts.  Anyway, in this
	particular case, we will now return 0 for the character width,
	rather than exiting.

        Reviewed by David Harrison.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (getUncachedWidth):

2005-02-15  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead

	Lie about Osaka-Mono.  Treat it as fixed pitch, even though,
	strictly speaking it isn't.  (Similar to what we do with
	Courier New.)

        Reviewed by David Harrison.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _computeWidthForSpace]):
        * WebCoreSupport.subproj/WebTextRendererFactory.h:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[NSFont _web_isFakeFixedPitch]):
        (-[WebTextRendererFactory isFontFixedPitch:]):
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):

2005-02-14  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3686434> Safari uses too much RAM on file upload, leading to malloc errors and crashes (HP printers)

        * WebView.subproj/WebFormDataStream.h: Added webSetHTTPBody, which creates and connects an appropriate
        stream to an NSMutableURLRequest.
        * WebView.subproj/WebFormDataStream.m: Added implementation here.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        Use webSetHTTPBody.
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:customHeaders:postData:referrer:forDataSource:]):
        Use webSetHTTPBody.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadItem:withLoadType:]): Use webSetHTTPBody.
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): Ditto.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for this change and other recent changes.

2005-02-11  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4002505> 8A378: Endlessly animating gif's on http://www.entropy.ch
	
	If animated images had no loop count property we were incorrectly
	looping forver.  Note, that in the course of fixing this bug
	I found that ImageIO is incorrectly NOT reporting the loop count
	for a whole class of animated GIFs.

        Reviewed by Ken Kocienda.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _repetitionCount]):

=== Safari-186 ===

2005-02-11  Vicki Murley  <vicki@apple.com>

        Reviewed by Darin.

	- fix deployment build on Panther
 
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView changeBaseWritingDirection:]): ifdef out NSWritingDirectionNatural
        (-[WebHTMLView toggleBaseWritingDirection:]): fix a spacing issue

2005-02-10  David Harrison  <harrison@apple.com>

        Reviewed by Richard.

        <rdar://problem/3991652> REGRESSION (Mail): Deleting entire line in reply deletes extra blank line and moves insertion point
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _deleteRange:killRing:prepend:smartDeleteOK:isTypingAction:]):
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:isTypingAction:]):
        (-[WebHTMLView selectToMark:]):
        (-[WebHTMLView swapWithMark:]):
        (-[WebHTMLView transpose:]):
        (-[WebHTMLView _selectMarkedText]):
        (-[WebHTMLView _selectRangeInMarkedText:]):
        Adopt new default affinity of NSSelectionAffinityDownstream as of <rdar://problem/3937447>.
        
2005-02-10  Darin Adler  <darin@apple.com>

        Reviewed by Harrison.

        - fixed <rdar://problem/4002084> Setting ResourceLoadDelegate to nil can cause a crash

        * WebView.subproj/WebView.m: (-[WebView _cacheResourceLoadDelegateImplementations]):
        Set booleans to either YES or NO, rather than setting them only in the YES case.

2005-02-10  Darin Adler  <darin@apple.com>

        Reviewed by Harrison.

        - fixed <rdar://problem/3991225> Format->Style->Underline menu item does not get checked when selected text is underlined

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView validateUserInterfaceItem:]): Added tons of additional cases in here for all the
        "action" style methods in this class that don't always want to be valid. For the ones where state
        makes sense, added the state-checking code too for the menu item case.
        (-[WebHTMLView ignoreSpelling:]): Removed unnecessary "editable text only" check since this command
        would work fine on a non-editable selection.
        (-[WebHTMLView swapWithMark:]): Ditto.
        (-[WebHTMLView changeBaseWritingDirection:]): Added. Like toggle, but based on the sender's tag.

2005-02-08  Darin Adler  <darin@apple.com>

        "Reviewed" by Richard (he told me the file was obsolete).

        - got rid of an obsolete file

        * Plugins.subproj/npsap.h: Removed.
        * copy-webcore-files-to-webkit: Removed npsap.h.

2005-02-09  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/4000073> non-screen font error on www.worldofwarcraft.com

        Reviewed by John Sullivan.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _smallCapsFont]):

=== Safari-185 ===

2005-02-07  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3993354> Safari claims to put RTFD on the pasteboard, but doesn't, in some cases

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _stripAttachmentCharactersFromAttributedString:]): moved
        (-[WebHTMLView _writeSelectionWithPasteboardTypes:toPasteboard:cachedAttributedString:]): take cachedAttributedString parameter in case the attributed string was gotten already
        (-[WebHTMLView _writeSelectionToPasteboard:]): omit RTFD from the types list when there are no attachments

2005-02-07  David Harrison  <harrison@apple.com>

        Reviewed by Ken.

        <rdar://problem/3990693> REGRESSION (8A373): ctrl-k now deletes just one character instead of line
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:isTypingAction:]):
        Set the selection so that deleteKeyPressedWithSmartDelete knows what to delete.

2005-02-06  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3963166> PDFView SPI print method is being deprecated, moving to PDFDocument; please update WebKit

        * WebView.subproj/WebPDFView.m: (-[WebPDFView printOperationWithPrintInfo:]): Target the document instead of the view.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes and also moved one translation to be a file-specific
        item rather than a file-independent one.

2005-02-05  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3991974> REGRESSION: www.jabra.com world location screen does not work

        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributeNames:attributeValues:MIMEType:]): use the baseURL from the bridge rather than from the response

2005-02-04  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3802781> rtf->html pasteboard conversion using xhtml

        Reviewed by kocienda.

        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _excludedElementsForAttributedStringConversion]): new
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): call _excludedElementsForAttributedStringConversion

2005-02-04  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3832973> copy text from PowerPoint, paste into Blot (or presumably Mail) and get a single missing image icon

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): prefer RTF and RTFD over images just as NSTextView does

2005-02-03  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3555137> REGRESSION (125-173): Flash animation can erase parts of chrome (bookmarks bar & tab bar)

	convertRect:toView: returns incorrect results inside of viewWillMoveToWindow: with a nil window. Workaround this by catching this case.

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView superviewsHaveSuperviews]): new
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]): clip out the plug-in view when superviewsHaveSuperviews returns NO

2005-02-03  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3893513> Sun iPlanet app: when saving to a file it brings up a window with the thing to be saved instead

        Reviewed by adele.

        * WebView.subproj/WebTextView.m:
        (+[WebTextView unsupportedTextMIMETypes]): added "text/ldif" to the list of MIME types that our text view doesn't handle

=== Safari-183 ===

2005-02-03  Chris Blumenberg  <cblu@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: updated

2005-02-03  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3989611> Evite style "add vCalendar to calendar" do not work

        Reviewed by adele.

        * WebView.subproj/WebTextView.m:
        (+[WebTextView unsupportedTextMIMETypes]): added "text/x-vcalendar" to the list of MIME types our text view doesn't handle

2005-02-03  Vicki Murley  <vicki@apple.com>

        Reviewed by Darin.

	- fix deployment build breakage on Panther
 
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView toggleBaseWritingDirection:]):

2005-02-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        - WebKit part of fix for <rdar://problem/3980651> REGRESSION (125-180): Huge number of pages printed from certain page, 
        iFrame involved
        
        This also fixes the problems with printing from GMail, yay!

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
        Don't adjust margins for header/footer here, because this is called for each subframe.
        (-[WebHTMLView knowsPageRange:]):
        Do adjust margins for header/footer here (analogous to WebTextView and WebImageView).
        Also, round the page height to an integer here (noticed in passing).

2005-02-02  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3986546> Cut, delete, and paste menu items are active when a image is opened in window

        Reviewed by john.

        * WebView.subproj/WebView.m:
        (-[WebView _responderValidateUserInterfaceItem:]): new, has the responder validate the item 
        (-[WebView validateUserInterfaceItem:]): call VALIDATE for each repsonder selector using FOR_EACH_RESPONDER_SELECTOR macro
        (-[WebView _performResponderOperation:with:]): call factored out method _responderForResponderOperations
        (-[WebView _responderForResponderOperations]): new, code from _performResponderOperation:with:

2005-02-02  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3983628> control-click on WebView is not selecting the word under the cursor (Mail, non-editable WebView)

        Reviewed by rjw.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge selectWordBeforeMenuEvent]): new
        * WebView.subproj/WebView.m:
        (-[WebView _selectWordBeforeMenuEvent]): new SPI
        (-[WebView _setSelectWordBeforeMenuEvent:]): new SPI
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2005-02-02  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3986013> Assertion failure going back after page load error (no apparent problem in nondebug build)

        Reviewed by rjw.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _setPrimaryLoadComplete:]): don't set the data source data when the main client is nil

2005-02-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:
        
        <rdar://problem/3823109> WebKit should support -toggleBaseWritingDirection: (bidi editing support)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _applyParagraphStyleToSelection:withUndoAction:]): New function that calls through to
        new feature that allows callers to force all properties in a style to be applied as block styles.
        (-[WebHTMLView _alignSelectionUsingCSSValue:withUndoAction:]): Removed FIXME comment for something that has been fixed.
        (-[WebHTMLView toggleBaseWritingDirection:]): Implemented.

2005-02-01  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3977727> WebKit should use new SPI to support faster GIF rendering

	Note:  This REQUIRES build >= 3A362 when building on Tiger.

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _imageSourceOptions]):

=== Safari-182 ===

2005-02-01  Richard Williamson   <rjw@apple.com>

	Added new SPI for <rdar://problem/3967063> need spi on WebView to turn of lcd text for Dashboard

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (_drawGlyphs):
        * WebView.subproj/WebView.m:
        (-[WebView drawRect:]):
        (-[WebView _dashboardBehavior:]):
        (+[WebView _setShouldUseFontSmoothing:]):
        (+[WebView _shouldUseFontSmoothing]):
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2005-01-31  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3949806> REGRESSION: Source window fails to refresh correctly on reload

	The data method was being called on WebDataSource before the data was set. This fix makes WebDataSource set the data before releasing the main client instead of waiting for the main client to set it when it is dealloced.

        Reviewed by darin.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _setData:]): moved within file
        (-[WebDataSource _setPrimaryLoadComplete:]): call _setData: with the data from the main client before letting go of the main client
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient releaseResources]): removed call to _setData: since the data source may need the data before releaseResources is called

2005-01-31  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3946285> Seed: Safari crashed by selecting all at internet-moebel.com

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _hitViewForEvent:]): new, factored hit test hack to this method
        (-[WebHTMLView _updateMouseoverWithEvent:): call _hitViewForEvent:
        (-[WebHTMLView acceptsFirstMouse:]): call _setMouseDownEvent: and _isSelectionEvent: on the hit HTMLView or else when it's asked to drag it will assert
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]): ditto

2005-01-31  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/3961239> AX Setting AXFocused on AXScrollArea of AXWebArea will cause keyboard selection change

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView maintainsInactiveSelection]):
        Keep the selection when the new first respomder is our own scrollview, in both editable and non-editaqble content.

2005-01-31  Jens Alfke  <jens@apple.com>

        Reviewed by John.

	- Fixed <rdar://problem/3903199> REGRESSION: Large background patterns slide around while loading

        * WebCoreSupport.subproj/WebImageData.m:
        (drawPattern):
        (-[WebImageData tileInRect:fromPoint:context:]):

2005-01-30  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3965265> Safari displays HTML as source when default encoding is Hebrew (due to direction overrides added by encoding converter)

        * WebView.subproj/WebPreferencesPrivate.h: Added _systemCFStringEncoding, and changed
        _setInitialDefaultTextEncodingToSystemEncoding to be a class method.
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences _systemCFStringEncoding]): Added. New SPI to be used by Safari. Broken out of
        _setInitialDefaultTextEncodingToSystemEncoding, but also added cases for MacArabic and MacHebrew.
        (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]): Refactor to use _systemCFStringEncoding.

2005-01-28  Jens Alfke  <jens@apple.com>

        Reviewed by Richard.

	<rdar://problem/3727680> printing some page with WebKit generates a PDF with a 1x1 image with soft mask (causes Acrobat to hang during print spooling)

	Detect 1x1 images, extract and cache color of single pixel, reduce draw and tile operations to a color fill (or to a no-op if the pixel is clear.)

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _invalidateImages]):
        (-[WebImageData _checkSolidColor:]):
        (-[WebImageData _cacheImages:allImages:]):
        (-[WebImageData _fillSolidColorInRect:compositeOperation:context:]):
        (-[WebImageData tileInRect:fromPoint:context:]):

2005-01-28  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/3584942> AX: Safari Accessibility parent-child mismatch

        Use AppKit SPI _accessibilityParentForSubview to return KWQAccObject parent of AppKit AX object.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _accessibilityParentForSubview:]):
        New.

2005-01-28  Chris Blumenberg  <cblu@apple.com>

	WebKit side of: <rdar://problem/3951283> can view pages from the back/forward cache that should be disallowed by Parental Controls

        Reviewed by john.

        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:shouldGoToHistoryItem:]): new private delegate method
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _goToItem:withLoadType:]): call new delegate method
        * WebView.subproj/WebPolicyDelegatePrivate.h:

2005-01-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin, Hyatt and Ken.

	<rdar://problem/3790449> REGRESSION (Mail): underline behavior is flaky because of how CSS handles text-decoration

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _styleFromFontAttributes:]): Use new -khtml-text-decorations-in-effect
	property
        (-[WebHTMLView _styleForAttributeChange:]): likewise
        (-[WebHTMLView underline:]): likewise

2005-01-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleKillRing:prepend:]): New helper function. Code factored out from 
         _deleteRange:killRing:prepend:smartDeleteOK:isTypingAction:.
        (-[WebHTMLView _deleteRange:killRing:prepend:smartDeleteOK:isTypingAction:]): No longer takes 
        unused preflight argument. Now takes new isTypingAction argument. Uses isTypingAction to
        determine which flavor of delete command to call.
        (-[WebHTMLView _deleteSelection]): No longer passes unused preflight argument. Now passes new isTypingAction argument.
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:isTypingAction:]): Rearranged code to call
        correct flavor of delete command, based on whether typing should be preserved. Some other cleanups.
        (-[WebHTMLView deleteForward:]): Add _isEditable check.
        (-[WebHTMLView deleteBackward:]): Now calls _deleteWithDirection instead of having unique behavior different 
        from forward delete.
        (-[WebHTMLView deleteWordForward:]): Add new isTypingAction flag to _deleteWithDirection call.
        (-[WebHTMLView deleteWordBackward:]): Ditto.
        (-[WebHTMLView deleteToBeginningOfLine:]): Ditto.
        (-[WebHTMLView deleteToEndOfLine:]): Ditto.
        (-[WebHTMLView deleteToBeginningOfParagraph:]): Ditto.
        (-[WebHTMLView deleteToEndOfParagraph:]): Ditto.
        (-[WebHTMLView deleteToMark:]): Ditto.

=== Safari-181 ===

2005-01-27  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3973272> REGRESSION: Safari uses QT plugin to display PNG images

        Reviewed by john.

        * Plugins.subproj/WebBasePluginPackage.m: use renamed QT bundle ID

2005-01-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3829517> WebView still draws white when setDrawsBackground set to NO and no content loaded yet

        * WebView.subproj/WebFrameView.m: (-[WebFrameView drawRect:]): Check drawsBackground, and don't
        draw the white "no document" background if it's NO. This fixes things for frames with no document.
        * WebView.subproj/WebImageView.m: (-[WebImageView drawRect:]): Same as above. This fixes things
        for frames with just an image.
        * WebView.subproj/WebFrame.m: (-[WebFrame _updateDrawsBackground]): Call setDrawsBackground: on the
        document view if it implements it. This fixes things for frames with plain text.

2005-01-25  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        - WebKit part of fix for: <rdar://problem/3970670> Text context menu 
          in WebKit needs "Look Up in Dictionary" item

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (localizedMenuTitleFromAppKit):
        return English string in the case where AppKit bundle is found but doesn't
        contain the expected string. This case will be hit by people testing with
        an older AppKit.
        (-[WebDefaultUIDelegate menuItemWithTag:]):
        create Look Up in Dictionary item
        (-[WebDefaultUIDelegate contextMenuItemsForElement:]):
        add Look Up in Dictionary item and separator
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:]):
        ditto

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        new method, handles bringing up the Dictionary window. Includes FIXMEs
        for a couple of the known loose ends.
        (-[WebHTMLView validateUserInterfaceItem:]):
        handle Look Up in Dictionary item like the other new items
        
        * WebView.subproj/WebUIDelegatePrivate.h:
        added SPI constant for Look Up in Dictionary menu item

2005-01-24  Maciej Stachowiak  <mjs@apple.com>

        Fixed Panther build (missing ifdef)

        * WebView.subproj/WebDefaultContextMenuDelegate.m:

2005-01-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - WebKit part of fix for <rdar://problem/3960231> Text context menu in WebKit needs Spotlight and Google items
        
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (localizedMenuTitleFromAppKit):
        new function, gets localized string from AppKit so we can avoid adding localized
        strings to WebKit at this late date in Tiger. Returns the non-localized English
        string if we can't find the localized string in AppKit.
        (-[WebDefaultUIDelegate menuItemWithTag:]):
        handle the two new menu items by tag name
        (-[WebDefaultUIDelegate contextMenuItemsForElement:]):
        add menu items for Search in Google and Search in Spotlight to selected-text menu item
        for the noneditable case
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:]):
        add menu items for Search in Google and Search in Spotlight to selected-text menu item
        for the editable case

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _searchWithGoogleFromMenu:]):
        implement this menu item action method, using same method name and implementation as NSTextView
        (-[WebHTMLView _searchWithSpotlightFromMenu:]):
        implement this menu item action method, using same basic implementation as NSTextView
        (-[WebHTMLView validateUserInterfaceItem:]):
        validate new menu items
        
        * WebView.subproj/WebUIDelegatePrivate.h:
        define new tags for new menu items

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for these changes

2005-01-24  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebDataSource.m: (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        Do the same check as for view types, so the representation types are consistent.

2005-01-24  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3791158> REGRESSION (Mail): copyFont: and pasteFont: copy and paste only the NSFont, not other attributes

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _styleFromFontAttributes:]): Added the last
        few loose ends here: strikethrough and underline.

        - fixed <rdar://problem/3967393> add a user default that lets you turn off WebKit PDF support

        * WebView.subproj/WebFrameView.m: (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        Leave the PDF-handling classes out of the dictionary if the secret default is set.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2005-01-20  Darin Adler  <darin@apple.com>

        Reviewed by Kristin Forster.

        - fixed <rdar://problem/3964972> update _initWithCGSEvent:eventRef: call in mouse moved workaround (breaks cursors in Carbon WebKit applications)

        * Carbon.subproj/HIWebView.m: (MouseMoved): Instead of munging the event record's window number directly
        before calling _initWithCGSEvent, on Tiger we call _eventRelativeToWindow on the event after creating it.
        Also added a check so that with Macromedia Contribute's workaround in place we don't do anything at all
        to the event. Tested with both Contribute and CarbonWeb.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2005-01-20  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3815672> REGRESSION (Mail): Japanese text cannot be made bold

	The AppKit's font substitution API doesn't match font traits! 
	It only find fonts that contain the appropriate glyphs.  This
	patch attempts to find the best variation within a family.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _substituteFontForString:families:]):

=== Safari-180 ===

2005-01-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:
        
        <rdar://problem/3786659> REGRESSION (Mail): editable WebViews don't work with "size up" and "size down" NSFontManager changes

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _addToStyle:fontA:fontB:]): This is the WebKit side of the fix. Replaced unimplemented code blocks
        with FIXME's in them for make bigger and make smaller with real working code.

2005-01-19  David Hyatt  <hyatt@apple.com>

	Fix for 3513067, spaces being lost when RTL text is rendered.  Make sure not to allow hangers or spaces
	in the margin.
	
        Reviewed by john
	
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _createATSUTextLayoutForRun:style:]):

2005-01-19  Darin Adler <darin@apple.com>

        Reviewed by vicki

	- fixed <rdar://problem/3962559> stopAnimationsInView leaks after cvs-base
 
        * WebCoreSupport.subproj/WebImageData.m: (+[WebImageData stopAnimationsInView:]): add a release

2005-01-19  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3961809> plug-in code attempts to load empty URL

        Reviewed by john.

        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView didStart]): don't start load if URL is empty

2005-01-17  Darin Adler  <darin@apple.com>

        * DOM.subproj/DOMPrivate.h: Check in generated file.

2005-01-17  Darin Adler  <darin@apple.com>

        Reviewed by John and Richard.

        - fixed <rdar://problem/3907453> printing a multi-page PDF document from Safari doesn't produce correct output

        * WebView.subproj/WebFrameViewPrivate.h: Added.
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView canPrintHeadersAndFooters]): Added. Returnes NO for documents that can't print headers or footers,
        and delegates to the document view to answer the question. Defaults to NO, since only a view that actively does
        the work is compatible with our header and footer code.
        (-[WebFrameView printOperationWithPrintInfo:]): Added. Returns an NSPrintOperation set up for printing. The reason
        we return this rather than an NSView is that in the PDFView case, the print info is changed around before creating
        the NSPrintOperation, and also the PDFKit SPI works this way.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView canPrintHeadersAndFooters]): Added. Returns YES.
        * WebView.subproj/WebImageView.m: (-[WebImageView canPrintHeadersAndFooters]): Ditto.
        * WebView.subproj/WebTextView.m: (-[WebTextView canPrintHeadersAndFooters]): Ditto.

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView canPrintHeadersAndFooters]): Added. Returns NO.
        (-[WebPDFView printOperationWithPrintInfo:]): Added. Calls getPrintOperationForPrintInfo: autoRotate:YES on the PDFView.

        * WebKit.pbproj/project.pbxproj: Added WebFrameViewPrivate.h as a new private header.

2005-01-13  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3932107> Safari does not load QT Cocoa plug-in if the WebPluginMIMETypes key is not in the info.plist

	Fixing this bug required that we allow WebKit plug-ins (as well as Netscape plug-ins) support BP_CreatePluginMIMETypesPreferences
	which allows plug-ins create an auxiliary MIME types file.

        Reviewed by adele.

        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (+[WebBasePluginPackage preferredLocalizationName]): moved from WebNetscapePluginPackage
        (-[WebBasePluginPackage pListForPath:createFile:]): ditto
        (-[WebBasePluginPackage getPluginInfoFromPLists]): ditto
        (-[WebBasePluginPackage isLoaded]): return isLoaded ivar
        (-[WebBasePluginPackage load]): if loaded, get BP_CreatePluginMIMETypesPreferences symbol
        * Plugins.subproj/WebNetscapePluginPackage.h:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]): call super when done so BP_CreatePluginMIMETypesPreferences can be initialized
        * Plugins.subproj/WebPluginPackage.m:
        (-[WebPluginPackage initWithPath:]): call getPluginInfoFromPLists
        (-[WebPluginPackage load]): call super when done so BP_CreatePluginMIMETypesPreferences can be initialized

2005-01-13  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3952809> WebJavaPlugIn.h comments need method name corrected (webPlugInCallJava)

        Reviewed by Maciej.

        * Plugins.subproj/WebJavaPlugIn.h:

=== Safari-179 ===

2005-01-13  Vicki Murley <vicki@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/3946836> Safari about box lists 2004 instead of 2005

        * WebKit.pbproj/project.pbxproj: bump "2004" to "2005"

2005-01-13  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3951911> REGRESSION: Animated GIF images with loop counts no longer update

	Draw last image after animation loop terminates.  (We
	were drawing the image at index+1, which doesn't exist!)

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _nextFrame:]):

2005-01-13  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3952084> REGRESSION: Links at projectseven.com now draw and update incorrectly during hover

	Turn off use of new CGContextStrokeLineSegments API.  We should
	turn back on when 3952944 is fixed.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):

2005-01-13  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3937663> repro assertion failure and crash dragging image that has PDF source

        Reviewed by adele.

        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:rect:event:pasteboard:source:offset:]): if [WebImageRenderer image] returns nil, fallback to code that uses a file icon as the drag image
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory supportedMIMETypes]): removed code that omits PDF and PostScript from the list since this omission is only needed in WebImageView
        * WebView.subproj/WebImageView.m:
        (+[WebImageView supportedImageMIMETypes]): added code that omits PDF and PostScript since we don't want WebImageView to render these types

2005-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	<rdar://problem/3758033> REGRESSION (Mail): Support attributes in marked text (International input)
        
	* WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]): Changed to support
	underline thickness. Also added a bit of a hack here to move thickness 2 underlines down by
	.5 pixels, since the rendering engine can't give a fractional pixel offset.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView validAttributesForMarkedText]): Support underline, underline color and marked
	clause attributes. Others that NSText supports are unimplemented for now.
        (-[WebHTMLView firstRectForCharacterRange:]): Remove needless logging.
        (-[WebHTMLView unmarkText]): Updated for new WebCore SPI.
        (-[WebHTMLView _extractAttributes:ranges:fromAttributedString:]): New method to pull the attributes
	and ranges out of an attributed string.
        (-[WebHTMLView setMarkedText:selectedRange:]): Extract attributes and pass to WebCore.
        (-[WebHTMLView insertText:]): Add comment noting that we don't really handle attributed strings
	here.

2005-01-12  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3848257> WebView will draw more than AppKit asks it to, so views behind won't redraw enough (transparent WebView)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _propagateDirtyRectsToOpaqueAncestors]): As recommended by Troy Stephens, do the
        layouts here in this call, since it's before propagating the dirty rects to our ancestors.
        This fixes the bug, but we only do it if the WebView is not opaque, because otherwise we can
        optimize by only doing layouts you really need, and doing them later on is safe because we
        know we don't need to draw any of the views behind us.
        (-[WebHTMLView _layoutIfNeeded]): Added. Factored out from the method below.
        (-[WebHTMLView _web_layoutIfNeededRecursive]): Added. Like the other "layout if needed" call,
        but unconditional.
        (-[WebHTMLView _web_layoutIfNeededRecursive:testDirtyRect:]): Factored out the guts into the
        _layoutIfNeeded method above. Otherwise unchanged.
        (-[NSView _web_layoutIfNeededRecursive]): Added.

        * WebView.subproj/WebFrame.m: (-[WebFrame _updateDrawsBackground]): Call setDrawsBackground:NO
        on the scroll view when changing the frame to no longer be in "draws background" mode. This
        is needed because the frame manages the "draws background" mode of the scroll view. It won't
        have any effect if you call setDrawsBackground:NO before starting to use a WebView, but without
        it calling setDrawsBackground:NO later won't have an immediate effect (easily visible in Safari).
        This was hidden before because the HTML view was filling with transparent color, which blew away
        the fill that was done by NSScrollView.

        - fixed <rdar://problem/3921129> reproducible crash at www.funnychristmas.com in CFSet manipulation in WebImageData

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _imageSourceOptions]): Changed types so we don't need a cast.
        (+[WebImageData stopAnimationsInView:]): Instead of building a set of sets, by putting in the sets with addObject,
        build a single set using unionSet, and then iterate the objects instead of having to iterate the sets and then the
        objects in each set. The old code ended up sharing the sets with the live code, when the whole idea was to gather
        all the renderers because the process of stopping modifies the active sets.

2005-01-12  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3926825> Safari ignores GIF loop count

	Get loop count from file properties, not image properties.

        Reviewed by Ken Kocienda.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _commonTermination]):
        (-[WebImageData fileProperties]):
        (-[WebImageData _floatProperty:type:at:]):
        (-[WebImageData _floatFileProperty:type:]):
        (-[WebImageData _repetitionCount]):

2005-01-11  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3934749> assertion failure in WebBaseNetscapePluginView loading movie

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView start]): call canStart before asserting about the webView

2005-01-11  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed <rdar://problem/3446838> REGRESSION (Mail): text decorations don't print 
        (e.g. <strike>, underline)

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:withWidth:withColor:]):
        This bottleneck routine for drawing a line was setting the linewidth to 0 when
        the graphics context was not drawing to the screen. Thus, no lines. Now links
        are underlined when printing from Safari (as well as Mail).

2005-01-11  Richard Williamson   <rjw@apple.com>

	Fixed 3949145.  CG has a much faster API for drawing lines.
	Switched over to that new API (CGContextStrokeLineSegments).

        Reviewed by John Sullivan.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:withWidth:withColor:]):

2005-01-10  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3948862> REGRESSION: missing images when RTFD is pasted into editable WebView

	This problem occurred because we were creating image elements before creating corresponding image resources. The fix is to have AppKit call us back to create the resources before it creates the elements.

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): don't deal with subresources since that's now done by the following method
        (-[WebHTMLView resourceForData:preferredFilename:]): new handler method called by AppKit

=== Safari-178 ===

2005-01-06  David Harrison  <harrison@apple.com>

        Reviewed by Dave Hyatt

        <rdar://problem/3588548> AX: tabbing does not work correctly with the screen reader and a focused link; need AXFocusedUIElement to work.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView accessibilityFocusedUIElement]):
        Implement this so that AppKit can use it from NSAccessibilityHandleFocusChanged.

2005-01-05  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3936865> REGRESSION: canvas.drawImage no longer scales properly

        Reviewed by john.

        * WebCoreSupport.subproj/WebImageData.m: use the height of the inRect instead of the fromRect when setting the origin of the context

2005-01-04  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3928329> WebKit should pass nil for "language" to checkSpellingOfString:

        Reviewed by kocienda.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _isSelectionMisspelled]): pass nil not @"" for language

2004-12-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	<rdar://problem/3888931> frame naming allows malicious site to bring up a window when you click on a link in another

        Implement a security check on name frame visbility. This is the
	same rule as mozilla. You can only target frames by name if you
	are in the same window, have the same domain as the frame or an
	ancestor, or if it's a top level window have the same domain as
	the opener.
	
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _shouldAllowAccessFrom:]):
        (-[WebFrame _descendantFrameNamed:sourceFrame:]):
        (-[WebFrame findFrameNamed:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _findFrameInThisWindowNamed:sourceFrame:]):
        (-[WebView _findFrameNamed:sourceFrame:]):
        * WebView.subproj/WebViewPrivate.h:

=== Safari-177 ===

=== Safari-176 ===

2004-12-20  Richard Williamson   <rjw@apple.com>

	Add call to new API.  ImageIO deprecated some older (although
	quite new!) API.   This caused us to fail to build on 337 or later.

	Developers wanting to build on older versions of Tiger must define
	USE_DEPRECATED_IMAGESOURCE_API in WebImageData.m.

        Reviewed by Vicki.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData propertiesAtIndex:]):

2004-12-20  Richard Williamson   <rjw@apple.com>

	Don't call Tiger SPI on Panther.

        Reviewed by Vicki.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (+[WebTextRendererFactory createSharedFactory]):

2004-12-20  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3884448> WebKit should turn on CG local font cache

	Enable mutli-tier font caching.  We should see a performance boost with this
	change.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (+[WebTextRendererFactory createSharedFactory]):

2004-12-20  Richard Williamson   <rjw@apple.com>

	Fix image decoding to separately decode image meta data from actual image bits.  I
	incorrectly consolidated decode of meta data and image bits resulting in a huge
	performance regression.

	Double size of WebCore cache on lower end machines.  On the PLT run on machines with
	256MB of memory, too many images were being evicted, causing a re-decode on the PLT.
	Upping the lower limit of the cache size ensure that no images are evicted (this
	goes hand-in-hand with the change to the minimum object size from 32K to 40K).

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (+[WebImageData initialize]):
        (-[WebImageData _commonTermination]):
        (-[WebImageData _invalidateImages]):
        (-[WebImageData _invalidateImageProperties]):
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData propertiesAtIndex:]):
        (-[WebImageData _cacheImages:allImages:]):
        (-[WebImageData decodeData:isComplete:callback:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:callback:]):
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):

2004-12-20  Richard Williamson   <rjw@apple.com>

	Fixed build problem caused by change to ImageIO API.

        Reviewed by Adele.

        * WebCoreSupport.subproj/WebImageData.m:

2004-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Kevin.

        - some garbage collection fixes

        * Misc.subproj/WebNSObjectExtras.h: (WebCFAutorelease): Replaced the old WebNSRetainCFRelease with this
        much-easier-to-understand function cribbed from what David Harrison did in WebCore.

        * Misc.subproj/WebKitNSStringExtras.m: (+[NSString _web_encodingForResource:]): Use CFRelease here to
        get rid of an unnecessary use of WebNSRetainCFRelease.
        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithData:relativeToURL:]): Use WebCFAutorelease instead of WebNSRetainCFRelease and autorelease.
        (-[NSURL _web_URLWithLowercasedScheme]): Ditto.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Use WebCFAutorelease here; the old code would not
        work correctly under GC.
        * Plugins.subproj/WebNetscapePluginPackage.m: (+[WebNetscapePluginPackage preferredLocalizationName]):
        Use WebCFAutorelease here; the old code would not work correctly under GC.

2004-12-18  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3766915> PDF content needs search to work

        Reviewed by kevin, john.

        * WebView.subproj/WebPDFView.m:
	(-[WebPDFView searchFor:direction:caseSensitive:wrap:]): implemented
        (-[WebPDFView takeFindStringFromSelection:]): new
        (-[WebPDFView jumpToSelection:]): new
        (-[WebPDFView validateUserInterfaceItem:]): new

2004-12-17  Richard Williamson   <rjw@apple.com>

	Make image decoding as lazy as possible for non threaded case; in some cases
	can avoid unnecessary decoding work.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData propertiesAtIndex:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:callback:]):

2004-12-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        One of the assertions from my previous checkin fired, so
        I made this code more robust.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge _preferences]):
        new helper method, returns global preferences if webView is nil,
        otherwise returns webView's preferences
        (-[WebBridge getObjectCacheSize]):
        use new helper method, remove now-unnecessary assert
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]):
        ditto

2004-12-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed <rdar://problem/3913523> Mail needs SPI for adding tooltips to links
        - cleaned up some calls to +[WebPreferences standardPreferences] that should
          have been using -[WebView preferences]
          
        This adds a (currently SPI-only) new feature that shows the URL of the link
        under the mouse in a toolTip. I tested this in Safari, but we're adding this
        feature for Mail, and Safari won't use it (unless of course you know the
        magic defaults command)

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView start]):
        use -[WebView preferences] instead of +[WebPreferences standardPreferences]
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge getObjectCacheSize]):
        ditto
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]):
        ditto
        
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate willCacheResponse:]):
        ditto
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):
        ditto
        (-[WebFrame _loadItem:withLoadType:]):
        ditto
        
        * WebView.subproj/WebHTMLViewInternal.h:
        private struct now keeps ivar for cached value of showsURLsInToolTips
        so it doesn't have look it up in preferences a zillion times
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _updateMouseoverWithEvent:]):
        if private->showsURLsInToolTips is true, set the toolTip from the URL.
        Fall back to showing the title attribute in case some element has a title
        attribute but no URL.
        (-[WebHTMLView _mayStartDragAtEventLocation:]):
        use -[WebView preferences] instead of +[WebPreferences standardPreferences]
        (-[WebHTMLView _resetCachedWebPreferences:]):
        get a fresh value for private->showsURLsInToolTips
        (-[WebHTMLView initWithFrame:]):
        call _resetCachedWebPreferences the first time, and listen for WebPreferencesChanged notifications
        (-[WebHTMLView _handleStyleKeyEquivalent:]):
        use -[WebView preferences] instead of +[WebPreferences standardPreferences]
        
        * WebView.subproj/WebPreferenceKeysPrivate.h:
        added WebKitShowsURLsInToolTipsPreferenceKey
        
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        initialize WebKitShowsURLsInToolTipsPreferenceKey to 0
        (-[WebPreferences showsURLsInToolTips]):
        return WebKitShowsURLsInToolTipsPreferenceKey value
        (-[WebPreferences setShowsURLsInToolTips:]):
        set WebKitShowsURLsInToolTipsPreferenceKey value
        
        * WebView.subproj/WebPreferencesPrivate.h:
        add declarations for showsURLsInToolTips and setter
        
        * WebView.subproj/WebTextView.m:
        (-[WebTextView _preferences]):
        new helper method that gets preferences from webView if there is a webView,
        otherwise gets global preferences
        (-[WebTextView setFixedWidthFont]):
        use new helper method rather than always using global preferences
        (-[WebTextView initWithFrame:]):
        observe WebPreferencesChangedNotification instead of unnecessarily general
        NSUserDefaultsChangedNotification

2004-12-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - rest of WebKit fix for <rdar://problem/3790011> undoable operations all say "Undo" 
        in the menu, no specific action names
        
        I only know of one loose end currently, which I wrote up as <rdar://problem/3920971> Edit menu 
        says "Undo Change Attributes" when it should say "Undo Set Color", from font panel

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]):
        use WebUndoActionSetColor when dragging color swatch
        (-[WebHTMLView _applyStyleToSelection:withUndoAction:]):
        new WebUndoAction parameter, passed across bridge
        (-[WebHTMLView _toggleBold]):
        use WebUndoActionSetFont
        (-[WebHTMLView _toggleItalic]):
        use WebUndoActionSetFont
        (-[WebHTMLView pasteFont:]):
        use WebUndoActionPasteFont
        (-[WebHTMLView changeFont:]):
        use WebUndoActionSetFont
        (-[WebHTMLView changeAttributes:]):
        use WebUndoActionChangeAttributes
        (-[WebHTMLView _undoActionFromColorPanelWithSelector:]):
        new method, returns WebUndoActionSetBackgroundColor or WebUndoActionSetColor
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        now calls _undoActionFromColorPanelWithSelector
        (-[WebHTMLView changeColor:]):
        use WebUndoActionSetColor
        (-[WebHTMLView _alignSelectionUsingCSSValue:withUndoAction:]):
        new WebUndoAction parameter, passed through
        (-[WebHTMLView alignCenter:]):
        use WebUndoActionCenter
        (-[WebHTMLView alignJustified:]):
        use WebUndoActionJustify
        (-[WebHTMLView alignLeft:]):
        use WebUndoActionAlignLeft
        (-[WebHTMLView alignRight:]):
        use WebUndoActionAlignRight
        (-[WebHTMLView subscript:]):
        use WebUndoActionAlignSubscript
        (-[WebHTMLView superscript:]):
        use WebUndoActionAlignSuperscript
        (-[WebHTMLView unscript:]):
        use WebUndoActionAlignUnscript
        (-[WebHTMLView underline:]):
        use WebUndoActionAlignUnderline
        
        * WebView.subproj/WebView.m:
        (-[WebView setTypingStyle:]):
        pass WebUndoActionUnspecified through as new parameter since we don't have any more specific info
        (-[WebView applyStyle:]):
        ditto

2004-12-14  Richard Williamson   <rjw@apple.com>

	Helper method to get URL of plugin view.

        Reviewed by Chris.

        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _webViewURL]):

2004-12-14  Vicki Murley <vicki@apple.com>

        Reviewed by rjw.
 
	<rdar://problem/3855573> Remove reference to "WebScriptMethods" from WebScriptObject.h comments

        * Plugins.subproj/WebPlugin.h: changed instances of "WebScriptMethods" to "WebScripting" in this
	file as well, as requested in the bug report

2004-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	<rdar://problem/3912488> Mail throws an exception after backspacing "away" inline input
        
	* WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView setMarkedText:selectedRange:]): Don't try to set a selection if
	we end up with no marked text, since that case fails and is unnecessary.

2004-12-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.

        - WebKit part of plumbing of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu, 
        no specific action names

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge nameForUndoAction:]):
        renamed from setUndoActionNamePlaceholder, replaced arbitrary integers with enum values, and
        handled new "unspecified" case as a fallback

2004-12-13  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3887767> LiveConnect doesn't propagate Java exceptions back to JavaScript (prevents security suite from running)

        Reviewed by John.

        * Plugins.subproj/WebJavaPlugIn.h:

2004-12-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.
        
        - fixed <rdar://problem/3744583> Safari can not quit when a webpage has a login sheet 
        that can't be cancelled.
        
        The proper fix for this would be to change the class of the NSPanel in the nib file.
        But since this would require a localization change, I did a run-time hack instead.
        I'll file a bug about fixing this when we're out of localization freeze.

        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel replacePanelWithSubclassHack]):
        new method, creates a new panel that is identical to the original one except that
        it's our subclass, and moves all the subviews of the original panel into the new one.
        (-[WebAuthenticationPanel loadNib]):
        call replacePanelWithSubclassHack
        (-[NonBlockingPanel _blocksActionWhenModal:]):
        only method of new NSPanel subclass; overrides this SPI to allow the user to quit
        when one of these panels/sheets is on-screen

2004-12-10  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3898708> REGRESSION (8A314-8A317): World Clock's short hand not displayed (ImageIO problem with PDF?)
	Fixed <rdar://problem/3914012> use CG directly for pdf images not ImageIO

	Create a PDF document and draw that instead of using ImageIO to create a rasterized image.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData setIsPDF:]):
        (-[WebImageData isPDF]):
        (-[WebImageData dealloc]):
        (-[WebImageData decodeData:isComplete:callback:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:callback:]):
        (-[WebImageData size]):
        (-[WebImageData animate]):
        (-[WebImageData _createPDFWithData:]):
        (-[WebImageData _PDFDocumentRef]):
        (-[WebImageData _PDFDrawInContext:]):
        (-[WebImageData _PDFDrawFromRect:toRect:operation:alpha:flipped:context:]):
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer size]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:callback:]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):
        (_createImageRef):

2004-12-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3855127> Error while printing w/o sheet, then window is left in a bad state, 
        if there's no default printer set

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView beginDocument]):
        Our implementation of knowsPageRange puts the WebHTMLView into a special "printing mode". We must
        exit the "printing mode" to return to normal behavior. This is normally done in endDocument.
        However, it turns out that if there's an exception in [super beginDocument], then endDocument
        will not be called (lame-o AppKit API). So, we handle that case by catching the exception and
        exiting the "printing mode" in beginDocument when it occurs.

2004-12-09  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3905789> Burn Disc image vibrates rapidly

	Restrict our support for animated images to GIF.  We used to
	use presence of more than one image in a resource to determine
	if an image should be animated.  This caused us to animate icns!
	If we ever support any other animated image formats we'll have
	to extend.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData shouldAnimate]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer _startOrContinueAnimationIfNecessary]):

2004-12-09  Richard Williamson   <rjw@apple.com>

	Make WebPluginDatabase.h private (Dashboard needs SPI).

        * WebKit.pbproj/project.pbxproj:

=== Safari-175 ===

2004-12-09  Chris Blumenberg  <cblu@apple.com>

	Workaround for this exception being raised during download:
	[WebDownload connection:willStopBufferingData:]: selector not recognized

        Reviewed by john.

        * Misc.subproj/WebDownload.m:
        (-[WebDownload connection:willStopBufferingData:]): implement this method so no exception is raised. It is a bug in Foundation that this method is being called, but it's too late to fix Foundation since it has already been submitted this week. This workaround will prevent any problems from affecting users.

2004-12-08  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3911719> REGRESSION: Images no longer scale vertically
	Account for scaling correctly when taking into account progressively
 	loaded images.

	Also added implementation of repetition count for animated GIF images.
	Also replaced strings with new constants from CFImageProperties.h

	Also fixed possible problem with -(NSSize)size implementation,
	relevant to Panther only.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _floatProperty:type:at:]):
        (-[WebImageData _frameDurationAt:]):
        (-[WebImageData _repetitionCount]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer size]):

2004-12-08  Chris Blumenberg  <cblu@apple.com>

	Removed NPN wrappers since these no longer need to be defined to make the QT plug-in work
	since 3828925 has been fixed.

        Reviewed by john.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]): use under-bar symbols since non-under-bar wrappers have been removed
        * Plugins.subproj/npapi.m: removed NPN wrappers
        * WebKit.exp: removed symbols

2004-12-08  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView drawRect:]): Work around for this bug:
        <rdar://problem/3908282> REGRESSION (Mail): No drag image dragging selected text in Blot and Mail
        The reason for the workaround is that this method is called explicitly from the code
        to generate a drag image, and at that time, getRectsBeingDrawn:count: will return a zero count.
        This code change uses the passed-in rect when the count is zero.

2004-12-07  Administrator  <cblu@apple.com>

	Support for fix for:
	<rdar://problem/3734309> Safari doesn't open folders in title bar menu with non-Roman names using Cmd+click

        Reviewed by john.

        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithUserTypedString:relativeToURL:]): renamed to take relativeToURL parameter
        (+[NSURL _web_URLWithUserTypedString:]): call _web_URLWithUserTypedString:relativeToURL: with nil for URL

2004-12-07  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3905564> REGRESSION (Tiger); in History menu, pixel size appears but is wrong for standalone images in Safari.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer size]):

2004-12-07  Richard Williamson   <rjw@apple.com>

	Support threaded image decoding on machines w/ >= 2 CPUs.

        Reviewed by Maciej and Chris.

        * Misc.subproj/WebKitSystemBits.h:
        * Misc.subproj/WebKitSystemBits.m:
        (WebSystemMainMemory):
        (WebNumberOfCPUs):
        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (+[WebImageData initialize]):
        (-[WebImageData init]):
        (-[WebImageData _commonTermination]):
        (-[WebImageData dealloc]):
        (-[WebImageData _invalidateImages]):
        (-[WebImageData _imageSourceOptions]):
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData propertiesAtIndex:]):
        (-[WebImageData _createImages]):
        (-[WebImageData decodeData:isComplete:callback:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:callback:]):
        (drawPattern):
        (-[WebImageData tileInRect:fromPoint:context:]):
        (-[WebImageData isNull]):
        (-[WebImageData size]):
        (-[WebImageData _frameDurationAt:]):
        (-[WebImageData _frameDuration]):
        (+[WebImageData stopAnimationsInView:]):
        (-[WebImageData addAnimatingRenderer:inView:]):
        (-[WebImageData removeAnimatingRenderer:]):
        * WebCoreSupport.subproj/WebImageDecodeItem.h: Added.
        * WebCoreSupport.subproj/WebImageDecodeItem.m: Added.
        (+[WebImageDecodeItem decodeItemWithImage:data:isComplete:callback:]):
        (-[WebImageDecodeItem initWithImage:data:isComplete:callback:]):
        (-[WebImageDecodeItem finalize]):
        (-[WebImageDecodeItem dealloc]):
        * WebCoreSupport.subproj/WebImageDecoder.h: Added.
        * WebCoreSupport.subproj/WebImageDecoder.m: Added.
        (decoderNotifications):
        (+[WebImageDecoder initialize]):
        (+[WebImageDecoder notifyMainThread]):
        (+[WebImageDecoder sharedDecoder]):
        (+[WebImageDecoder performDecodeWithImage:data:isComplete:callback:]):
        (+[WebImageDecoder imageDecodesPending]):
        (+[WebImageDecoder decodeComplete:status:]):
        (-[WebImageDecoder init]):
        (-[WebImageDecoder dealloc]):
        (-[WebImageDecoder finalize]):
        (-[WebImageDecoder removeItem]):
        (-[WebImageDecoder addItem:]):
        (-[WebImageDecoder decodeItem:]):
        (decoderThread):
        (startDecoderThread):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:callback:]):
        (-[WebInternalImage incrementalLoadWithBytes:length:complete:callback:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation receivedData:withDataSource:]):
        (-[WebImageRepresentation receivedError:withDataSource:]):
        (-[WebImageRepresentation finishedLoadingWithDataSource:]):

2004-12-07  Chris Blumenberg  <cblu@apple.com>

	Fix for performance regression.

        Reviewed by kevin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:data:]): construct the WebResource without copying the data

2004-12-07  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3909243> REGRESSION: large standalone images stop loading part way through

        Reviewed by kevin.

        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient addData:]): call super so it buffers the data

2004-12-06  Richard Williamson   <rjw@apple.com>

	Use the AppKit's font rendering mode.  This fixes 3905347, but we still need to track down
	and resolve why metrics have changed for Courier.  This may be caused by changes in
	AppKit for 3902394.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (_AppkitGetCGRenderingMode):
        (getUncachedWidth):
        (_drawGlyphs):

2004-12-06  Chris Blumenberg  <cblu@apple.com>

	Forgot to commit copied header.

        * DOM.subproj/DOMPrivate.h:

2004-12-06  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3907381> NSURLConnection and WebKit buffer 2 copies of incoming data

        Reviewed by darin.

        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (+[WebBaseResourceHandleDelegate initialize]): cache check to see if Foundation supports access to its buffered data
        (-[WebBaseResourceHandleDelegate addData:]): don't buffer data if Foundation is buffering it for us
        (-[WebBaseResourceHandleDelegate saveResource]): when creating a WebResource, pass NO for copyData since we know it won't be mutated
        (-[WebBaseResourceHandleDelegate resourceData]): return the buffered data from the connection if it supports it
        (-[WebBaseResourceHandleDelegate willStopBufferingData:]): make a mutable copy of the data from NSURLConnection so we can continue buffering 
        (-[WebBaseResourceHandleDelegate willCacheResponse:]): removed optimization that used the cached response data to save the resource since that is obsolete by this change
        (-[WebBaseResourceHandleDelegate connection:willStopBufferingData:]): new callback from NSURLConnection, informs us that NSURLConnection has given up buffering
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedData:]): removed buffering code since that's done by NSURLConnection and the main client
        (-[WebDataSource _setData:]): removed unnecessary cast since the resourceData ivar is now an NSData instead of NSMutableData
        (-[WebDataSource data]): return resourceData ivar, else return the resourceData from the main client
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient releaseResources]): store resourceData on the data source so it can continue to have data after the main client has gone away 
        (-[WebMainResourceClient connection:didReceiveData:lengthReceived:]):don't call [dataSource data] just to get the length of data received since [dataSource data] can now cause data to be copied
        (-[WebMainResourceClient connectionDidFinishLoading:]): ditto
        * WebView.subproj/WebResource.m:
        (-[WebResource initWithData:URL:MIMEType:textEncodingName:frameName:]): call following method with YES for copyData
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:copyData:]): new initializer, allows caller to choose whether or not the data is copied
        * WebView.subproj/WebResourcePrivate.h:

2004-12-06  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3903749> REGRESSION (8A321): WebKit gets incorrect glyph metrics due to change in how AppKit uses CGFont

	Use CGFontRef direction when both getting font metrics and drawing
	glyphs, instead on depending on [NSFont set].

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (getUncachedWidth):
        (_drawGlyphs):

2004-12-06  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Harrison
        
        Fix for this bug:
        
        <rdar://problem/3906930> Hitting return key in editable content inserts br elements instead of blocks

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView insertNewline:]): One-line change to call insert-block rather than insert-br method 
        on bridge.

2004-12-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3846079> assertion failure in WebHTMLView(WebPrivate) removeTrackingRect at boots.com
        - fixed <rdar://problem/3857737> REGRESSION (165-166): clicking in a text field that's scrolled to the right causes it to scroll all the way left
        - fixed <rdar://problem/3861952> REGRESSION (165-166): selection is cleared when you start to scroll a frame

        * WebView.subproj/WebHTMLViewInternal.h: Added handlingMouseDown flag.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]): Allow passing in a
        tracking number of 0, which means no existing tracking number.
        (-[WebHTMLView _addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]): Ditto.
        (-[WebHTMLView removeTrackingRect:]): Allow removing a tracking number of 0, which is a no-op.
        (-[WebHTMLView _removeTrackingRects:count:]): Ditto.
        (-[WebHTMLView acceptsFirstResponder]): Changed check to use handlingMouseDown flag instead of mouseDownEvent
        field since that field is set up too early in the mouse down event handling process.
        (-[WebHTMLView mouseDown:]): Added code to set handlingMouseDown flag.

        - fixed part of <rdar://problem/3829808> Safari crashes when adding a DOM node that was removed from an XMLHTTP request result

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        Changed code around so that it won't try to create a WebResource when the load fails.

        - moved next/previous links into private structure with the rest of WebFrame fields
          (We have a rule against putting new fields into obejcts that are part of our public API.)

        * WebView.subproj/WebFrame.h: Remove _nextSibling and _previousSibling.
        * WebView.subproj/WebFramePrivate.h: Added nextSibling and previousSibling fields to private class.
        * WebView.subproj/WebFrame.m: Got rid of some tabs in this file.
        (-[WebFrame _addChild:]): Changed code to use fields inside _private.
        (-[WebFrame _removeChild:]): Ditto.
        (-[WebFrame _nextFrameWithWrap:]): Ditto.
        (-[WebFrame _previousFrameWithWrap:]): Ditto.

2004-12-04  Chris Blumenberg  <cblu@apple.com>

	New fixes for:
	<rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
	<rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)
	<rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
	<rdar://problem/3902749> REGRESSION (Tiger): missing image symbol does not appear

        Reviewed by darin, rjw, kocienda.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:data:]):
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient didFinishLoading]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]):
        (-[WebFrame _internalLoadDelegate]):
        (-[WebFrame _sendResourceLoadDelegateMessagesForURL:response:length:]):
        * WebView.subproj/WebFrameInternal.h:

2004-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed remaining bit of <rdar://problem/3814237> REGRESSION (Mail): Copy/paste style does not set color in Mail compose window

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _styleFromFontAttributes:]): When translating from
        an attribute dictionary to a CSS declaration, treat missing values according to the defaults defined
        in <AppKit/NSAttributedString.h>. Before the code was treating them as "no change", which is incorrect.

        * English.lproj/StringsNotToBeLocalized.txt: Add a string from the above change.

=== Safari-173 ===

2004-12-03  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        Roll out some recent changes by Chris that caused a performance regression.
        Fix is in hand, but it is a little risky this close to a submission. So,
        we have decided to roll back the change with the regression and roll in
        the new code after we submit.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient didFinishLoading]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]):
        (-[WebFrame _internalLoadDelegate]):
        * WebView.subproj/WebFrameInternal.h:

2004-12-02  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3841332> REGRESSION (125.9-167u): repro crash in -[KWQPageState invalidate] involving .Mac images

	Ensure that the document is cleared when leaving a non-HTML page.  This ensures that
	the b/f cache won't incorrectly trash the previous state when restoring.

        Reviewed by John.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _setState:]):

2004-12-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        <rdar://problem/3748323> Problem with -[WebView editableDOMRangeForPoint:] (-isFlipped not taken into account?)
        <rdar://problem/3852590> REGRESSION (Mail): Dropped content appears in wrong place if Mail message is scrolled down

        When implementing drag and drop, moveDragCaretToPoint: and editableDOMRangeForPoint: are used in
        concert to track the mouse and determine a drop location, respectively. However, moveDragCaretToPoint:
        did a conversion of the passed-in point to the document view's coordinate space, whereas 
        editableDOMRangeForPoint: did not. Now it does.
        
        Note that I will need to coordinate with Grant to have him roll out some code in Mail that
        attempts to work around this problem (unsuccessfully), and actually manages to block the
        real fix (which needs to be in WebKit).

        * WebView.subproj/WebView.m:
        (-[WebView editableDOMRangeForPoint:]): Convert the passed-in point to the document view's coordinate space.

2004-12-02  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3895810> FATAL ERROR: <WebTextRenderer: 0x9328a20> unable to initialize with font "Times-Roman 16.00 pt. S ....

	We have a hack to replace Times with Times New Roman if we fail
        to setup Times.  If we then fail to setup Times New Roman we
        don't attempt to further fallback to the system font.  Added
        that additional fallback.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (+[WebTextRenderer webFallbackFontFamily]):
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

2004-12-02  Richard Williamson   <rjw@apple.com>

	Fixed build problem on Tiger8A821.  Private macro and function
	we were using have been deprecated,

        Reviewed by Vicki.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

2004-12-01  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3879870> Flash Player unable to stop data stream from continuing to download by returning -1 from NPP_Write
	Also improved and cleaned-up the plug-in stream termination code.

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (+[WebBaseNetscapePluginStream reasonForError:]): return NPRES_DONE for a nil error
        (-[WebBaseNetscapePluginStream _pluginCancelledConnectionError]): new, factored out from other methods
        (-[WebBaseNetscapePluginStream errorForReason:]): new
        (-[WebBaseNetscapePluginStream dealloc]): release MIME type
        (-[WebBaseNetscapePluginStream setMIMEType:]): new
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:]): call setMIMEType so we can use it in _pluginCancelledConnectionError, call renamed methods
        (-[WebBaseNetscapePluginStream _destroyStream]): prepended underscore, replaced some early returns with asserts as the callers are now smarter
        (-[WebBaseNetscapePluginStream _destroyStreamWithReason:]): prepended underscore, only call _destroyStream if there is an error or if the load is complete and there is no more data to be streamed
        (-[WebBaseNetscapePluginStream cancelLoadWithError:]): new, overridden by subclasses to cancel the actual NSURLConnection
        (-[WebBaseNetscapePluginStream destroyStreamWithError:]): new, calls _destroyStreamWithReason
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): call renamed methods
        (-[WebBaseNetscapePluginStream _deliverData]): prepended underscore, call cancelLoadAndDestroyStreamWithError if NPP_Write returns a negative number
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView destroyStream:reason:]): call cancelLoadAndDestroyStreamWithError
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]): call destroyStreamWithError
        (-[WebNetscapePluginRepresentation cancelLoadWithError:]): new, override method, tell the data source to stop loading
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream cancelLoadWithError:]): new, override method, tell the loader to stop
        (-[WebNetscapePluginStream stop]): call cancelLoadAndDestroyStreamWithError
        (-[WebNetscapePluginConnectionDelegate isDone]): new
        (-[WebNetscapePluginConnectionDelegate didReceiveResponse:]): call cancelLoadAndDestroyStreamWithError
        (-[WebNetscapePluginConnectionDelegate didFailWithError:]): call destroyStreamWithError

2004-12-01  Kevin Decker  <kdecker@apple.com>

        Reviewed by Harrison.

	Fixed: <rdar://problem/3228878> potential performance problem in finding in large framesets

	Got rid of O(N^2) conditions in _nextSibling and _previousSibling of where we were looking up self in the parent array of frames.

        * WebView.subproj/WebFrame.h: Added two new pointers, one for the previous kid and one for the next kid
        * WebView.subproj/WebFrame.m: 
        (-[WebFrame _addChild:]): Updates the previous frame and the next frame after this child
        (-[WebFrame _removeChild:]): ditto
        (-[WebFrame _nextSibling]): just return the pointer now
        (-[WebFrame _previousSibling]): ditto

2004-11-30  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	<rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
	<rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)

        Reviewed by darin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:data:]): renamed to pass all data for the resource, moved delegate code to new method
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]): call renamed method
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient didFinishLoading]): call renamed method
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _opened]): call _sendResourceLoadDelegateMessagesForURL:response:length:, not objectLoadedFromCacheWithURL:response:data:
        (-[WebFrame _internalLoadDelegate]):
        (-[WebFrame _sendResourceLoadDelegateMessagesForURL:response:length:]): moved from objectLoadedFromCacheWithURL:response:data:
        * WebView.subproj/WebFrameInternal.h:

2004-11-29  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - worked around bug in Panther where NSScroller calls _destinationFloatValueForScroller: on superview
          without first checking if it's implemented

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _destinationFloatValueForScroller:]):
        Implemented. Calls floatValue on the scroller.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2004-11-23  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3890944> disable icon database for Dashboard

        Reviewed by kevin.

        * Misc.subproj/WebIconDatabase.h:
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase init]): don't create dictionaries if disabled
        (-[WebIconDatabase iconForURL:withSize:cache:]): return default icon if disabled
        (-[WebIconDatabase iconURLForURL:]): return nil if disabled
        (-[WebIconDatabase retainIconForURL:]): return if disabled
        (-[WebIconDatabase releaseIconForURL:]): ditto
        (-[WebIconDatabase delayDatabaseCleanup]): ditto
        (-[WebIconDatabase allowDatabaseCleanup]): ditto
        (-[WebIconDatabase _isEnabled]): new
        (-[WebIconDatabase _setIcon:forIconURL:]): assert if called when disabled, moved to own category implementation
        (-[WebIconDatabase _setHaveNoIconForIconURL:]): ditto
        (-[WebIconDatabase _setIconURL:forURL:]): ditto
        (-[WebIconDatabase _createFileDatabase]): tweak
        (-[WebIconDatabase _applicationWillTerminate:]): moved out of public code
        * Misc.subproj/WebIconDatabasePrivate.h:
        * Misc.subproj/WebIconLoader.m:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _updateIconDatabaseWithURL:]): assert if called when icon DB is disabled
        (-[WebDataSource _loadIcon]): don't load icon if icon DB is disabled

2004-11-22  David Hyatt  <hyatt@apple.com>

	Make sure the WebCore cache grows at 512mb and at 1024mb exactly.
	
        Reviewed by mjs

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge getObjectCacheSize]):

2004-11-22  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3891737> WebPreferences do not work if they are set before set on the WebView

	John found this problem and suggested the fix.

        Reviewed by John Louch.

        * WebView.subproj/WebView.m:
        (-[WebView setPreferences:]):

2004-11-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Harrison

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canPaste]): Call WebView _canPaste.
        * WebView.subproj/WebView.m:
        (-[WebView _canPaste]): Try to forward to document view's implementation. Only WebHTMLView
        answers right now. Returns NO otherwise.
        * WebView.subproj/WebViewInternal.h: Add _canPaste method to WebView.

2004-11-22  Maciej Stachowiak  <mjs@apple.com>

	Back  out the window closing fix, it seems to be causing crashes.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _detachFromParent]):

2004-11-20  Maciej Stachowiak  <mjs@apple.com>
 
        Reviewed by John.
 
 	<rdar://problem/3710101> _web_userVisibleString makes URL autocomplete roughly 2x slower
         
 	* Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSString _web_isUserVisibleURL]): New SPI to check if a URL
 	string is already in user-visible form (i.e. converting it to an
 	NSURL and then back via _web_userVisibleString would not change
 	anything).
 
2004-11-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	<rdar://problem/3190977> closing window with many tabs in it can be quite slow
        
	* WebView.subproj/WebFrame.m:
        (-[WebFrame _detachFromParent]): autorelease bridge instead of releasing it,
	to make window and tab closing more responsive - this way the deallocation happens
	after the windoow or tab appears to close.

=== Safari-172 ===

2004-11-19  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3880387> REGRESSION: www.shockplay.com site gives "Unexpected server response"

        Reviewed by mjs.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[NSData _web_locationAfterFirstBlankLine]): support both formats ("\r\n\n" and "\r\n\r\n") for separating header data from body data because Shockwave still sends the prior format

2004-11-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Harrison

        Fix for this bug:

        <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge respondToChangedContents]): No longer call through to WebKit to set the typing style. The call
        was part of the misguided use of the setTypingStyle: and typingStyle as a cache of what was stored on
        the WebCore side.
        (-[WebBridge respondToChangedSelection]): Ditto.
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): Object no longer has typingStyle ivar.
        (-[WebView setTypingStyle:]): Call over the bridge to set typing style.
        (-[WebView typingStyle]): Call over the bridge to retrieve typing style.
        * WebView.subproj/WebViewInternal.h: Object no longer has typingStyle ivar.

2004-11-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed <rdar://problem/3886042> should save history file as binary XML so serialization, 
        parsing, reading and writing is faster

        * History.subproj/WebHistory.m:
        (-[WebHistoryPrivate _saveHistoryGuts:URL:error:]):
        convert dictionary to binary data before saving

2004-11-18  Chris Blumenberg  <cblu@apple.com>

        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation currentForm]): removed stray ";"

2004-11-18  Chris Blumenberg  <cblu@apple.com>

	Fixed development build failure.

        * Misc.subproj/WebIconDatabase.m:
        (+[WebIconDatabase sharedIconDatabase]): call LOG not Log

2004-11-18  Chris Blumenberg  <cblu@apple.com>

	<rdar://problem/3885708> save memory in icon DB by not using NSSets when holding 1 object
	
        Reviewed by sullivan.

        * Misc.subproj/WebIconDatabase.m:
        (+[WebIconDatabase sharedIconDatabase]): added timing code
        (-[WebIconDatabase _clearDictionaries]): new
        (-[WebIconDatabase _loadIconDictionaries]): call _clearDictionaries in 2 places before we bail, use _web_setObjectUsingSetIfNecessary:forKey: when adding site URLs to the iconURLToURLs dictionary
        (-[WebIconDatabase _updateFileDatabase]): fixed comment
        (-[WebIconDatabase _setIconURL:forURL:]): use _web_setObjectUsingSetIfNecessary:forKey: when adding site URLs to the iconURLToURLs dictionary
        (-[WebIconDatabase _releaseIconForIconURLString:]): handle NSString objects retured from iconURLToURLs
        (-[NSMutableDictionary _web_setObjectUsingSetIfNecessary:forKey:]): new, puts a set on the dictionary when there are 2 or more object for s key

2004-11-17  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3885073> REGRESSION: Tab images at top of news.com.com replicated and squished

	Correctly account for scaled image size and clipping.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):

2004-11-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

	<rdar://problem/3885076> Don't make IDN calls for all-ascii URLs to save about 3 pages
	at Safari startup.
	
        * Misc.subproj/WebNSURLExtras.m:
        (mapHostNames): If encoding and not decoding, then bail early if the URL is all ascii.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Remove earlier special-case
	check for localhost, no longer needed.

2004-11-17  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3863601> Legacy font cache code in [WebTextRendererFactory createSharedFactory] may be unnecesary

	and added call to SPI for

	<rdar://problem/3884448> WebKit should turn on CG local font cache

	currently disabled until a Tiger build shows up with the SPI.

        Reviewed by David Harrison.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (+[WebTextRendererFactory createSharedFactory]):

2004-11-17  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3882212> REGRESSION: Images clipped instead of scaled
        Fixed <rdar://problem/3884088> Crash terminating image load

        Also added code to turn off color correction for images created
        via CGImageSources.  This code is currently disabled because CG  
        can't change the color space of images loaded progressively.
        Further, according to Dave Hayward, CG will no longer attempt
        to color correct images that don't have embedded profiles as of
        Tiger 8A306.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _commonTermination]):
        (-[WebImageData dealloc]):
        (-[WebImageData _invalidateImageProperties]):
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:]):
        (-[WebImageData propertiesAtIndex:]):

2004-11-16  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3882034> REGRESSION: Context menu incorrect for PDF content

        Reviewed by darin.

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView hitTest:]): return self if the current event is a context menu event
        (-[WebPDFView menuForEvent:]): use the PDFView subview

2004-11-15  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3880410> save 5 dirty pages by soft-linking against PDFKit framework

        Reviewed by john.

        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebPDFRepresentation.m:
        (+[WebPDFRepresentation PDFDocumentClass]): new
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]): use PDFDocumentClass
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        (+[WebPDFView PDFKitBundle]): new
        (+[WebPDFView PDFViewClass]): new
        (-[WebPDFView initWithFrame:]): create a PDFView subview
        (-[WebPDFView dealloc]): release the PDFView subview
        (-[WebPDFView PDFSubview]): new

2004-11-15  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3879891> WebKit should link against PDFKit instead of Quartz

        Reviewed by darin.

        * WebKit.pbproj/project.pbxproj: link against PDFKit if it is present instead of Quartz.framework

2004-11-15  Richard Williamson   <rjw@apple.com>

	Fixed missing retain of image property data.

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData dealloc]):
        (-[WebImageData _invalidateImages]):
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData propertiesAtIndex:]):
        (-[WebImageData _frameDuration]):

2004-11-15  Richard Williamson   <rjw@apple.com>

	Cache image properties and frame durations.
	Create NSImage and TIFF representations from CGImage, lazily, as needed for
	dragging and element info dictionary.

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData dealloc]):
        (-[WebImageData size]):
        (-[WebImageData propertiesAtIndex:]):
        (-[WebImageData _frameDurationAt:]):
        (-[WebImageData _frameDuration]):
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer TIFFRepresentation]):
        (-[WebImageRenderer image]):

2004-11-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	<rdar://problem/3879226> WebKit needlessly uses extra memory to store icon refcounts as NSNumbers	

	* Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase init]):
        (-[WebIconDatabase _setIconURL:forURL:]):
        (-[WebIconDatabase _retainIconForIconURLString:]):
        (-[WebIconDatabase _releaseIconForIconURLString:]):
        (-[WebIconDatabase _retainFutureIconForURL:]):
        (-[WebIconDatabase _releaseFutureIconForURL:]):
        * Misc.subproj/WebIconDatabasePrivate.h:

2004-11-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3879513> leak in [WebArchive _propertyListRepresentation] copying HTML to pasteboard

        * WebView.subproj/WebArchive.m:
        (-[WebArchive _propertyListRepresentation]):
        the array holding the subresources was not released after use, oops!

2004-11-12  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3874577> Opening restricted (parental) content in new window/tab reveals Safari's "Resources" folder
	
        Reviewed by john.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate openFrameInNewWindow:]): use the unreachable URL if there is one

=== Safari-171 ===

2004-11-11  Richard Williamson   <rjw@apple.com>

        Report actual size (not partial size) but use partial size
        when drawing.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData size]):

2004-11-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - added _wasFirstResponderAtMouseDownTime method to bridge so we can fix
          <rdar://problem/3846152> REGRESSION (125-166): can't drag text out of <input type=text> fields
          with a subsequent change to WebCore.

        * WebCoreSupport.subproj/WebBridge.m:
        (wasFirstResponderAtMouseDownTime:): Added. Calls _wasFirstResponderAtMouseDownTime
        on the WebHTMLView.
        (_getPreSmartSet): Move global inside the function, add (void) for cleanliness.
        (_getPostSmartSet): Ditto.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLViewPrivate dealloc]): Release firstResponderAtMouseDownTime.
        (-[WebHTMLView _setMouseDownEvent:]): Early exit if event is not changing.
        Set firstResponderAtMouseDownTime to the first responder.
        (-[WebHTMLView mouseDown:]): Release firstResponderAtMouseDownTime after handling
        the mouseDown event.
        (-[WebHTMLView _wasFirstResponderAtMouseDownTime:]): Added. Uses the
        firstResponderAtMouseDownTime field.
        * WebView.subproj/WebHTMLViewInternal.h: Added firstResponderAtMouseDownTime field
        and _wasFirstResponderAtMouseDownTime method.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2004-11-11  Richard Williamson   <rjw@apple.com>

        Reviewed by Chris.

	Work-around to minimize impact of 3876764.  Cache frame durations
	after first call.  So we'll still leak 1K for each animated
	image, but that's better than 1K each time the frame is drawn!
        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData _frameDuration]):

	Simplified animation cleanup code.  Fixed leak due to 
	incorrect key passed to CFDictionaryRemoveValue.
	
        (+[WebImageData stopAnimationsInView:]):
        (-[WebImageData addAnimatingRenderer:inView:]):
        (-[WebImageData removeAnimatingRenderer:]):
        (-[WebImageData _stopAnimation]):

2004-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3605906> Flash scrolled off the top and bottom cause CPU spin when combined with something dirty on the visible part of the page

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView drawRect:]):
        Work around AppKit bug by using rectangles from getRectsBeingDrawn:count: instead of
        using the passed-in rectangle.

2004-11-11  Richard Williamson   <rjw@apple.com>

        Work-arounds to make new ImageIO code work correctly.  Still
        disabled for now.  Requires at least Tiger 300.  Testing does
        show a 3% improvement in PLT tests!  That's huge!

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageData.m:
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:]):
        (-[WebImageData isNull]):

2004-11-10  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3396872> ICONS: icon DB inconsistencies can cause slowness during startup, idle and quit

        Reviewed by john.

        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabase objectForKey:]): added logging code
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase init]): use alloc, init rather than autorelease, retain
        (-[WebIconDatabase _loadIconDictionaries]): use 1 object for mapping icon URLs to site URLs and vice versa rather than 3. This avoids inconsistencies and is faster.
        (-[WebIconDatabase _updateFileDatabase]): write 1 object out

2004-11-09  David Hyatt  <hyatt@apple.com>

	Fix for 3873234, Safari UI is unresponsive when parsing multiple HTML docs and 3873233, Safari hangs when
	loading large local files.
	
        Reviewed by mjs

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge tokenizerProcessedData]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedMainResourceError:complete:]):
        (-[WebDataSource isLoading]):

2004-11-09  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3870964> 8A300: Safari not recognizing a PDF link (it displays raw data)

	Add "text/pdf" as an acceptable PDF MIME type.

        Reviewed by Chris.

        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):

2004-11-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3783904> Return key behavior is confusingly different between popup menus and autofill menus

        Reviewed by john.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge control:textView:shouldHandleEvent:]): new
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate control:textView:shouldHandleEvent:inFrame:]): new

2004-11-05  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3854218> Safari is sometimes really slow because of increased null events to plug-ins

        * Plugins.subproj/WebBaseNetscapePluginView.m: reverted null event interval to 0.02

2004-11-05  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3838413> REGRESSION (Mail): "Smart" word paste adds spaces before/after special characters

        Reviewed by rjw.

        * WebCoreSupport.subproj/WebBridge.m:
        (_getPreSmartSet): copied from AppKit
        (_getPostSmartSet): ditto
        (-[WebBridge isCharacterSmartReplaceExempt:isPreviousCharacter:]): new

2004-11-05  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3810702> _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector: ASSERTS when reentered from Xcode's man page viewer

        Reviewed by Maciej (a long time ago).

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadDataSource:withLoadType:formState:]):

        Fixed <rdar://problem/3845307> WebKit needs to export _HIWebViewRegisterClass so HIWebViews can work in Carbon nib files

        As suggested in the bug, the fix is to actually call 
        HIWebViewRegisterClass in WebKitInitForCarbon, rather than
        exporting the symbol.

        Reviewed by Chris.

        * Carbon.subproj/CarbonUtils.m:
        (WebInitForCarbon):
        * Carbon.subproj/HIWebView.m:
        * WebKit.pbproj/project.pbxproj:

=== Safari-170 ===

2004-11-05  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed <rdar://problem/3857151> Assertion failure in "trackingRectOwner" while moving mouse over Slashdot.org page

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]): Changed to no longer call
        addTrackingRect to do the work for consistency with the new method below. Not too much copied and pasted code.
        (-[WebHTMLView _addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]): Added an override
        for this new method in Tiger. No harm in implementing it on Panther, although it won't be called.
        (-[WebHTMLView _removeTrackingRects:count:]): Ditto.

2004-11-04  David Hyatt  <hyatt@apple.com>

	Make sure the dominant line direction is properly set for RTL runs so that spaces will reverse.

	Change xHeight to measure the ascent of the x glyph, since the xHeight metrics appear to be
	totally bogus in both CG and AppKit.
	
        Reviewed by darin

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer xHeight]):
        (-[WebTextRenderer _createATSUTextLayoutForRun:style:]):
        (-[WebTextRenderer _trapezoidForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer _ATSU_drawRun:style:geometry:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):

2004-11-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt (when I originally coded it).

        Redid WebKit part of fix for:

        <rdar://problem/3759187> REGRESSION (Mail): implement firstRectForCharacterRange:
       
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]): Call the appropriate new bridge method,
        and translate to screen coordinates.

2004-11-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Hyatt.
        
        - [NSFont menuFontOfSize:], called from WebStringTruncator, was taking > 9% of the time creating a 
        very large bookmarks menu, so I cached this one NSFont object.

        * Misc.subproj/WebStringTruncator.m:
        (defaultMenuFont):
        new function, caches the font used when no font is specified
        (+[WebStringTruncator centerTruncateString:toWidth:]):
        call new function

2004-11-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        WebCore now implements a command to insert a block in response to typing a return key, and
        some names were improved in the course of this work.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView insertNewline:]): Now calls insertLineBreak on bridge object.
        (-[WebHTMLView insertLineBreak:]): New method.
        (-[WebHTMLView insertParagraphSeparator:]): Now implemented.
        * WebView.subproj/WebView.m: 

=== Safari-169 ===

2004-10-29  Chris Blumenberg  <cblu@apple.com>

        * WebKit.exp: added _WebPlugInModeKey, forgot to add it earlier

2004-10-29  Darin Adler  <darin@apple.com>

        - fixed <rdar://problem/3855573> Remove reference to "WebScriptMethods" from WebScriptObject.h comments

        * Plugins.subproj/WebScriptObject.h: Removed unneeded #ifdef protection for multiple includes (since
        this is an Objective-C header and we use #import for those). Fixed comments as requested in the bug
        report to match the contents of the file.

2004-10-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        Added new SPI for Mail so it can get the behavior it needs when the user hits
        the return key with the selection in quoted content.

        * WebView.subproj/WebView.m
        * WebView.subproj/WebViewPrivate.h

2004-10-26  Chris Blumenberg  <cblu@apple.com>

	Fixed exception that Darin encountered in Mail.

        Reviewed by darin.

        * Plugins.subproj/WebPluginController.m:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]): if the plug-in returns a nil view, return nil

2004-10-25  Chris Blumenberg  <cblu@apple.com>

	Darin made an internal notification have the Web prefix.

        Reviewed by me.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView addWindowObservers]):
        (-[WebBaseNetscapePluginView removeWindowObservers]):
        (ConsoleConnectionChangeNotifyProc):

2004-10-25  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        - Cleanup from fix for <rdar://problem/3851676> bookmarks should not hold onto a WebHistoryItem object;
          eliminated notificationsSuppressed mechanism, which was used only by WebBookmark

        * History.subproj/WebHistoryItem.m:
        removed notificationsSuppressed ivar from private data object
        (-[WebHistoryItem setAlternateTitle:]):
        remove notificationsSuppressed guard
        (-[WebHistoryItem setURLString:]):
        ditto
        (-[WebHistoryItem setOriginalURLString:]):
        ditto
        (-[WebHistoryItem setTitle:]):
        ditto
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
        ditto
        (-[WebHistoryItem setNotificationsSuppressed:]):
        removed this method
        (-[WebHistoryItem notificationsSuppressed]):
        ditto
        
        * History.subproj/WebHistoryItemPrivate.h:
        removed notificationsSuppressed and setNotificationsSuppressed

2004-10-22  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3851491> installedPlugins being called for a page without plugins

        Reviewed by mjs.

        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _canShowMIMETypeAsHTML:]): call _viewTypesAllowImageTypeOmission instead of using ivar since the ivar is nil until _viewTypesAllowImageTypeOmission is called, this was causing [WebView canShowMIMEType:] to check plug-ins 

=== Safari-168 ===

2004-10-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * WebKit.pbproj/project.pbxproj: Add GCC_ENABLE_OBJC_GC and GCC_FAST_OBJC_DISPATCH flags.

2004-10-21  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3847994> REGRESSION: reproducible exception in WebImageRenderer releasePatternColor; afterwards get crash or no more browsing

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebInternalImage createRendererIfNeeded]): Replaced retainOrCopyIfNeeded with this.
        This returns nil if a copied renderer isn't needed, and returns a new renderer if a copy is.
        The old version was sometimes returning a WebInternalImage and other times a WebImageRenderer.
        (-[WebImageRenderer retainOrCopyIfNeeded]): Returns the result of createRendererIfNeeded
        or retains self and returns self.

2004-10-20  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed <rdar://problem/3470715> Pattern cache can get huge with use of css background-image in Safari

        * WebCoreSupport.subproj/WebImageRenderer.h: Change WebImageRenderer to be a subclass of NSObject
        rather than NSImage and contain a pointer to a WebInternalImage.
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebInternalImage releasePatternColor]): Added. Releases patternColor.
        (-[WebImageRenderer initWithMIMEType:]): Added. Makes WebInternalImage and then self.
        (-[WebImageRenderer initWithData:MIMEType:]): Ditto.
        (-[WebImageRenderer initWithContentsOfFile:]): Ditto.
        (-[WebImageRenderer dealloc]): Added. Calls releasePatternColor and then releases WebInternalImage.
        (-[WebImageRenderer image]): Added. Returns pointer to image.
        (-[WebImageRenderer MIMEType]): Added. Calls through to image.
        (-[WebImageRenderer TIFFRepresentation]): Ditto.
        (-[WebImageRenderer frameCount]): Ditto.
        (-[WebImageRenderer setOriginalData:]): Added. Sets image data pointer.
        (+[WebImageRenderer stopAnimationsInView:]): Added. Calls through to image.
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]): Ditto.
        (-[WebImageRenderer size]): Ditto.
        (-[WebImageRenderer resize:]): Ditto.
        (-[WebImageRenderer drawImageInRect:fromRect:]): Ditto.
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]): Ditto.
        (-[WebImageRenderer stopAnimation]): Ditto.
        (-[WebImageRenderer tileInRect:fromPoint:context:]): Ditto.
        (-[WebImageRenderer isNull]): Ditto.
        (-[WebImageRenderer retainOrCopyIfNeeded]): Ditto.
        (-[WebImageRenderer increaseUseCount]): Ditto.
        (-[WebImageRenderer decreaseUseCount]): Ditto.
        (-[WebImageRenderer flushRasterCache]): Ditto.
        (-[WebImageRenderer imageRef]): Ditto.
        (-[WebImageRenderer copyWithZone:]): Ditto.

        * Misc.subproj/WebNSViewExtras.m: (-[NSView _web_dragImage:rect:event:pasteboard:source:offset:]):
        Update for slight changes to WebImageRenderer API.
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]): Ditto.
        (-[WebImageRendererFactory imageRendererWithData:MIMEType:]): Ditto.
        (-[WebImageRendererFactory imageRendererWithSize:]): Ditto.
        (-[WebImageRendererFactory imageRendererWithName:]): Ditto.
        * WebView.subproj/WebImageView.m: (-[WebImageView image]): Ditto.

2004-10-20  Chris Blumenberg  <cblu@apple.com>
	
	Fixed: <rdar://problem/3846943> REGRESSION: JNLP files are rendered instead of downloaded

        Reviewed by john.

        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage isJavaPlugIn]): new
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase refresh]): don't register the Java plug-in for a document view since Java file should be downloaded when not embedded.

2004-10-20  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	<rdar://problem/3842030> WebKit needs to pass the mode (NP_FULL, NP_EMBED, etc) when calling plugInViewWithArguments
	<rdar://problem/3792852> Safari is loading the new QuickTime Cocoa plugin on Panther

        Reviewed by darin.

        * Plugins.subproj/WebPluginDocumentView.m:
        (-[WebPluginDocumentView setDataSource:]): pass "full" as the mode
        * Plugins.subproj/WebPluginPackage.m:
        (-[WebPluginPackage initWithPath:]): load plug-in with the "webplugin" extension
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributeNames:attributeValues:baseURL:]): pass "embed" as the mode
        * WebKit.pbproj/project.pbxproj:

2004-10-19  Vicki Murley <vicki@apple.com>

	- bump WebKit version to 167.1, so that we can do a quick dot submission for <rdar://problem/3843951> 

        * WebKit.pbproj/project.pbxproj:

2004-10-19  Darin Adler  <darin@apple.com>

        Change suggested by Maciej during code review.

        * WebCoreSupport.subproj/WebTextRenderer.m: Changed rounding hack table to be const so it can be in shared instead
        of private memory, and doesn't require an initialization function.
        (+[WebTextRenderer initialize]): Removed initialization.

2004-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3838934> Safari stops loading pages after rangeOfCharacterFromSet nil argument exception
        - fixed <rdar://problem/3843951> REGRESSION (166-167): Safari crashes in widthForNextCharacter (belkin.com, at startup for others)
        - fixed <rdar://problem/3841049> REGRESSION (109-110): control characters render as square boxes

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isSpace): Merged in isAlternateSpace, never used.
        (setupRoundingHackCharacterTable): Fixed size of table, was 1 entry too short. Got rid of unneeded call to bzero,
        since globals start out zeroed automatically.
        (isRoundingHackCharacter): Fixed backwards logic causing the crash in widthForNextCharacter.
        Also removed explicit compare with 1; check for non-zero is just fine.
        (fontContainsString): Change code so we'll just skip the font if the covered character set returns nil rather than
        throwing an exception like the old version did. This should make bug 3838934 go away, although perhaps covering up
        the underlying problem.
        (-[WebTextRenderer _convertCharacters:length:toGlyphs:]): Removed unused skipControlCharacters: parameter and also
        the unnecessary code to copy the buffer to change newline characters and non-break spaces to spaces.
        (-[WebTextRenderer _convertUnicodeCharacters:length:toGlyphs:]): Removed unused local.
        (-[WebTextRenderer _extendCharacterToGlyphMapToInclude:]): Added code to set up special cases for control characters,
        \n and non-break spaces.
        (-[WebTextRenderer _createATSUTextLayoutForRun:]): Added comment about the cases this code does not handle that
        are handled by the CG case.
        (widthForNextCharacter): Call isSpace instead of checking specifically for the space character here. The old code
        would not handle cases with '\n' coming across from WebCore properly.

2004-10-18  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3840916> GC: -[WebNetscapePluginPackage initWithPath:] leaks an NSURL

        Reviewed by kevin.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage initWithPath:]): use executablePath on NSBundle instead of CFBundleCopyExecutableURL

2004-10-18  Chris Blumenberg  <cblu@apple.com>

        * DOM.subproj/DOMPrivate.h: change to copied header that was never committed

2004-10-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3810183> Make WebHTMLView respect return value of webView:doCommandBySelector:

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView doCommandBySelector:]):
        only do default action if delegate returns NO; this works with Mail as of Tiger 8A275.

=== Safari-167 ===

2004-10-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Final fix for these bugs:
        
        <rdar://problem/3806306> HTML editing puts spaces at start of line
        <rdar://problem/3814252> HTML editing groups space with word causing wrapping

        This change sets some new CSS properties that have been added to WebCore to 
        enable whitespace-handling and line-breaking features that make WebView work
        more like a text editor.

        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]): Turn on special editing
        CSS properties when loading an HTML document into a WebView that is editable.
        * WebView.subproj/WebView.m:
        (-[WebView setEditable:]): Add and remove special editing CSS properties in current
        document being displayed.

2004-10-14  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3823026> making isRoundingHackCharacter use -O3 and an 8-bit lookup-table will speed "XBS" test up by 3% (actually < 1%)

        Careful testing shows a small performance gain on very large text files.  
        I saw large variations in timings, but taking the lowest PLT timing 
        with and without this change showed a 0.9% gain.  Note the cvs-base showed
        no improvement.  The improvement was for the large page attached to the
        bug.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (setupRoundingHackCharacterTable):
        (isRoundingHackCharacter):
        (+[WebTextRenderer initialize]):

2004-10-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        Fix build breakage. These three functions need to return the values from their
        calls to WebCGColorSpaceCreateXXX.

        * WebCoreSupport.subproj/WebGraphicsBridge.m:
        (-[WebGraphicsBridge createRGBColorSpace])
        (-[WebGraphicsBridge createGrayColorSpace])
        (-[WebGraphicsBridge createCMYKColorSpace])

2004-10-13  Richard Williamson   <rjw@apple.com>

	Addressed concerns in <rdar://problem/3803117> RESP: High complexity in icu uidna_IDNToASCII called by [NSString(WebNSURLExtras) _web_mapHostNameWithRange:encode:makeString:]

	In practice I saw NO improvement in performance.  Although,
	special-case tests could possibly show improvement.  Anyway,
	the changes don't hurt performance.

        Reviewed by Maciej.

        * Misc.subproj/WebNSURLExtras.m:
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]):

2004-10-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

	<rdar://problem/3824626> Change to do colormatching for DeviceRGB colorspace causes ~11% Safari slowdown
        
	- I fixed this by turning off all colormatching for WebKit
	content. We might turn it back on later. For now, it's possible to
	turn it on temporarily by defining COLORMATCH_EVERYTHING.
	
	* WebCoreSupport.subproj/WebGraphicsBridge.m:
        (-[WebGraphicsBridge setFocusRingStyle:radius:color:]):
        (-[WebGraphicsBridge additionalPatternPhase]):
        (-[WebGraphicsBridge createRGBColorSpace]):
        (-[WebGraphicsBridge createGrayColorSpace]):
        (-[WebGraphicsBridge createCMYKColorSpace]):
        * WebCoreSupport.subproj/WebImageData.m:
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer _adjustSizeToPixelDimensions]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer _adjustColorSpace]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        (-[WebImageRenderer tileInRect:fromPoint:context:]):
        (_createImageRef):
        (WebCGColorSpaceCreateRGB):
        (WebCGColorSpaceCreateGray):
        (WebCGColorSpaceCreateCMYK):
        * WebKitPrefix.h:

2004-10-13  Richard Williamson   <rjw@apple.com>

	Don't fill background with transparency unless debug flag
	is enabled.

        Reviewed by Hyatt.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView drawRect:]):

2004-10-12  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3829705> Need to remove filling w/ transparency when not drawing backgroundy.

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _transparentBackground]):
        (-[WebHTMLView _setTransparentBackground:]):
        (-[WebHTMLView drawRect:]):
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-10-11  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3802039> 8A259: Can't use Grab services to grab selection from screen

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView initialize]): register service "return types" which are types that can be inserted into a WebView
        (-[WebHTMLView writeSelectionToPasteboard:types:]): service protocol method, be sure to only write specified types
        (-[WebHTMLView readSelectionFromPasteboard:]): new, service protocol method, insert types
        (-[WebHTMLView validRequestorForSendType:returnType:]): moved, handle return types

2004-10-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3834130> nil-object-in-dictionary exception seen in -[WebView _elementAtWindowPoint:]

        * WebView.subproj/WebView.m: (-[WebView _elementAtWindowPoint:]): Added a check for nil frame.

2004-10-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3834166> <input type=file> sends onchange even when the same file is chosen twice

        * WebCoreSupport.subproj/WebFileButton.m: (-[WebFileButton chooseFilename:]):
        Do nothing if filename is the same as before.

2004-10-11  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebTextCompleteController doCompletion]): bridge call to get caret rect at a node
        now takes an affinity: caretRectAtNode:offset:affinity:.

2004-10-10  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        Fix for this bug:
        
        <rdar://problem/3814236> REGRESSION (Mail): Can't set the color of text in Mail compose window using drag/drag from color panel

        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _insertablePasteboardTypes]): Add NSColorPboardType to list.
        (-[WebHTMLView _isNSColorDrag:]): New helper. Determines if drag is an NSColor drag.
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:actionMask:]): Add a case for NSColor drags,
        else do what we did before.
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): Add a case for NSColor drags, which creates
        a CSS style containing color info and calls the bridge to apply the style. Otherwise, do what we did before.

2004-10-11  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3833848> REGRESSION (133-134): each keydown event is getting sent multiple times

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView performKeyEquivalent:]):
        Don't send an event through WebCore if it has already been through once.

2004-10-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3777253> Crash in redirect mechanism trying to display error page for bad scheme

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        add retain/autorelease to the request returned from call to super. In this case, the return value
        was being dealloc'ed before being returned.

2004-10-09  Chris Blumenberg  <cblu@apple.com>

	Fixed: 
	<rdar://problem/3625352> up and down arrow and page up/down keys don't work to scroll overflow:auto/scroll/overlay areas
	<rdar://problem/3397658> scroll wheel does not work to scroll overflow:auto/scroll/overlay areas (RSS)

        Reviewed by hyatt.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream initWithRequestURL:pluginPointer:notifyData:sendNotification:]): fixed typo in comment
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]): ditto
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _bridge]): new
        (-[WebFrameView scrollToBeginningOfDocument:]): call the bridge to scroll, if that fails, scroll the document view
        (-[WebFrameView scrollToEndOfDocument:]): ditto
        (-[WebFrameView _pageVertically:]): ditto
        (-[WebFrameView _pageHorizontally:]): ditto
        (-[WebFrameView _scrollLineVertically:]): ditto
        (-[WebFrameView _scrollLineHorizontally:]): ditto
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView scrollWheel:]): call the bridge to scroll, if that fails, pass to next responder

=== Safari-166 ===

2004-10-05  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3827002> assertion failure in WebBaseNetscapePluginStream on abc.go.com

        Reviewed by rjw.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream initWithRequestURL:pluginPointer:notifyData:sendNotification:]): avoid assertion failure in dealloc by temporarily setting isTerminated to YES in case we are released in this method
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]): ditto

2004-10-05  John Sullivan  <sullivan@apple.com>

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributeNames:attributeValues:baseURL:]):
        initialize "arguments" var to nil to satisfy compiler on deployment build.

2004-10-05  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3825442> first click lost for Dashboard
	Allow dashboard to force acceptsFirstMouse:

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView acceptsFirstMouse:]):
        * WebView.subproj/WebView.m:
        (-[WebView _dashboardBehavior:]):
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

        * WebCoreSupport.subproj/WebImageRenderer.h:
        Comment change only

2004-10-05  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3760920> Need to record plugin view instances
	
        Reviewed by rjw.

        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]): new, creates plug-in view and adds it to global list
        (+[WebPluginController isPlugInView:]): new, checks if the plug-in view is in the global list
        (-[WebPluginController destroyAllPlugins]): remove the plug-in from the global list 
        * Plugins.subproj/WebPluginDocumentView.m:
        (-[WebPluginDocumentView setDataSource:]): call [WebPluginController plugInViewWithArguments:fromPluginPackage:]
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributeNames:attributeValues:baseURL:]): ditto
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadForPluginChanges]): call [WebPluginController isPlugInView:]
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addSubview:]): ditto

2004-10-05  David Hyatt  <hyatt@apple.com>

	Fix to make selection more like NSTextView.  All gap painting is now done by WebCore, so WebKit no longer
	needs to try to fill gaps around text.
	
        Reviewed by kocienda

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_drawHighlightForRun:style:geometry:]):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:geometry:]):

2004-10-05  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3577255> custom file icon shows up upside down in <input type=file>

        * WebCoreSupport.subproj/WebFileButton.m: (-[WebFileButton setFilename:]): Added a call to
        setFlipped that fixes the problem, even though I don't know why.

2004-10-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3814237> REGRESSION (Mail): Copy/paste style does not set color in Mail compose window

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectionStartFontAttributesAsRTF]): Changed to call new bridge method
        named fontAttributesForSelectionStart, deleted the method this used to use, and renamed
        this to have the word "start" in it.
        (-[WebHTMLView copyFont:]): Updated for name change.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2004-10-04  Chris Blumenberg  <cblu@apple.com>

        * WebView.subproj/WebFrameInternal.h: removed constant declarations that I committed by mistake

2004-10-04  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3798948> NPP_URLNotify is not called if plug-in calls NPN_*URLNotfy
	Fixed a number of FIXME's related to notifying plug-ins of loaded pages.

        Reviewed by rjw.

        * Plugins.subproj/WebBaseNetscapePluginStream.h: 
		- replaced URL ivar with requestURL and responseURL ivars since we need to pass both to plug-ins
        	- added sendNotification boolean. Relying on notifyData not being NULL was not information to know whether to call NPP_URLNotify or not.
		- added isTerminated boolean because determining whether or not stream.ndata is NULL is not enough to know if the stream has been cancelled.
	* Plugins.subproj/WebBaseNetscapePluginStream.m:
        (+[WebBaseNetscapePluginStream reasonForError:]): new, factored out from receivedError:
        (-[WebBaseNetscapePluginStream initWithRequestURL:pluginPointer:notifyData:sendNotification:]): new
        (-[WebBaseNetscapePluginStream dealloc]): release new ivars
        (-[WebBaseNetscapePluginStream finalize]): added assert
        (-[WebBaseNetscapePluginStream setRequestURL:]): new
        (-[WebBaseNetscapePluginStream setResponseURL:]): new
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:]): renamed, use responseURL as it basically did before
        (-[WebBaseNetscapePluginStream startStreamWithResponse:]): call renamed method
        (-[WebBaseNetscapePluginStream destroyStream]): 
		- do nothing if terminated
		- call NPP_StreamAsFile and NPP_DestroyStream if stream.ndata is not NULL
		- call NPP_URLNotify if sendNotification is YES regardless of value of notifyData
        (-[WebBaseNetscapePluginStream receivedError:]): call reasonForError
        (-[WebBaseNetscapePluginStream deliverData]): use renamed ivar
        * Plugins.subproj/WebBaseNetscapePluginView.h:
		- added observingFrameLoadNotification boolean
		- renamed dictionary ivar to pendingFrameLoads which has WebFrame keys and WebPluginRequest values
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView addFrameLoadObserver]): new
        (-[WebBaseNetscapePluginView removeFrameLoadObserver]): new
        (-[WebBaseNetscapePluginView stop]): call removeFrameLoadObserver
        (-[WebBaseNetscapePluginView initWithFrame:]): use renamed pendingFrameLoads ivar
        (-[WebBaseNetscapePluginView dealloc]): ditto
        (-[WebBaseNetscapePluginView requestWithURLCString:]): set referrer on the request just as IE does
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]): 
		- call NPP_URLNotify depending of value of sendNotification
		- call new init method on WebBaseNetscapePluginStream rather then setting variables individually
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]): new, calls NPP_URLNotify at the right time with the right value
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithError:]): new, delegate method called from WebFrame
        (-[WebBaseNetscapePluginView loadPluginRequest:]): call addFrameLoadObserver
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]): take new sendNotification parameter and pass it
        (-[WebBaseNetscapePluginView getURLNotify:target:notifyData:]): pass YES for sendNotification
        (-[WebBaseNetscapePluginView getURL:target:]): pass NO for sendNotification
        (-[WebBaseNetscapePluginView _postURL:target:len:buf:file:notifyData:sendNotification:allowHeaders:]): take new sendNotification parameter and pass it
        (-[WebBaseNetscapePluginView postURLNotify:target:len:buf:file:notifyData:]): pass YES for sendNotification
        (-[WebBaseNetscapePluginView postURL:target:len:buf:file:]): pass NO for sendNotification
        (-[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:]): take new sendNotification parameter
        (-[WebPluginRequest sendNotification]): new
        * Plugins.subproj/WebBaseNetscapePluginViewPrivate.h:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView didStart]): set referrer on the request just as IE does
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedData:withDataSource:]): set the request URL on the stream
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:sendNotification:]): take new sendNotification parameter and pass it
        (-[WebNetscapePluginStream dealloc]): use renamed ivar
        (-[WebNetscapePluginStream start]): ditto
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _setState:]): removed notification posting code. This was only used by WebBaseNetscapePluginView and it was the wrong notification to send.
        (-[WebFrame _checkLoadCompleteForThisFrame]): call internal load delegate to tell it that the load has finished
        (-[WebFrame _loadItem:withLoadType:]): ditto
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]): ditto
        (-[WebFrame _setInternalLoadDelegate:]): new
        (-[WebFrame _internalLoadDelegate]): new
        * WebView.subproj/WebFrameInternal.h:
        * WebView.subproj/WebFramePrivate.h:

2004-10-04  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3758113> REGRESSION: Macromedia ColdFusion page doesn't show main content

	After bumping up our plug-in version, Flash now sends 2 CRLF's between the headers and body of their POST request. Our code was not prepared for this.

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[NSData _web_locationAfterFirstBlankLine]): looks for 2 CRLF's, not for 2 LF's

2004-10-04  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed a potential storage leak when we turn on CGImageRef image rendering

        * WebCoreSupport.subproj/WebImageRenderer.m: (-[WebImageRenderer dealloc]): Fix potential storage leak
        by adding [super dealloc], but leak was not real yet because the code is commented out.

        - make paste style work with color as part of fix to <rdar://problem/3814237> REGRESSION (Mail):
          Copy/paste style does not set color in Mail compose window

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectionFontAttributes]): Change structure so it's easy to add more attributes.
        For now I haven't added any yet.
        (-[WebHTMLView _colorAsString:]): Moved this earlier in the file.
        (-[WebHTMLView _shadowAsString:]): Ditto.
        (-[WebHTMLView _styleFromFontAttributes:]): Add background color, foreground color, and text shadow.

2004-09-30  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass

	Also changed dashboard regions dictionary to use "control"
	for scroller region label, instead of "scroller, per
	request from ouch. 
		
        Reviewed by Chris.

        * Plugins.subproj/npruntime.h:
        * WebView.subproj/WebView.m:
        (-[WebView _addScrollerDashboardRegions:from:]):

2004-09-30  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3498680> switching back and forth between tabs stops calling anything in a plug-in

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): call setWindowIfNecessary because the window may have changed
        (-[WebBaseNetscapePluginView updateAndSetWindow]): new
        (-[WebBaseNetscapePluginView setWindowIfNecessary]): was setWindow, this method now just sets the window
        (-[WebBaseNetscapePluginView start]): call updateAndSetWindow
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]): ditto
        (-[WebBaseNetscapePluginView viewHasMoved:]): ditto

2004-09-30  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3498668> switching out of tab doesn't send loseFocusEvent to plug-in

        Reviewed by rjw.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView setHasFocus:]): new, sends events to plug-in
        (-[WebBaseNetscapePluginView becomeFirstResponder]): call setHasFocus
        (-[WebBaseNetscapePluginView resignFirstResponder]): ditto 
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]): ditto

2004-09-30  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	Assertion failure when loading standalone netscape plug-in content.
	Document loads of WebKit plug-in content should be cancelled since the plug-in does its own loading.

        Reviewed by john.

        * Misc.subproj/WebKitErrors.m: removed deprecated method
        * Misc.subproj/WebKitErrorsPrivate.h:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]): fixed the assertion statement
        * Plugins.subproj/WebPluginDocumentView.h:
        * Plugins.subproj/WebPluginDocumentView.m:
        (-[WebPluginDocumentView dealloc]): remove retained plug-in
        (-[WebPluginDocumentView setDataSource:]): retain the plug-in, cancel the laod

2004-09-29  Chris Blumenberg  <cblu@apple.com>
	
	Fixed:
	<rdar://problem/3763832> Safari-155: Non-Embeded movies fail to open in Cocoa QT plug-in
	<rdar://problem/3820517> "*** -[WebPluginPackage NPP_New]: selector not recognized [self = 0x5552c10]"

        Reviewed by rjw.

        * History.subproj/WebHistoryItem.m:
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_firstResponderCausesFocusDisplay]):
        (-[NSView _webView]):
        (-[NSView _frame]):
        (-[NSView _bridge]):
        (-[NSView _dataSource]):
        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage hash]):
        (-[WebBasePluginPackage isQuickTimePlugIn]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController initWithDocumentView:]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]):
        (-[WebPluginController webPlugInContainerShowStatus:]):
        (-[WebPluginController webPlugInContainerSelectionColor]):
        (-[WebPluginController webFrame]):
        * Plugins.subproj/WebPluginDatabase.h:
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]):
        (-[WebPluginDatabase refresh]):
        (WebPluginDocumentView::while):
        * Plugins.subproj/WebPluginDocumentView.h: Added.
        * Plugins.subproj/WebPluginDocumentView.m: Added.
        (-[WebPluginDocumentView initWithFrame:]):
        (-[WebPluginDocumentView dealloc]):
        (-[WebPluginDocumentView drawRect:]):
        (-[WebPluginDocumentView setDataSource:]):
        (-[WebPluginDocumentView setNeedsLayout:]):
        (-[WebPluginDocumentView layout]):
        (-[WebPluginDocumentView currentWindow]):
        (-[WebPluginDocumentView viewWillMoveToWindow:]):
        (-[WebPluginDocumentView viewDidMoveToWindow]):
        (-[WebPluginDocumentView viewWillMoveToHostWindow:]):
        (-[WebPluginDocumentView viewDidMoveToHostWindow]):
        (-[WebPluginDocumentView receivedData:withDataSource:]):
        (-[WebPluginDocumentView receivedError:withDataSource:]):
        (-[WebPluginDocumentView finishedLoadingWithDataSource:]):
        (-[WebPluginDocumentView canProvideDocumentSource]):
        (-[WebPluginDocumentView documentSource]):
        (-[WebPluginDocumentView title]):
        * Plugins.subproj/npapi.m:
        (NPN_ReleaseVariantValue):
        (NPN_GetStringIdentifier):
        (NPN_GetStringIdentifiers):
        (NPN_GetIntIdentifier):
        (NPN_IdentifierIsString):
        (NPN_UTF8FromIdentifier):
        (NPN_IntFromIdentifier):
        (NPN_CreateObject):
        (NPN_RetainObject):
        (NPN_ReleaseObject):
        (NPN_Invoke):
        (NPN_InvokeDefault):
        (NPN_Evaluate):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_RemoveProperty):
        (NPN_HasProperty):
        (NPN_HasMethod):
        (NPN_SetException):
        (NPN_Call):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameRequiredForMIMEType:URL:]):
        * WebCoreSupport.subproj/WebViewFactory.m:
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDebugDOMNode.m:
        * WebView.subproj/WebDocumentInternal.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView initWithFrame:]):
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebRenderNode.m:
        * WebView.subproj/WebView.m:

2004-09-29  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3779998> bringing window to front or sending to back does not send focus/blur events to JavaScript window object

	The fix has two parts, 1) make onblur and onfocus work for windows, 
        and 2), allow the dashboard to override WebKit's special key/non-key
        behaviors.

        Reviewed by Maciej.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView restartNullEvents]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addMouseMovedObserver]):
        (-[WebHTMLView removeMouseMovedObserver]):
        * WebView.subproj/WebView.m:
        (-[WebView _dashboardBehavior:]):
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2004-09-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	- consolidated OS version checks into prefix header

        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabase _createLRUList:]):
        (+[WebFileDatabase _syncLoop:]):
        * Misc.subproj/WebKitErrors.m:
        (registerErrors):
        * Misc.subproj/WebNSObjectExtras.h:
        (WebNSRetainCFRelease):
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_declareAndWriteDragImage:URL:title:archive:source:]):
        * Misc.subproj/WebUnicode.m:
        (_unicodeDirection):
        * WebCoreSupport.subproj/WebImageData.h:
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebKeyGenerator.h:
        * WebCoreSupport.subproj/WebNewKeyGeneration.c:
        * WebKitPrefix.h:
        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        (-[WebDataSource isLoading]):
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebPDFRepresentation.h:
        * WebView.subproj/WebPDFRepresentation.m:
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:

2004-09-29  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        Fix for this bug:
        
        <rdar://problem/3818296> REGRESSION (Mail): centerSelectionInVisibleArea does not work correctly

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView centerSelectionInVisibleArea:]): Now calls new centerSelectionInVisibleArea
        bridge function instead of ensureCaretVisible. Now handles caret selections and range
        selections correctly.

2004-09-28  Chris Blumenberg  <cblu@apple.com>

	Added timing code so that Doug can time RTF conversion. 

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView writeSelectionWithPasteboardTypes:toPasteboard:]):
        (-[WebHTMLView _attributeStringFromDOMRange:]):

2004-09-28  Richard Williamson   <rjw@apple.com>

        <rdar://problem/3817421> add getter for dashboard regions (debugging)
        
        <rdar://problem/3817417> NSScrollView need autoregions for dashboard
	Also KWQScrollBars

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge dashboardRegionsChanged:]):
        * WebView.subproj/WebView.m:
        (-[WebView _setInitiatedDrag:]):
        (-[WebView _addScrollerDashboardRegions:from:]):
        (-[WebView _addScrollerDashboardRegions:]):
        (-[WebView _dashboardRegions]):
        * WebView.subproj/WebViewPrivate.h:

2004-09-27  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3814705> 8A266: Safari authentication dialog "remember password" text should match Mail

        * Panels.subproj/English.lproj/WebAuthenticationPanel.nib:
        changed "Remember this password" to "Remember this password in my keychain";
        this will need to go through CCC for this week's build.

2004-09-27  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3594754> change null event interval from 20 ms to 10 ms to match speed on Windows

        Reviewed by John.

        * Plugins.subproj/WebBaseNetscapePluginView.m:

2004-09-27  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3502138> text files don't remember scroll position when going back or reloading

        Reviewed by john.

        * WebView.subproj/WebTextView.m:
        (-[WebTextView layout]): implemented, call sizeToFit, without this scrollPoint: won't work

2004-09-27  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.

        - WebKit part of fix for <rdar://problem/3734466> ER: Support standard editing keystrokes 
        like Cmd-B while editing rich text

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _toggleBold]):
        new method, toggles font-weight from "bold" to "normal"
        (-[WebHTMLView _toggleItalic]):
        new method, toggles font-style from "italic" to "normal"
        (-[WebHTMLView _handleStyleKeyEquivalent:]):
        new method, if the new preference is set and we're in an editable state, check for standard
        key equivalents for toggling styles (just command-B and command-I for now).
        (-[WebHTMLView performKeyEquivalent:]):
        Moved in file, now calls _handleStyleKeyEquivalent:
        
        * WebView.subproj/WebPreferenceKeysPrivate.h:
        new preference key WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        initial value of WebKitRespectStandardStyleKeyEquivalentsPreferenceKey is NO (maybe we'll
        change our minds about this, but this is more guaranteed to be backward-compatible)
        (-[WebPreferences respectStandardStyleKeyEquivalents]):
        read WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
        (-[WebPreferences setRespectStandardStyleKeyEquivalents:]):
        write WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
        
        * WebView.subproj/WebPreferencesPrivate.h:
        declare getter and setter
        
        * English.lproj/StringsNotToBeLocalized.txt:
        updated for these and other recent changes

2004-09-27  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3806649> assertion failure after control-click of webcam

        Reviewed by john.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate contextMenuItemsForElement:]): don't provide "Copy Image" if the image is not fully loaded

2004-09-27  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3814810> REGRESSION (125-164): Exception adding nil to dictionary in dragging code

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setMouseDownEvent:]): new
        (-[WebHTMLView acceptsFirstMouse:]): call _setMouseDownEvent
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]): ditto
        (-[WebHTMLView mouseDown:]): ditto
        (-[WebHTMLView _delegateDragSourceActionMask]): removed temp fix, assert that the mouse event is not nil

2004-09-27  Darin Adler  <darin@apple.com>

        * WebKit.pbproj/project.pbxproj: Added WebDashboardRegion.h as a private header.

2004-09-24  Chris Blumenberg  <cblu@apple.com>

        Reviewed by rjw.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedArchive]): added timing code for copying markup

=== Safari-165 ===

2004-09-24  Chris Blumenberg  <cblu@apple.com>

	Temp fix for: <rdar://problem/3814810> REGRESSION (125-164): Exception adding nil to dictionary in dragging code

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _delegateDragSourceActionMask]): return none if the mouse down event is nil

2004-09-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:
        
        <rdar://problem/3813917> REGRESSION (125-163): The font panel will change the font of any web page
        
        We were doing a laughably bad job at preventing edits in documents that were not editable.
        This change fixes the specific case of the bug mentioned above, and makes an attempt to
        fix similar bugs by checking for whether the view is in editing mode before making edits.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _canEdit]): Renamed from _canType. Used in many more places in the code now.
        (-[WebHTMLView _isMoveDrag]): Change around code to make the meaning more clear. This one
        was actually performing a correct check before.
        (-[WebHTMLView keyDown:]): Renamed _canType to _canEdit.
        (-[WebHTMLView paste:]): Don't beep if can't paste. This matches AppKit. Any paste-related beeps
        will come from failure to handle key equivalent. Menu validation will kick in to dim menu.
        (-[WebHTMLView _applyStyleToSelection:]): Bail if !_canEdit.
        (-[WebHTMLView pasteAsPlainText:]): Ditto.
        (-[WebHTMLView _alignSelectionUsingCSSValue:]): Ditto.
        (-[WebHTMLView insertNewline:]): Ditto.
        (-[WebHTMLView insertParagraphSeparator:]): Ditto.
        (-[WebHTMLView _changeWordCaseWithSelector:]): Ditto.
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:]): Ditto.
        (-[WebHTMLView complete:]): Ditto.
        (-[WebHTMLView _changeSpellingToWord:]): Ditto. Some code rearranging to eliminate bridge local variable.
        (-[WebHTMLView ignoreSpelling:]): Ditto.
        (-[WebHTMLView yank:]): Bail if !_canEdit.
        (-[WebHTMLView yankAndSelect:]): Ditto.
        (-[WebHTMLView deleteToMark:]): Ditto.
        (-[WebHTMLView swapWithMark:]): Ditto.
        (-[WebHTMLView transpose:]): Ditto.
        (-[WebHTMLView _updateFontPanel]): Ditto. Some code rearranging to eliminate bridge local variable.
        (-[WebHTMLView setMarkedText:selectedRange:]): Bail if !_canEdit.
        (-[WebHTMLView _insertText:selectInsertedText:]): Ditto. Some code rearranging to eliminate bridge local variable.
        * WebView.subproj/WebHTMLViewPrivate.h: Renamed _canType to _canEdit.

2004-09-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * WebCoreSupport.subproj/WebDashboardRegion.h: Check in file copied from WebCore.

2004-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

	<rdar://problem/3685235> REGRESSION (Mail): links are not properly editable
        
        * WebView.subproj/WebDefaultUIDelegate.m: By default, don't allow
	link dragging if the element under the mouse pointer is
	editable. This way, you can drag-select starting inside a link.

2004-09-23  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        - WebKit part of fix for <rdar://problem/3415264> 
        Default encoding should initially be set to current system encoding

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]):
        new SPI that sets the initial value of the default text encoding to
        be the system encoding, with a special-case conversion of MacRoman->Latin1.
        This is not done automatically for WebKit clients for fear of breaking them.
        
        * WebView.subproj/WebPreferencesPrivate.h:
        declare new SPI

2004-09-23  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3811584> REGRESSION (85-125): iframe.document undefined in function called from button onclick; works from img onclick

        The fix is to not let "defers callbacks" have any effect on loading "about:blank".
        I also had to fix one bug in WebCore that could then be reproduced by going to "about:blank"
        while using a button.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:didReceiveResponse:]): Loosen asserts to allow this callback
        for the specific case of "about:blank" even if the defers callbacks flag is true.
        (-[WebMainResourceClient connectionDidFinishLoading:]): Ditto.
        (-[WebMainResourceClient loadWithRequestNow:]): Added NSURLRequest return value. Loosened asserts
        as above. Changed code to return a new request if we get a new request back that is not empty
        when the defers callbacks flag is true.
        (-[WebMainResourceClient loadWithRequest:]): If the defers callbacks flag is set, but the
        URL is one that gives us an empty document, then do the work right away, don't defer it.

2004-09-23  Darin Adler  <darin@apple.com>

        - fixed B&I builds by checking in generated file

        * WebCoreSupport.subproj/WebDashboardRegion.h: Added.

2004-09-22  Richard Williamson   <rjw@apple.com>

	Pass dashboard regions to UI delegate.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge dashboardRegionsChanged:]):
        * WebView.subproj/WebUIDelegatePrivate.h:
        * copy-webcore-files-to-webkit:

2004-09-22  Chris Blumenberg  <cblu@apple.com>

	Fixed build that I just broke.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]):

2004-09-22  Chris Blumenberg  <cblu@apple.com>

	<rdar://problem/3812091> REGRESSION (Mail): double-clicked word is not smart inserted on drag

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): pass value for smartMove

2004-09-22  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	<rdar://problem/3667301> Frequent crashes in Mail when viewing HTML messages (CFURLGetByteRangeForComponent)
	<rdar://problem/3810354> WebResourceLoadDelegate can't refuse requests by returning nil; code asserts/crashes instead

        Reviewed by rjw.

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]): removed broken code that handled loadWithRequest returning NO
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): if nil is returned from the client for willSendRequest, report the cancelled error and return

2004-09-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _webcore_effectiveFirstResponder]): New function to yield the correct responder
        to check for firstResponder-ness before calling makeFirstResonder. This helps to prevent 
        unwanted firstResponder switching.
        * WebView.subproj/WebView.m:
        (-[WebView _webcore_effectiveFirstResponder]): Ditto.

2004-09-21  Chris Blumenberg  <cblu@apple.com

	Fixed:
	<rdar://problem/3735071> REGRESSION (Mail): WebCore Editing must do smart paste
	<rdar://problem/3799163> REGRESSION (Mail): Deleting a word doesn't delete whitespace

        Reviewed by darin.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _replaceSelectionWithArchive:selectReplacement:]): pass NO for smartReplace
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]): pass parameter for smartReplace using _canSmartReplaceWithPasteboard
        (-[WebHTMLView _changeSpellingFromMenu:]): pass NO for smartReplace
        (-[WebHTMLView pasteboardTypesForSelection]): include WebSmartPastePboardType when _canSmartCopyOrDelete return YES
        (-[WebHTMLView writeSelectionWithPasteboardTypes:toPasteboard:]): ditto
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): pass parameter for smartReplace using _canSmartReplaceWithPasteboard
        (-[WebHTMLView delete:]): call _deleteSelection
        (-[WebHTMLView cut:]): don't call delegate twice, call _deleteRange to delete
        (-[WebHTMLView pasteAsPlainText:]): pass parameter for smartReplace using _canSmartReplaceWithPasteboard
        (-[WebHTMLView _changeWordCaseWithSelector:]): pass NO for smartReplace
        (-[WebHTMLView deleteBackward:]): call _deleteSelection when there is a selected range
        (-[WebHTMLView _changeSpellingToWord:]): pass NO for smartReplace
        (-[WebHTMLView deleteToMark:]): pass NO for smartDeleteOK
        (-[WebHTMLView transpose:]): pass NO for smartReplace
        (-[WebHTMLView _shouldDeleteRange:]): moved
        (-[WebHTMLView _deleteRange:preflight:killRing:prepend:smartDeleteOK:]): moved, handle smartDelete
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:]): moved
        (-[WebHTMLView _deleteSelection]): new
	(-[WebHTMLView _canSmartReplaceWithPasteboard]): new
	(-[WebHTMLView _canSmartCopyOrDelete]): new
        (-[WebHTMLView setMarkedText:selectedRange:]): pass NO for smartReplace
        (-[WebHTMLView _discardMarkedText]): call _deleteSelection
        (-[WebTextCompleteController _insertMatch:]): pass NO for smartReplace
        (-[WebTextCompleteController endRevertingChange:moveLeft:]): pass NO for smartReplace
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]): set smartInsertDeleteEnabled to YES
        (-[WebView replaceSelectionWithNode:]): pass NO for smartReplace
        (-[WebView replaceSelectionWithText:]): pass NO for smartReplace
        (-[WebView replaceSelectionWithMarkupString:]): pass NO for smartReplace
        (-[WebView deleteSelection]): call _deleteSelection on WebHTMLView

2004-09-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.

        - WebKit part of fix for <rdar://problem/3618274> REGRESSION (125-135): 
        Option-tab doesn't always work as expected

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]):
        Don't set WebCoreKeyboardAccessFull when setting WebCoreKeyboardAccessTabsToLinks
        after all; these need to be tested independently to get the option-tab behavior
        correct.

2004-09-21  John Sullivan  <sullivan@apple.com>

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView doCommandBySelector:]):
        Commented out part of previous change; it breaks Mail editing until Mail
        fixes bug 3810158.

2004-09-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView doCommandBySelector:]):
        Fix build failure from previous checkin, d'oh! Didn't set up webview variable.

2004-09-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3809477> WebHTMLView needs to pass doCommandBySelector through delegate

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView doCommandBySelector:]):
        Call through to editing delegate. If editing delegate returns YES, don't call super.

        * WebView.subproj/WebDefaultEditingDelegate.m:
        (-[WebDefaultEditingDelegate webView:doCommandBySelector:]):
        default implementation (which was never called) was returning YES, but it should
        return NO to signal that it didn't handle the selector.
        
2004-09-21  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3647229> Safari does not play inline Windows Media Content on some sites (miggy.net and ministryofsound.com)

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView initWithFrame:plugin:URL:baseURL:MIMEType:attributeKeys:attributeValues:]): set the plug-in before calling setting the attributes, so we can avoid passing certain attributes to the WMP plug-in that cause it to crash

2004-09-20  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3781290> REGRESSION (Mail): Crash in ReplaceSelectionCommandImpl attaching file to new message

        Reviewed by kocienda.

        * WebView.subproj/WebView.m:
        (-[WebView setEditable:]): call updateSelectionFromEmpty on the bridge if there is no selection

2004-09-20  Chris Blumenberg  <cblu@apple.com>

	Changes to implement renamed bridge methods.

        Reviewed by darin.

        * ChangeLog:
        * DOM.subproj/WebDOMOperations.m:
        (-[DOMDocument URLWithAttributeString:]): call renamed bridge method
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributeNames:attributeValues:baseURL:]): take 2 parameter arrays rather than 1 which will have to be parsed
        (-[WebBridge viewForPluginWithURL:attributeNames:attributeValues:MIMEType:]): ditto

2004-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        * WebView.subproj/WebFramePrivate.h: Added back.
        * WebView.subproj/WebFrameViewPrivate.h: Removed.

2004-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3655360> REGRESSION (Mail): Ctrl-V emacs key binding, -pageDown: method, unimplemented (and pageUp, and selection-modifying versions)
        - fixed <rdar://problem/3792138> REGRESSION (Mail): Spell checker doesn't check current selected word

        * WebView.subproj/WebFrameViewInternal.h: Moved WebFrameViewPrivate inside the WebFrameView.m file.
        Removed a bunch of methods that don't need to be seen in other files, and added _verticalPageScrollDistance.
        * WebView.subproj/WebFrameViewPrivate.h: Removed. Renamed to WebFrameViewInternal.h.
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _verticalKeyboardScrollDistance]): Move in the file because of internal vs. private.
        (-[WebFrameView _shouldDrawBorder]): Ditto.
        (-[WebFrameView _tile]): Ditto.
        (-[WebFrameView _verticalPageScrollDistance]): Added. Separate method so it can be called
        by the code to implement pageDown:.
        (-[WebFrameView _drawBorder]): Move in the file because of internal vs. private.
        (-[WebFrameView _goBack]): Ditto.
        (-[WebFrameView _goForward]): Ditto.
        (-[WebFrameView _scrollVerticallyBy:]): Ditto.
        (-[WebFrameView _scrollHorizontallyBy:]): Ditto.
        (-[WebFrameView _horizontalKeyboardScrollDistance]): Ditto.
        (-[WebFrameView _horizontalPageScrollDistance]): Added. Separate method for consistency with
        vertical method above.
        (-[WebFrameView _pageVertically:]): Moved and changed to use _verticalPageScrollDistance.
        (-[WebFrameView _pageHorizontally:]): Moved and changed to use _horizontalPageScrollDistance.
        (-[WebFrameView _scrollLineVertically:]): Move in the file because of internal vs. private.
        (-[WebFrameView _scrollLineHorizontally:]): Ditto.
        (-[WebFrameView scrollPageUp:]): Ditto.
        (-[WebFrameView scrollPageDown:]): Ditto.
        (-[WebFrameView scrollLineUp:]): Ditto.
        (-[WebFrameView scrollLineDown:]): Ditto.
        (-[WebFrameView _firstResponderIsControl]): Ditto.
        (-[WebFrameView keyDown:]): Changed to eliminate _pageLeft, _lineLeft, _pageRight, and _lineRight.

        * WebView.subproj/WebDataSource.m: Use WebFrameView.h instead of WebFrameViewPrivate.h.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _alterCurrentSelection:verticalDistance:]): Added.
        (-[WebHTMLView moveToBeginningOfDocument:]): Use WebSelectToDocumentBoundary.
        (-[WebHTMLView moveToBeginningOfDocumentAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToEndOfDocument:]): Ditto.
        (-[WebHTMLView moveToEndOfDocumentAndModifySelection:]): Ditto.
        (-[WebHTMLView moveParagraphBackwardAndModifySelection:]): Added.
        (-[WebHTMLView moveParagraphForwardAndModifySelection:]): Added.
        (-[WebHTMLView pageUp:]): Added.
        (-[WebHTMLView pageDown:]): Added.
        (-[WebHTMLView pageUpAndModifySelection:]): Added.
        (-[WebHTMLView pageDownAndModifySelection:]): Added.
        (-[WebHTMLView showGuessPanel:]): Changed to call advanceToNextMisspellingStartingJustBeforeSelection.
        This fixes the problem with spell checking.

        * WebView.subproj/WebImageView.m:
        (-[WebImageView webView]): Changed to use _web_parentWebView.
        (-[WebImageView menuForEvent:]): Changed to use [self webView].
        (-[WebImageView mouseDown:]): Ditto.
        (-[WebImageView mouseDragged:]): Ditto.
        (-[WebImageView draggedImage:endedAt:operation:]): Ditto.

        * WebView.subproj/WebTextView.m:
        (-[WebTextView _textSizeMultiplierFromWebView]): Changed to use _web_parentWebView.
        (-[WebTextView menuForEvent:]): Ditto.
        (-[WebTextView drawPageBorderWithSize:]): Ditto.
        (-[WebTextView knowsPageRange:]): Ditto.

        * Plugins.subproj/WebPluginDatabase.m: Updated filename of WebFrameViewInternal.h.
        * WebCoreSupport.subproj/WebBridge.m: Ditto.
        * WebKit.pbproj/project.pbxproj: Ditto.
        * WebView.subproj/WebFrame.m: Ditto.
        * WebView.subproj/WebView.m: Ditto.
        * Misc.subproj/WebNSViewExtras.m: Ditto.

2004-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - added helper method _web_parentWebView so fewer files need to get at WebFrame private methods

        * Misc.subproj/WebNSViewExtras.h: Added _web_parentWebView.
        * Misc.subproj/WebNSViewExtras.m: (-[NSView _web_parentWebView]): Added.

=== Safari-164 ===

2004-09-17  Chris Blumenberg  <cblu@apple.com>
	
    	Fixed:
	<rdar://problem/3805757> don't unnecessarily put RTFD on the pasteboard
	<rdar://problem/3805756> strip attachments before generating RTF

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView writeSelectionWithPasteboardTypes:toPasteboard:]): only put RTFD on the pasteboard if it has attachments, strip attachments when writing RTF

2004-09-16  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3804648> 8A262: Safari crashed in -[WebView(WebPrivate) _editingDelegateForwarder] inside QuickTime Cocoa Plug-in during WebView deallocation

        * WebView.subproj/WebView.m: (-[WebView _editingDelegateForwarder]):
        Check _private for nil before dereferencing it.

2004-09-16  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3779150> REGRESSION: images not copied when copying HTML in Safari and pasting into TextEdit

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView writeSelectionWithPasteboardTypes:toPasteboard:]): use RTFDFromRange:: for RTFD
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-09-15  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed assertion I saw using the font panel

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _colorAsString:]):
        Convert color space before trying to get R, G, and B components.

2004-09-15  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3802232> REGRESSION (Mail): WebCore Editing must do smart copy
	
        Reviewed by kocienda.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _writeSelectionToPasteboard:]): call instance method not class method to get pasteboard types since the types depends on the current selection granularity
        (-[WebHTMLView pasteboardTypesForSelection]): if the selection granularity is "word" include the smart pasteboard type
        (-[WebHTMLView writeSelectionWithPasteboardTypes:toPasteboard:]): put nil on the pasteboard for smart copy

2004-09-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3788894> REGRESSION (Mail): ctrl-t emacs key binding does not work (transpose)
        - fixed <rdar://problem/3798946> REGRESSION (Mail): Cursor does not disappear when typing

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView keyDown:]): Hide cursor by calling setHiddenUntilMouseMoves:YES.
        (-[WebHTMLView transpose:]): Added.

2004-09-14  Richard Williamson   <rjw@apple.com>

        1.  Add class parameter to object allocation function.  This is somewhat redundant, given that
        the allocation function is in the class function vector, but people wanted to use the same
        allocation function for different classes.
        
        2.  Renamed NPN_Class to NPN_Invoke to match the name in the function vector.
        
        3.  Add support for a default function on an object.  This is a feature that ActiveX supports,
        and will allow JavaScript code to be written that will look exactly the same for both ActiveX
        plugins and Netscape or WebKit plugins.  There are implementations included for the 'C' and
        'Objective-C' bindings.
        
        There bugs are covered by
        
        <rdar://problem/3776343> Support for default functions in the JavaScript bindings
        <rdar://problem/3779186> NPN_Call needs to be renamed to NPN_Invoke
        <rdar://problem/3674754> Need to implement latest npruntime.h

        Reviewed by John.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins.subproj/WebScriptObject.h:
        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:

2004-09-13  Richard Williamson   <rjw@apple.com>

        D'oh.  How many times can I screw up a simple fix!

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

2004-09-13  Richard Williamson   <rjw@apple.com>

        Fixed snafu from 3782533 checkin.
        
        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

2004-09-12  Chris Blumenberg  <cblu@apple.com>

	Support for: <rdar://problem/3794790> drop rate or time remaining from download status when window is too small to fit it

        Reviewed by john.

        * Misc.subproj/WebStringTruncator.h:
        * Misc.subproj/WebStringTruncator.m:
        (+[WebStringTruncator widthOfString:font:]): new

2004-09-10  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3782533> CrashTracer: .1459 crashes at com.apple.WebKit: -[WebTextRenderer initWithFont:usingPrinterFont:] + 0x138

        We were explicitly failing when we encountered deprecated fonts.
        (Those with unsupported glyph packings).
        Deprecated fonts should only appear on a system that have 
        stuff migrated from OS 9.  Ugh, thats probably why we've never seen
        the problem here.
        
        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

2004-09-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.
        
        - added _isFrameSet as a private method, so it can be used in WebBrowser.
        This is needed to merge the fix for 3123987 to SUPanNavy.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _isFrameSet]):
        new method
        
        * WebView.subproj/WebFramePrivate.h:
        declare new method

2004-09-09  Chris Blumenberg  <cblu@apple.com>

	Support for: <rdar://problem/3795485> debug menu item to enable RSS animation on first layout

        Reviewed by rjw.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge didFirstLayout]): new
        * WebView.subproj/WebDefaultFrameLoadDelegate.m:
        (-[WebDefaultFrameLoadDelegate webView:didFirstLayoutInFrame:]): new
        * WebView.subproj/WebViewPrivate.h:

2004-09-09  Richard Williamson   <rjw@apple.com>

        Alternate implementation of image rendering.  Use CGImageRefs instead
        of NSImages.
        
        Mostly works, but currently disabled because of issues w/ CG.
        
        Reviewed by Chris.

        * ChangeLog:
        * WebCoreSupport.subproj/WebImageData.h: Added.
        * WebCoreSupport.subproj/WebImageData.m: Added.
        (-[WebImageData _commonTermination]):
        (-[WebImageData dealloc]):
        (-[WebImageData finalize]):
        (-[WebImageData copyWithZone:]):
        (-[WebImageData numberOfImages]):
        (-[WebImageData currentFrame]):
        (-[WebImageData _invalidateImages]):
        (-[WebImageData imageAtIndex:]):
        (-[WebImageData incrementalLoadWithBytes:length:complete:]):
        (drawPattern):
        (-[WebImageData tileInRect:fromPoint:context:]):
        (-[WebImageData isNull]):
        (-[WebImageData size]):
        (-[WebImageData _frameDuration]):
        (-[WebImageData _repetitionCount]):
        (-[WebImageData isAnimationFinished]):
        (+[WebImageData stopAnimationsInView:]):
        (-[WebImageData addAnimatingRenderer:inView:]):
        (-[WebImageData removeAnimatingRenderer:]):
        (-[WebImageData _stopAnimation]):
        (-[WebImageData _nextFrame:]):
        (-[WebImageData animate]):
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]):
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer copyWithZone:]):
        (-[WebImageRenderer retainOrCopyIfNeeded]):
        (-[WebImageRenderer resize:]):
        (-[WebImageRenderer size]):
        (-[WebImageRenderer MIMEType]):
        (-[WebImageRenderer frameCount]):
        (-[WebImageRenderer isNull]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer drawImageInRect:fromRect:]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):
        (-[WebImageRenderer tileInRect:fromPoint:context:]):
        (-[WebImageRenderer _startOrContinueAnimationIfNecessary]):
        (+[WebImageRenderer stopAnimationsInView:]):
        (-[WebImageRenderer stopAnimation]):
        (-[WebImageRenderer targetAnimationRect]):
        (-[WebImageRenderer increaseUseCount]):
        (-[WebImageRenderer decreaseUseCount]):
        (-[WebImageRenderer flushRasterCache]):
        (-[WebImageRenderer imageRef]):
        (-[WebImageRenderer TIFFRepresentation]):
        (-[WebImageRenderer image]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]):
        (-[WebImageRendererFactory imageRendererWithData:MIMEType:]):
        (-[WebImageRendererFactory imageRendererWithSize:]):
        (-[WebImageRendererFactory imageRendererWithName:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView image]):

=== Safari-163 ===

2004-09-09  Maciej Stachowiak  <mjs@apple.com>

        - rolled out last two changes, they seem to cause a performance regression

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]):

2004-09-09  Maciej Stachowiak  <mjs@apple.com>

        - fixed build

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]):

2004-09-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

	WebKit part of fix for:
	
	<rdar://problem/3759187> REGRESSION (Mail): implement firstRectForCharacterRange:

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView firstRectForCharacterRange:]): Call the appropriate new bridge method,
	and translate to screen coordinates.

2004-09-09  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3790526> mark-related methods not implemented (needed for people with them in their key bindings files)

        * WebKit.pbproj/project.pbxproj: Update MACOSX_DEPLOYMENT_TARGET to 10.3 and add -fobjc-exceptions
        so we can use new exceptions.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView setMark:]): Added.
        (unionDOMRanges): Added.
        (-[WebHTMLView deleteToMark:]): Added.
        (-[WebHTMLView selectToMark:]): Added.
        (-[WebHTMLView swapWithMark:]): Added.
        (-[WebHTMLView markedRange]): Updated for change to bridge method names.
        (-[WebHTMLView hasMarkedText]): Ditto.
        (-[WebHTMLView unmarkText]): Ditto.
        (-[WebHTMLView _selectMarkedText]): Ditto.
        (-[WebHTMLView _selectRangeInMarkedText:]): Ditto.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto.
        (-[WebHTMLView _insertText:selectInsertedText:]): Removed check for empty string. An empty string
        should not be filtered out here. We need to allow inserting an empty string.
        (-[WebHTMLView _selectionIsInsideMarkedText]): Updated for change to bridge method names.
        (-[WebHTMLView _updateSelectionForInputManager]): Ditto.

        * WebView.subproj/WebView.m: (-[WebView searchFor:direction:caseSensitive:wrap:]):
        Changed to use selectionDOMRange instead of selectionStart.

        * WebView.subproj/WebHTMLRepresentation.h: Removed unused setSelectionFrom method.
        * WebView.subproj/WebHTMLRepresentation.m: Ditto.

2004-09-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed the localization aspect of: 
        <rdar://problem/3790011> undoable operations all say "Undo" in the menu, no specific action names
        
        We now have all the strings ready for localization; we just don't actually use them yet.

        * English.lproj/Localizable.strings:
        updated for this change
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setUndoActionNamePlaceholder]):
        added this placeholder method whose purpose is to hold localizable strings for all the Undo
        action names that NSTextView uses. Later we will use some or all of these, but we can do
        that part after the localization freeze.

2004-09-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3778785> REGRESSION (Mail): copying from MS word and pasting into editable region leaves internal clipboard data

        Reviewed by kocienda.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): ignore Microsoft's header meta data

2004-09-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3792893> WebBaseResourceHandleDelegate always returns cached data for subresource loads

        Reviewed by rjw.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate _canUseResourceForRequest:]): new
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): call _canUseResourceForRequest:

2004-09-08  Chris Blumenberg  <cblu@apple.com>

	Forgot to add this in previous check-in.	

        * English.lproj/WebViewEditingContextMenu.nib: Added.

2004-09-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3791240> WebKit uses the NSTextViewContextMenu nib from inside AppKit

        Reviewed by john.

        * English.lproj/StringsNotToBeLocalized.txt:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:]): use our copy of the nib

2004-09-07  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2004-09-07  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3790143> exception raised when dragging a URL with 2-byte characters

	(checked in with last check-in)

2004-09-07  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	<rdar://problem/3080103> Need to pass cmd-modified keys to plug-ins
	<rdar://problem/3751509> can't use safari edit menu to copy and paste with Vantage Learning's My Access

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m: fake up command-key events for cut, copy, paste and select all so these menu items work for plug-ins
        (-[WebBaseNetscapePluginView sendModifierEventWithKeyCode:character:]):
        (-[WebBaseNetscapePluginView cut:]):
        (-[WebBaseNetscapePluginView copy:]):
        (-[WebBaseNetscapePluginView paste:]):
        (-[WebBaseNetscapePluginView selectAll:]):

2004-09-07  Darin Adler  <darin@apple.com>

        - fixed deployment build

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _deleteWithDirection:granularity:killRing:]):
        Initialize prepend variable.

2004-09-06  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3696542> REGRESSION (Mail): Editable WebKit doesn't support underline yet (in the iChat profile window, at least)
        - fixed <rdar://problem/3780249> REGRESSION (Mail): copy style/paste style doesn't work in HTML editing in Mail
        - fixed <rdar://problem/3788857> REGRESSION (Mail): Home and End keys don't work in message composer
        - fixed <rdar://problem/3788884> REGRESSION (Mail): ctrl-d emacs key binding does not work (delete forward)
        - fixed <rdar://problem/3788890> REGRESSION (Mail): ctrl-k emacs key binding does not work (delete to end of paragraph)
        - fixed <rdar://problem/3788899> REGRESSION (Mail): ctrl-y emacs key binding does not work (yank)
        - fixed <rdar://problem/3788901> REGRESSION (Mail): ctrl-o emacs key binding does not work (insert newline in front of insertion point)
        - fixed <rdar://problem/3788908> REGRESSION (Mail): ctrl-left-arrow emacs key binding does not work (move to beginning of line)
        - fixed <rdar://problem/3788913> REGRESSION (Mail): ctrl-right-arrow emacs key binding does not work (move to end of line)
        - implemented a first cut at other attribute changes from Text Panel besides underline (bugs?)
        - dealt with a couple of FIXMEs in WebHTMLView.m
        - updated list of not-yet-implemented methods in WebHTMLView.m
        - fixed many deletion operations to call the correct editing delegate methods

        * WebView.subproj/WebFrameViewPrivate.h: Remove _scrollToTopLeft and _scrollToBottomLeft.
        No one was calling them anyway, so they should really have been marked internal and not private.
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView scrollToBeginningOfDocument:]): Renamed _scrollToTopLeft to this, so the home key
        would start working with the key bindings machinery.
        (-[WebFrameView scrollToEndOfDocument:]): Same thing, for end key.
        (-[WebFrameView keyDown:]): Update for name changes, and also make sure we don't try to grab
        control-arrow keys here (probably not necessary, but good anyway).

        * WebView.subproj/WebHTMLViewInternal.h: Added keyDownEvent field, and startNewKillRingSequence
        and nextResponderDisabledOnce flags.
        * WebView.subproj/WebHTMLView.m:
        Rearrange declarations at the top of the file so that external things are up with
        the #import directives and things inside this file are declared below.
        (-[WebHTMLView _shouldReplaceSelectionWithText:givenAction:]): Ditto.
        (-[WebHTMLView _calculatePrintHeight]): Moved up into the "internal to file" category.
        (-[WebHTMLView _updateTextSizeMultiplier]): Ditto.
        (-[WebHTMLView _selectedRange]): Added.
        (-[WebHTMLView _openLinkFromMenu:]): Left this method lying around even though I deleted the
        other APPKIT_CODE_FOR_REFERENCE in case this shows up in the context menu we are now sharing
        with the AppKit. Chris will look at this later, and he can delete it then.
        (+[WebHTMLView initialize]): Call _NSInitializeKillRing.
        (-[WebHTMLView _documentRange]): Added.
        (-[WebHTMLView string]): Call the bridge to get the plain text rather than making an attributed
        string and then getting the text from there.
        (-[WebHTMLView becomeFirstResponder]): Set startNewKillRingSequence flag, so that new deletions
        will create a new kill ring entry.
        (-[WebHTMLView moveToBeginningOfDocument:]): Use backward direction instead of left direction.
        (-[WebHTMLView moveToBeginningOfDocumentAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToBeginningOfLine:]): Ditto.
        (-[WebHTMLView moveToBeginningOfLineAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToBeginningOfParagraph:]): Ditto, also use WebSelectToParagraphBoundary.
        (-[WebHTMLView moveToBeginningOfParagraphAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToEndOfDocument:]): Use forward direction instead of right direction.
        (-[WebHTMLView moveToEndOfDocumentAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToEndOfLine:]): Ditto.
        (-[WebHTMLView moveToEndOfLineAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToEndOfParagraph:]): Ditto, also use WebSelectToParagraphBoundary.
        (-[WebHTMLView moveToEndOfParagraphAndModifySelection:]): Ditto.
        (-[WebHTMLView _shouldDeleteRange:]): Added.
        (-[WebHTMLView _deleteRange:preflight:killRing:prepend:]): Added.
        (-[WebHTMLView delete:]): Changed to call new _deleteRange method.
        (-[WebHTMLView cut:]): Changed to preflight property and call new _deleteRange method.
        (-[WebHTMLView _selectionFontAttributes]): Added.
        (-[WebHTMLView _selectionFontAttributesAsRTF]): Added.
        (-[WebHTMLView _fontAttributesFromFontPasteboard]): Added.
        (-[WebHTMLView _emptyStyle]): Added.
        (-[WebHTMLView _styleFromFontAttributes:]): Added.
        (-[WebHTMLView _applyStyleToSelection:]): Added.
        (-[WebHTMLView copyFont:]): Implemented.
        (-[WebHTMLView pasteFont:]): Implemented.
        (-[WebHTMLView _originalFontA]): Added.
        (-[WebHTMLView _originalFontB]): Added.
        (-[WebHTMLView _addToStyle:fontA:fontB:]): Added. Has code from the method that figures out
        what the font manager is doing for changeFont:, now needed for changeAttribute: too.
        (-[WebHTMLView _styleFromFontManagerOperation]): Renamed and now calls shared methods.
        (-[WebHTMLView changeFont:]): Call shared method, still does the same thing.
        (-[WebHTMLView _colorAsString:]): Added. Has code from the method we were using with the
        color panel before.
        (-[WebHTMLView _shadowAsString:]): Added.
        (-[WebHTMLView _styleForAttributeChange:]): Added.
        (-[WebHTMLView changeAttributes:]): Implemented.
        (-[WebHTMLView _styleFromColorPanelWithSelector:]): Renamed and now calls shared methods.
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]): Call method by new name.
        (-[WebHTMLView changeDocumentBackgroundColor:]): Call method by new name.
        (-[WebHTMLView changeColor:]): Changed around a bit; still doesn't work yet.
        (-[WebHTMLView _alignSelectionUsingCSSValue:]): Call shared methods.
        (-[WebHTMLView indent:]): Removed, since NSTextView doesn't implement this method. Added to list
        of methods to possibly implement later in the file.
        (-[WebHTMLView insertTab:]): Call insertText: to save code and so we get WebViewInsertActionTyped
        instead of WebViewInsertActionPasted.
        (-[WebHTMLView changeCaseOfLetter:]): Removed, since NSTextView doesn't implement this method.
        Added to list of methods to possibly implement later in the file.
        (-[WebHTMLView _deleteWithDirection:granularity:killRing:]): Added.
        (-[WebHTMLView deleteForward:]): Implemented. This makes Control-D work.
        (-[WebHTMLView deleteBackwardByDecomposingPreviousCharacter:]): Implemented by just calling
        deleteBackward for now; probably better than doing nothing.
        (-[WebHTMLView deleteWordForward:]): Changed to call new _delete method above. Fixes things
        so that we delete the selection if there is one, get the appropriate delegate calls, handle
        the kill ring properly, and don't do any selection if we can't delete.
        (-[WebHTMLView deleteWordBackward:]): Ditto.
        (-[WebHTMLView deleteToBeginningOfLine:]): Ditto.
        (-[WebHTMLView deleteToEndOfLine:]): Ditto.
        (-[WebHTMLView deleteToBeginningOfParagraph:]): Ditto.
        (-[WebHTMLView deleteToEndOfParagraph:]): Ditto. Added additional behavior needed since this
        is bound to Control-K, so it's not really just delete to end of paragraph.
        (-[WebHTMLView insertNewlineIgnoringFieldEditor:]): Added. Calls insertNewline:.
        (-[WebHTMLView insertTabIgnoringFieldEditor:]): Added. Calls insertTab:.
        (-[WebHTMLView subscript:]): Added.
        (-[WebHTMLView superscript:]): Added.
        (-[WebHTMLView unscript:]): Added.
        (-[WebHTMLView underline:]): Added.
        (-[WebHTMLView yank:]): Added.
        (-[WebHTMLView yankAndSelect:]): Added. Calls _insertText.
        (-[WebHTMLView _arrowKeyDownEventSelectorIfPreprocessing:]): Added. Part of workaround for
        control-arrow key trouble.
        (-[WebHTMLView respondsToSelector:]): Added. More of workaround.
        (-[WebHTMLView nextResponder:]): Added. More of workaround.
        (-[WebHTMLView _selectionChanged]): Set startNewKillRingSequence flag, so that new deletions
        will create a new kill ring entry.
        (-[WebHTMLView _updateFontPanel]): Remove a bunch of code here that wasn't working very well
        because it walked a DOM range incorrectly, and instead use the new method that does all the
        right stuff on the other side of the bridge.
        (-[WebHTMLView _insertText:selectInsertedText:]): Added new helper method for use by both
        insertText and yankAndSelect, with most of the guts of insertText and one additional parameter.
        (-[WebHTMLView insertText:]): Call the new _insertText.

        * WebView.subproj/WebView.m: Use macros to make the forwarding from WebView more terse.
        Updated the list to include a few methods it didn't before.

2004-09-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - put preference keys in a private header file so Safari can use them for Managed Preferences

        * WebView.subproj/WebPreferenceKeysPrivate.h:
        new Private header file, includes the #defines for NSUserDefaults preference keys
        
        * WebView.subproj/WebPreferences.m:
        moved the preference key #defines out of here; now imports WebPreferenceKeysPrivate.h

        * WebKit.pbproj/project.pbxproj:
        updated for new file

2004-09-03  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3782543> CrashTracer: ...87 crashes at com.apple.WebKit: -[WebNetscapePluginPackage initWithPath:] + 0x18c

        Reviewed by john.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage initWithPath:]): make sure the file is at least 8 bytes long before calling memcmp

2004-09-03  Chris Blumenberg  <cblu@apple.com>
	
	Fixed:
	<rdar://problem/3788328> assertion failure when moving an image
	<rdar://problem/3783628> REGRESSION (Mail): when I try to reorder an image, the image is duplicated

        * DOM.subproj/WebDOMOperations.m:
        (-[DOMDocument _createRangeWithNode:]): new, convenience
        (-[DOMDocument _documentRange]): use _ createRangeWithNode:
        * DOM.subproj/WebDOMOperationsPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]): set the selection to the image when starting the drag. This allows "move selection" to work and this matches NSText's behavior

=== Safari-162 ===

2004-09-02  Richard Williamson   <rjw@apple.com>

        Support for patterns in <canvas>.  
        (These changes attempt to create a CGImageRef from a WebImageRenderer that
        is used by the pattern drawing function.)
        
        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer finalize]):
        (-[WebImageRenderer imageRef]):
        (_createImageRef):
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:

2004-09-01  Chris Blumenberg  <cblu@apple.com>

	Fixed deployment build failure.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]):

2004-08-31  Chris Blumenberg  <cblu@apple.com>

	Fixed: 
	<rdar://problem/3699498> Context menu for editable WebViews should provide items like Cut and Paste
	<rdar://problem/3781535> REGRESSION (Mail): no context menu after ctrl-clicking a misspelled word

        Reviewed by kocienda.

        * English.lproj/Localizable.strings:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]): updated to handle new menu items
        (-[WebDefaultUIDelegate contextMenuItemsForElement:]): renamed from webView:contextMenuItemsForElement:defaultMenuItems:
        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:]): new
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): moved, now call contextMenuItemsForElement: or editingContextMenuItemsForElement:
        * WebView.subproj/WebDefaultUIDelegate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _isSelectionMisspelled]): new
        (-[WebHTMLView _guessesForMisspelledSelection]): new
        (-[WebHTMLView _changeSpellingFromMenu:]): new
        (-[WebHTMLView _ignoreSpellingFromMenu:]): new
        (-[WebHTMLView _learnSpellingFromMenu:]): new
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebUIDelegate.h:

2004-08-31  Darin Adler  <darin@apple.com>

        - fixed B&I build failure

        * WebView.subproj/WebHTMLView.m: (-[WebTextCompleteController _buildUI]):
        Work around unwanted warning by adding a cast.

2004-08-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	<rdar://problem/3778314> REGRESSION: Can't proceed to survey questions on Lominger's Apple website
        
	Because we will stop parsing when there is a pending redirection,
	avoid setting one if no navigation would actually take place
	because the number of steps is out of range.

	* WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canGoBackOrForward:]):

2004-08-30  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - part of fix for <rdar://problem/3637519> REGRESSION (125-128): unrepro crash in QListBox::sizeForNumberOfLines at istweb.apple.com

        * WebCoreSupport.subproj/WebTextRendererFactory.m: (-[WebTextRendererFactory clearCaches]):
        Call [super clearCaches].

2004-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - did work to prepare for uploading files incrementally when submitting forms

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem _setFormInfoFromRequest:]): Use NSArray instead of NSData for form data.
        (-[WebHistoryItem formData]): Ditto.
        * History.subproj/WebHistoryItemPrivate.h: Ditto.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:customHeaders:postData:]): Ditto.
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]): Ditto.
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): Ditto.
        * WebCoreSupport.subproj/WebSubresourceClient.h: Ditto.
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:customHeaders:postData:referrer:forDataSource:]): Ditto.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadItem:withLoadType:]): Ditto.
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): Ditto.
        * WebView.subproj/WebFramePrivate.h: Ditto.

        * WebView.subproj/WebFormDataStream.h: Added.
        * WebView.subproj/WebFormDataStream.m:
        (-[WebFormDataStream initWithFormDataArray:]): Placeholder; not done yet.
        (-[WebFormDataStream formDataArray]): Ditto.
        * WebKit.pbproj/project.pbxproj: Added WebFormDataStream files.

2004-08-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.

        - WebKit part of fix for <rdar://problem/3607720> myFrame.print() prints the window 
        but should only print the frame

        * WebView.subproj/WebUIDelegatePrivate.h:
        declare new delegate method that includes which frame to print

        * WebView.subproj/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:printFrameView:]):
        implement default (no-op) version of new delegate method

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge print]):
        call new delegate method if available, otherwise call old delegate method, for
        backward compatibility.

2004-08-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John. 
        Checked in by Ken
        
        Ken comments: It looks like Maciej forgot to land this when he checked in the
        WebCore portion of this change.

        <rdar://problem/3778314> REGRESSION: Can't proceed to survey questions on Lominger's Apple website
            
        Because we will stop parsing when there is a pending redirection,
        avoid setting one if no navigation would actually take place
        because the number of steps is out of range.
    
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canGoBackOrForward:]):

2004-08-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        Fix for this bug:
        
        <rdar://problem/3756997> WebKit aggressive in making pasted text into a URL, even when it's not much like a URL

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): Don't try so hard to coerce data
        on the pasteboard into a URL, and do not make an anchor with an href for any URLs that are 
        explicitly present on the pasteboard. Also, move URL pasteboard type check beneath the RTF
        checks.

=== Safari-161 ===

2004-08-26  Chris Blumenberg  <cblu@apple.com>

	Fixed build failure on Panther.

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): ifdef'd out call to AppKit SPI
        (-[WebHTMLView _attributeStringFromDOMRange:]): ditto

2004-08-26  Chris Blumenberg  <cblu@apple.com>

	Tweak to last check-in.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]):

2004-08-26  Chris Blumenberg  <cblu@apple.com>

	Fixed: 
	<rdar://problem/3546412> support for pasting and drag and dropping of RTF and RTFD to editable WebViews
	<rdar://problem/3745345> use AppKit for converting from DOM to RTF

        Reviewed by rjw.

        * DOM.subproj/WebDOMOperations.m:
        (-[DOMDocument _documentRange]): new
        * DOM.subproj/WebDOMOperationsPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): call AppKit SPI to get a document fragment from an attributed string
        (-[WebHTMLView string]): added a FIXME
        (-[WebHTMLView _attributeStringFromDOMRange:]): new, calls AppKit SPI that creates an attributed string from a DOM Range
        (-[WebHTMLView attributedString]): call _attributeStringFromDOMRange:, fallback to old code if it returns nil
        (-[WebHTMLView selectedAttributedString]): ditto

2004-08-26  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3774178> Plugin hooks for selected state aren't being called

        Reviewed by darin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setIsSelected:forView:]): don't forget colons in method names

2004-08-26  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3768439> can't click in WebView in Carbon WebKit apps (GetEventPlatformEventRecord returns false)

        Reviewed by rjw.

        * Carbon.subproj/HIWebView.m:
        (Click): use WebGetEventPlatformEventRecord not GetEventPlatformEventRecord
        (MouseUp): ditto
        (MouseMoved): ditto
        (MouseDragged): ditto
        (MouseWheelMoved): ditto
        (WindowHandler): ditto
        (HIWebViewEventHandler): ditto
        (UpdateObserver): ditto
        (WebGetEventPlatformEventRecord): Call GetEventPlatformEventRecord, if that fails fallback to the current event. This is code Eric Schlegel to me to use. 

2004-08-24  Chris Blumenberg  <cblu@apple.com>

	Fixed with help from Trey:
	<rdar://problem/3764856> REGRESSION !25-154): Safari accepts mouse clicks (follows links) when not key

        Reviewed by rjw.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _isSelectionEvent:]): brought back from CVS
        (-[WebHTMLView acceptsFirstMouse:]): only call eventMayStartDrag if _isSelectionEvent returns YES since we only want to allow selection dragging on the first mouse down
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]): ditto

2004-08-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        Improved the checks used to see if certain operations can be done based
        on the state of the selection and whether the selection is editable. I
        added some helpers and improved some others to assist in making these
        determinations.
        
        This helps to fix this bug:
        <rdar://problem/3764987> Crash after adding newline to quoted text
        
        Since some editing methods expect the the selection to be in a certain state 
        in order to work, these checks help obviate crashes like 3764987.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _writeSelectionToPasteboard:]): _haveSelection name changed to _hasSelection.
        (-[WebHTMLView _canCopy]): Checks to see if state is appropriate to perform this operation.
        (-[WebHTMLView _canCut]): Ditto. Function added.
        (-[WebHTMLView _canDelete]): Ditto. Function refined.
        (-[WebHTMLView _canPaste]): Ditto. Function refined.
        (-[WebHTMLView _canType]): Ditto. Function added.
        (-[WebHTMLView _hasSelection]): Name changed from _haveSelection.
        (-[WebHTMLView _hasSelectionOrInsertionPoint]): Added.
        (-[WebHTMLView _isEditable]): Added.
        (-[WebHTMLView takeFindStringFromSelection:]): _haveSelection name changed to _hasSelection.
        (-[WebHTMLView validateUserInterfaceItem:]): Ditto
        (-[WebHTMLView validRequestorForSendType:returnType:]): Ditto
        (-[WebHTMLView keyDown:]):
        (-[WebHTMLView copy:]): Uses new _canCopy check.
        (-[WebHTMLView cut:]): Uses new _canCut check.
        (-[WebHTMLView delete:]): Now uses _canDelete check.
        (-[WebHTMLView paste:]): Now uses _canPaste check.
        (-[WebHTMLView _updateFontPanel]): _haveSelection name changed to _hasSelection.
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView writeSelectionWithPasteboardTypes:toPasteboard:]): Use selectionState check to
        determine whether or not operation can be done.

2004-08-24  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3770469> Some PDFs open with line of previous page above PDF view
	
        Set height resize flags on WebPDFView.
		
        Reviewed by Chris.

        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView initWithFrame:]):

2004-08-24  David Hyatt  <hyatt@apple.com>

	Add Atom and RSS MIME types to set of supported XML types.
	
        Reviewed by rjw

        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):

2004-08-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin.

	- remove annoying ERROR spew and replace with comment
	
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView validAttributesForMarkedText]):

2004-08-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

	- a bit of code cleanup

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _stringWithData:]): Call textEncodingName instead of
	copying it's code.
        (-[WebDataSource textEncodingName]): Tweak formatting.

2004-08-23  Chris Blumenberg  <cblu@apple.com>

	Fixed build.

        * WebKit.pbproj/project.pbxproj: make sure we're doing -f on a file, not a directory

2004-08-23  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3674867> use new Security framework SPI's to reenable cert acquisition

        Reviewed by john.

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        * WebCoreSupport.subproj/WebKeyGeneration.h:
        * WebCoreSupport.subproj/WebKeyGenerator.h:
        * WebCoreSupport.subproj/WebKeyGenerator.m:
        (-[WebKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:pageURL:]): re-enabled cert code, call Panther version on Panther, Tiger version on Tiger
        (-[WebKeyGenerator addCertificatesToKeychainFromData:]): ditto
        * WebCoreSupport.subproj/WebNewKeyGeneration.c: Added.
        (gnrAddContextAttribute):
        (gnrGetSubjPubKey):
        (gnrNullAlgParams):
        (gnrSign):
        (gnrFreeCssmData):
        (nssArraySize):
        (signedPublicKeyAndChallengeString):
        (addCertificateToKeychainFromData):
        (addCertificatesToKeychainFromData):
        * WebCoreSupport.subproj/WebNewKeyGeneration.h: Added.
        * WebKit.pbproj/project.pbxproj:

2004-08-20  David Hyatt  <hyatt@apple.com>

	Fix the directionality of the unicode hyphen so that on Panther it now matches Tiger.
	
        Reviewed by darin

        * Misc.subproj/WebUnicode.m:
        (_unicodeDirection):

2004-08-20  Richard Williamson   <rjw@apple.com>

	    Implemented new JNI abstraction.  We no longer invoke Java methods
	    directly with JNI, rather we call into the plugin.  This allows the
	    plugin to dispatch the call to the appropriate VM thread.  This
	    change should (will?) fix a whole class of threading related problems with
	    the Java VM.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge getAppletInView:]):

2004-08-20  Trey Matteson  <trey@apple.com>

	3655407 - Editing: -complete: method unimplemented (WebKit editing API)

	This feature is mostly implemented.  The only loose ends I know of are:

	3769654 - text insertions done via complete: should preserve case of full replacement string
	3769652 - positioning of complete: popup window wrong for right-to-left languages

        Reviewed by John

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLViewPrivate dealloc]):  Free new object.
        (-[WebHTMLView menuForEvent:]):  Bail on completion session.
        (-[WebHTMLView windowDidResignKey:]):  Ditto.
        (-[WebHTMLView windowWillClose:]):  Ditto.
        (-[WebHTMLView mouseDown:]):  Ditto.
        (-[WebHTMLView resignFirstResponder]):  Ditto.
        (-[WebHTMLView keyDown:]):  Bail on completion session if WebCore takes the event.
	Give the CompleteController a crack at the key event.
        (-[WebHTMLView _expandSelectionToGranularity:]):  Adopt method rename
        (-[WebHTMLView complete:]):  Make CompleteController, tell it to do its thing.
        (-[WebHTMLView checkSpelling:]):  Add ERROR().
        (-[WebHTMLView showGuessPanel:]): Add ERROR().
        (-[WebHTMLView _changeSpellingToWord:]): Add ERROR().
        (-[WebHTMLView ignoreSpelling:]): Add ERROR().

        (-[WebTextCompleteController initWithHTMLView:]):
        (-[WebTextCompleteController dealloc]):
        (-[WebTextCompleteController _insertMatch:]): Stick the new string into the doc.
        (-[WebTextCompleteController _buildUI]):  Make popup window.
        (-[WebTextCompleteController _placePopupWindow:]):  Position popup window.
        (-[WebTextCompleteController doCompletion]):  Lookup matches, display window.
        (-[WebTextCompleteController endRevertingChange:moveLeft:]):  Bail on complete: session.
        (-[WebTextCompleteController filterKeyDown:]):  Process keys while popup is up.
        (-[WebTextCompleteController _reflectSelection]):  Handle choice in popup.
        (-[WebTextCompleteController tableAction:]):  Handle double click in popup
        (-[WebTextCompleteController numberOfRowsInTableView:]):  Fill table with matches.
        (-[WebTextCompleteController tableView:objectValueForTableColumn:row:]):  Ditto.
        (-[WebTextCompleteController tableViewSelectionDidChange:]):  Handle selection change.
        * WebView.subproj/WebHTMLViewInternal.h:

2004-08-20  John Sullivan  <sullivan@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt:
        checked this in; the only difference is that
        the strings were out of order.

2004-08-19  Richard Williamson   <rjw@apple.com>

        Continue to call old pollForAppletInView: in Tiger until
        we get an plugin that supports the new API.
		
        Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge getAppletInView:]):
        * WebKit.pbproj/project.pbxproj:

=== Safari-158 ===

2004-08-19  Chris Blumenberg  <cblu@apple.com>

	Fixed typo in comment.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _updateFileDatabase]):

2004-08-19  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3566336> CrashTracer: .2403 crashes at com.apple.WebKit: -[WebFileDatabase performSetObject:forKey:] + 0x94

        Reviewed by trey.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _updateFileDatabase]): pass WebFileDatabase copies of the mutable dictionaries or else they may be accessed on a separate thread as the main thread is modifying them

2004-08-18  Richard Williamson   <rjw@apple.com>

        Replace horrible pollForAppletInView: with new
        webPlugInGetApplet.  The details of how the applet instance
        is provided now belong to the Java team.  Yeh.
		
        Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge getAppletInView:]):

2004-08-17  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3759093> Need PDF context menu: "Open in Preview" or other external app

        Added support for "Open with ..." in PDF view.
		
        Reviewed by Chris and Trey.

        * ChangeLog:
        * English.lproj/Localizable.strings:
        * English.lproj/StringsNotToBeLocalized.txt:
        * WebView.subproj/WebPDFView.h:
        * WebView.subproj/WebPDFView.m:
        (-[WebPDFView initWithFrame:]):
        (-[WebPDFView dealloc]):
        (applicationInfoForMIMEType):
        (-[WebPDFView path]):
        (-[WebPDFView menuForEvent:]):
        (-[WebPDFView setDataSource:]):
        (-[WebPDFView layout]):
        (-[WebPDFView viewDidMoveToHostWindow]):
        (-[WebPDFView openWithFinder:]):

2004-08-17  Richard Williamson   <rjw@apple.com>

        JNI needs both the jmethodID and return type.  Changed API to 
        pass both.
		
        Reviewed by Chris.

        * Plugins.subproj/WebJavaPlugIn.h:

2004-08-17  Trey Matteson  <trey@apple.com>

	3764147 - failure of subframe to load leaves links in parent doc broken

        Reviewed by Maciej.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedMainResourceError:complete:]):
	Need to call [bridge end] in the case of an error, so WC can clean up.

=== Safari-157 ===

2004-08-15  Richard Williamson   <rjw@apple.com>

        More changes to np headers.
        
        Reviewed by Darin.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins.subproj/npapi.h:
        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:

2004-08-13  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed <rdar://problem/3760924> Carbon path passed in NPP_StreamAsFile must be in local character set, not UTF-8

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (CarbonPathFromPOSIXPath): Added. New function that uses the path pieces from an FSSpec.
        This has many advantages; the big one that fixes the bug is that it gives the mangled names
        that work even for files that have names that can't otherwise be encoded in Carbon-style
        path names. I didn't write this from scratch: I started with the method in Foundation
        and just changed it to use FSSpec.
        (-[WebBaseNetscapePluginStream destroyStream]): Remove code that used NSString and just call
        CarbonPathFromPOSIXPath instead.

        * Plugins.subproj/npapi.h: The Revision tag wanted to touch this file.
        I think we are going to have some trouble with this; I'd like to take that out.

        * English.lproj/StringsNotToBeLocalized.txt: Updated.

2004-08-12  Trey Matteson  <trey@apple.com>

        3761329 - query result links all dead in ingrammicro.com (sometimes)
        3761328 - links in some docs dead when doc is loaded from WebArchive

        Nasty problem.  It turns out that these result pages are a parent frame with two child
        frames.  One of the child frames is a 1 or 2 byte text document.  When the text child
        is the last doc to complete, because we use a Text rep instead of an HTMLRep, it turns
        out we never send [bridge end] from WebKit.  That mistake results in checkCompleted not
        being called enough in the part, and we never realize the load is done.  WebCore does
        not allow redirects to happen until the entire load is complete,  and  the links on this
        results page are actually little pieces of JS that set location to a generated URL.  Since
        redirects are not allowed these links all silently fail to do anything, and the doc never
        achieves a completed state where they will work.

        Solution is to make sure we always call [bridge end] from the DataSource instead of only
        the HTML rep doing it.

        Reviewed by Richard and Darin.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _finishedLoading]):  Call [bridge end] here for all kinds of docs.
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):  Don't call is just for HTMLReps.

2004-08-12  Richard Williamson   <rjw@apple.com>

        Bring npruntime.h and friends closer to compliance with
        latest spec.

        Reviewed by Maciej.

        * Plugins.subproj/npapi.h:
        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:
        (_NPString::):
        (_NPString::_NPVariant::):
        * copy-webcore-files-to-webkit:

2004-08-12  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3761097> should be able to option-drag selection so HTML can be copied within a page

        Reviewed by rjw.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _isMoveDrag]): new, take into account the option key
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:actionMask:]): call _isMoveDrag
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): call _isMoveDrag

2004-08-12  Richard Williamson   <rjw@apple.com>

        Quick fix for 3760903.  The real fix is described in 3760920.  Needed
        by Java plugin guys so they can be unblocked for feature freeze.
		
        Reviewed by Chris.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadForPluginChanges]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addSubview:]):

2004-08-12  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3760898> error pages in subframes attempt to load appledata URLs when reloaded

        Reviewed by darin.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _createItem:]): when setting the original URL of the history item, use the unreachable URL

=== Safari-156 ===

2004-08-11  Adele Amchan  <adele@apple.com>

        Reviewed by me, bug fix by Darin.

        - fixed <rdar://problem/3736477> Pages don't load if hard drive is named with non-ASCII Symbol

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]):
        Use UTF8String instead of cString to convert the MIME type to a C string. Safer, since it can't
        ever fail due to encoding problems even though this string should always be ASCII.
        (-[WebBaseNetscapePluginStream destroyStream]): Use stringWithUTF8String to convert the path name
        to an NSString, since stringWithCString is deprecated (doesn't really matter since the path is always
        all ASCII). Fix the bug by calling fileSystemRepresentation on the NSString to turn it into a C
        string form. Even though the POSIX path can't have any non-ASCII characters in it, the Carbon path
        can, so we need to use this instead of cString which can fail depending on characters and encoding.

2004-08-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

	WebKit part of:

	- made basic marked text highlighting work to complete basic level of <rdar://problem/3704359> input method support not yet implemented for HTML editing

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView markedRange]): Use new bridge calls instead of internal marked range storage.
        (-[WebHTMLView hasMarkedText]): Likewise.
        (-[WebHTMLView unmarkText]): Likewise.
        (-[WebHTMLView _selectMarkedText]): Likewise.
        (-[WebHTMLView _selectRangeInMarkedText:]): Likewise.
        (-[WebHTMLView _selectionIsInsideMarkedText]): Likewise.
        (-[WebHTMLView _updateSelectionForInputManager]): Likewise.
        (-[WebHTMLView setMarkedText:selectedRange:]): Use direct bridge call instead
	of private _selectMarkedDOMRange: method, which would now be trivial.
        * WebView.subproj/WebHTMLViewInternal.h: Remove unneeded

2004-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - change name of WebMakeCollectable to WebNSRetainCFRelease so it fits into the
          "NS and CF retain counts are separate" mental model, rather than the "think about
          how garbage collection works" one

        * Misc.subproj/WebKitNSStringExtras.m: (+[NSString _web_encodingForResource:]): Rename.
        * Misc.subproj/WebNSObjectExtras.h: (WebNSRetainCFRelease): Ditto.
        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithData:relativeToURL:]): Ditto.
        (-[NSURL _web_URLWithLowercasedScheme]): Ditto.

2004-08-09  Trey Matteson  <trey@apple.com>

	3756599 - REGRESSION: hit assertion in KWQPageState invalidate

	By inspection I found a flaw in the recently added logic, although
	I have no steps to repro.  My theoretical explanation is that we would
	get two errors and go through _receivedMainResourceError: twice, which
	would cause the pageState to be invalidated twice, which is the only
	way I can see to hit the assert.

        Reviewed by Darin

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _receivedMainResourceError:]):  Clear the pageState out
	of the history item after it's been invalidated by WebCore.

2004-08-09  Richard Williamson   <rjw@apple.com>

        Inspired by Trey we have a much better approach for conditionally
        linking Quart.framework.  Instead of multiple targets we use 
        `` to invoke some inline script to extend COMMON_LDFLAGS as
        necessary.  Thanks Trey!
        
        Reviewed by Trey.

        * WebKit.pbproj/project.pbxproj:

2004-08-09  Trey Matteson  <trey@apple.com>

	Hookup UI for "Continuous Spelling" menu item.

        Reviewed by Richard.

        * WebView.subproj/WebView.m:
        (-[WebView validateUserInterfaceItem:]):  Enable and check the
	menu item to reflect our state.
        (-[WebView toggleContinuousSpellChecking:]):  Change type to
	IBAction, just cosmetic.
        * WebView.subproj/WebViewPrivate.h:

2004-08-08  Trey Matteson  <trey@apple.com>

	3745023 - Safari crashes trying to access anchor while downloading

	I bet this is behind a few other crashers as well.  In this bug the start of the
	download leaves a KWQPageState hanging around, and when that is freed it damages
	the part and view.  If you're still using that page, you're dead.

	The fix is to properly invalidate the PageState when we receive an error before
	reaching WebFrameCommitted state.  Normally this happens when a page is reheated
	from the PageState, but in this case we never manage to leave the page to begin
	with, although we've already created the PageState.

	Other errors besides the synthetic one download generates would have caused similar
	crashing.  Another example would be clicking on a second link before the load
	caused by clicking on the first link reached committed state.

        Reviewed by Richard

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _receivedMainResourceError:complete:]):  Let the frame do the
	main work (since it has access to the pageCache state).  Also renamed to make
	it clear that this is about an error for the main resource.
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _receivedMainResourceError:]):  Let WC know about the failure, as
	the DataSource used to, but now pass the pageCache state along too.
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]):  Call renamed method.
        (-[WebMainResourceClient cancelWithError:]):  Ditto.

2004-08-08  Vicki Murley  <vicki@apple.com>

        Reviewed by vicki (changes by rjw)
 
	- make "weak" linking with Quartz work with buildit

        * WebKit.pbproj/project.pbxproj: 

2004-08-06  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej

        Finish off spellchecking support to HTML editing. Includes work to
        enable continuous spellchecking.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge isContinuousSpellCheckingEnabled]): Simple bridge method.
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForMisspelling:withWidth:]): New method to add
        AppKit-style misspelling underline.

=== Safari-155 ===

2004-08-05  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebHTMLView.m: Added a list of methods that NSTextView implements that we don't.
        All inside #if 0.

2004-08-05  Chris Blumenberg  <cblu@apple.com>

        Fixed unnecessary import of NSURLFileTypeMappings.

        * WebView.subproj/WebMainResourceClient.m:

2004-08-05  Richard Williamson   <rjw@apple.com>

        Make builds conditionally include -framework Quartz.
		
        Reviewed by Chris.

        * WebKit.pbproj/project.pbxproj:

2004-08-04  Darin Adler  <darin@apple.com>

        - fixed broken Deployment build

        * Carbon.subproj/HIWebView.m: (Click):
        Remove code that checks err variable before setting it.

2004-08-03  Richard Williamson   <rjw@apple.com>

        First cut at dirt simple PDF support.  This feature
        depends on Quartz.framework (parent of PDFKit), which only exists
        on Tiger.  So, we "weak" link against Quartz.
		
        We do very basic PDF rendering.  Coming up are support for
        "Find..." and linearized PDF (incremental).  Linearized PDF 
        support will require API changes in PDFKit.
		
        No UI is added to Safari, yet.
		
        Reviewed by John.

        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebPDFRepresentation.h: Added.
        * WebView.subproj/WebPDFRepresentation.m: Added.
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]):
        (-[WebPDFRepresentation canProvideDocumentSource]):
        (-[WebPDFRepresentation documentSource]):
        (-[WebPDFRepresentation title]):
        * WebView.subproj/WebPDFView.h: Added.
        * WebView.subproj/WebPDFView.m: Added.
        (-[WebPDFView initWithFrame:]):
        (-[WebPDFView setDataSource:]):
        (-[WebPDFView dataSourceUpdated:]):
        (-[WebPDFView setNeedsLayout:]):
        (-[WebPDFView layout]):
        (-[WebPDFView viewWillMoveToHostWindow:]):
        (-[WebPDFView viewDidMoveToHostWindow]):

        Copied fix from Jaguar carbon/cocoa work.
		
        Reviewed by Darin (Jaguar version)

        * Carbon.subproj/CarbonWindowAdapter.h:
        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter relinquishFocus]):
        * Carbon.subproj/HIWebView.m:
        (Click):
        (OwningWindowChanged):
        (WindowHandler):

2004-08-03  David Hyatt  <hyatt@apple.com>

	Add the text/xsl MIME type as one that can be displayed.
	
        Reviewed by john

        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):

2004-08-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

	- implemented enough of the NSTextInput protocol and added the
	proper calls to NSInputManager to allow input methods to
	work. However, the text is not marked yet.

        * WebView.subproj/WebHTMLViewInternal.h: Added new fields to track
	marked range.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView markedRange]): Implemented
        (-[WebHTMLView conversationIdentifier]): Implemented
        (-[WebHTMLView hasMarkedText]): Implemented
        (-[WebHTMLView unmarkText]): Implemented
        (-[WebHTMLView setMarkedText:selectedRange:]): Implemented - does
	not yet handle attributes in attributed strings
        (-[WebHTMLView insertText:]): Modified to handle replacing or abandoning
	the marked text when set.
        (-[WebHTMLView _selectMarkedText]): new helper method, self-explanatory
        (-[WebHTMLView _setMarkedDOMRange:]): hitto.
        (-[WebHTMLView _selectRangeInMarkedText:]): ditto
        (-[WebHTMLView _discardMarkedText]): ditto
        (-[WebHTMLView _selectionIsInsideMarkedText]): ditto
        (-[WebHTMLView _updateSelectionForInputManager]): ditto

	- did a bit of refactoring while I was in here.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _shouldReplaceSelectionWithText:givenAction:]): added this new
	helper method to simplify the common case of calling the shouldInsertText: delegate
        (-[WebHTMLView pasteAsPlainText:]): use it
        (-[WebHTMLView insertTab:]): ditto
        (-[WebHTMLView insertNewline:]): ditto
        (-[WebHTMLView _changeWordCaseWithSelector:]): ditto
        (-[WebHTMLView _changeSpellingToWord:]): ditto
        (-[WebHTMLView _selectionChanged]): ditto

2004-08-03  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3572737> Images not resizing at www.bmx-test.com (spoof nofix)

        Reviewed by darin.

        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory supportedMIMETypes]): hard code image/pjpeg to the list of image mime types that we can handle

2004-08-03  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3740937> ER: A way to turn a DOMRange into text (equivalent of -innerText)

        * DOM.subproj/DOMPrivate.h: Added.
        * WebKit.pbproj/project.pbxproj: Added DOMPrivate.h.
        * copy-webcore-files-to-webkit: Added DOMPrivate.h.

2004-08-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.

        WebKit part of fix for <rdar://problem/3631868> NSToolbar adoption: 
        Tab key should cycle around toolbar and page content

        * WebView.subproj/WebHTMLView.m:
        removed overrides of nextKeyView and previousKeyView
        (-[WebHTMLView nextValidKeyView]):
        call super only if we can't move the focus within the frame hierarchy
        (-[WebHTMLView previousValidKeyView]):
        ditto
        * WebView.subproj/WebHTMLViewInternal.h:
        removed nextKeyViewAccessShouldMoveFocus ivar

2004-08-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Update name of firstResponderIsSelfOrDescendantView, adding _web_ prefix to this SPI call.
        
        Do some work to make caret blinking in newly-created editable WebView's that are 
        similar in structure to Blot more "automatic".

        * Misc.subproj/WebNSViewExtras.h: Change name of firstResponderIsSelfOrDescendantView. Add _web_ prefix.
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_firstResponderIsSelfOrDescendantView]): Name change.
        (-[NSView _web_firstResponderCausesFocusDisplay]): Adds an additional check for whether the view's
        is first responder. This helps to make the focus setting in viewDidMoveToWindow work right.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusDisplay]): Use _web_firstResponderCausesFocusDisplay now instead of 
        firstResponderIsSelfOrDescendantView.
        (-[WebHTMLView viewDidMoveToWindow]): Schedule call to updateFocusDisplay for the next crank of the
        run loop. The reason is that placing the caret in the just-installed view requires the HTML/XML 
        document to be available on the WebCore side, but it is not at the time this code is running. 
        However, it will be there on the next crank of the run loop. Doing this helps to make a 
        blinking caret appear in a new, empty window "automatic".
        (-[WebHTMLView performKeyEquivalent:]):  _web_firstResponderIsSelfOrDescendantView name change.
        * WebView.subproj/WebView.m:
        (-[WebView _performResponderOperation:with:]): _web_firstResponderIsSelfOrDescendantView name change.

2004-07-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	Added stubbed-out versions of all the NSTextInput protocol
	methods, and put comments in places where we will need to call the
	input manager to make input methods work 100%.
	
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge respondToChangedSelection]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView mouseDown:]):
        (-[WebHTMLView mouseDragged:]):
        (-[WebHTMLView mouseUp:]):
        (-[WebHTMLView _interceptEditingKeyEvent:]):
        (-[WebHTMLView keyDown:]):
        (-[WebHTMLView _selectionChanged]):
        (-[WebHTMLView _delegateDragSourceActionMask]):
        (-[WebHTMLView validAttributesForMarkedText]):
        (-[WebHTMLView characterIndexForPoint:]):
        (-[WebHTMLView firstRectForCharacterRange:]):
        (-[WebHTMLView selectedRange]):
        (-[WebHTMLView markedRange]):
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView conversationIdentifier]):
        (-[WebHTMLView hasMarkedText]):
        (-[WebHTMLView unmarkText]):
        (-[WebHTMLView setMarkedText:selectedRange:]):
        (-[WebHTMLView doCommandBySelector:]):
        (-[WebHTMLView insertText:]):
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebView.m:

=== Safari-154 ===

2004-07-29  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fill in some unimplemented methods

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView moveToBeginningOfDocument:]): Implement, using new document granularity.
        (-[WebHTMLView moveToBeginningOfDocumentAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToBeginningOfParagraph:]): Implement, even though the underlying WebCore
        code is not yet implemented.
        (-[WebHTMLView moveToBeginningOfParagraphAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToEndOfDocument:]): More of the same.
        (-[WebHTMLView moveToEndOfDocumentAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToEndOfParagraph:]): More of the same.
        (-[WebHTMLView moveToEndOfParagraphAndModifySelection:]): Ditto.
        (-[WebHTMLView pageDown:]): Added comment describing desired behavior.
        (-[WebHTMLView pageUp:]): Ditto.
        (-[WebHTMLView copyFont:]): Ditto.
        (-[WebHTMLView pasteFont:]): Ditto.
        (-[WebHTMLView changeAttributes:]): Ditto.
        (-[WebHTMLView indent:]): Ditto.

2004-07-28  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3737864> Can not download image from web by using drag and drop

        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_declareAndWriteDragImage:URL:title:archive:source:]): On Tiger, to use NSFilesPromisePboardType with other pasteboard types, set the file types of the promise on the pasteboard as a property list instead of mucking with the NSFilePromiseDragSource class

2004-07-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	- avoid triggering an assertion when using dead keys (like option-e)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView insertText:]): Don't pass zero-length strings to
	WebCore. Dead-key input seems to insert empty strings as a side
	effect.

2004-07-28  Trey Matteson  <trey@apple.com>

	Spellchecking, Part I.  Basic spellcheck is working.  Spelling panel is hooked up.

	At this point, no special marking of misspellings, no grammar check, no context
	menu integration, no "check continually" mode.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge spellCheckerDocumentTag]):  Typical bridge glue.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView validateUserInterfaceItem:]):  Validate various spelling actions.
        (-[WebHTMLView checkSpelling:]):  Call WC for real work, update panel.
        (-[WebHTMLView showGuessPanel:]):  Show panel, call WC for real work.
        (-[WebHTMLView _changeSpellingToWord:]):  Apply correction to our doc.
        (-[WebHTMLView changeSpelling:]):  Simple pass through to above method.
        (-[WebHTMLView ignoreSpelling:]):  Tell checker to ignore the word.
        * WebView.subproj/WebView.m:
        (-[WebView _close]):  Call AK's closeSpellDocumentWithTag: for proper cleanup.

2004-07-27  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey.
        
        WebKit part of fix for <rdar://problem/3622268> Reload failed pages when a 
        network problem is corrected, inc. using Network Diagnostics

        * WebView.subproj/WebFrame.m:
        (-[WebFrame reload]):
        This method did not handle unreachableURLs at all. The reason Safari's Reload
        did work with unreachableURLs was that Safari does "reloadObeyingLocationField"
        which never actually calls -[WebFrame reload]. Fixed by creating a fresh
        request for the previously-unreachable URL.

2004-07-26  Richard Williamson   <rjw@apple.com>

        Fixed 3739737.  When setting the focus to a NSView, set the focus
        carbon focus to kControlIndicatorPart.  kControlIndicatorPart is a
        placeholder value for use to indicate that Cocoa has the focus.  
	
        Reviewed by Ken.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter makeFirstResponder:]):
        * Carbon.subproj/HIWebView.m:
        (Click):
        (SetFocusPart):

2004-07-26  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3689734> dragging to an editable WebView does not scroll document

        Reviewed by rjw.

        * WebView.subproj/WebView.m:
        (-[WebView documentViewAtWindowPoint:]): new, factored from draggingDocumentViewAtWindowPoint:
        (-[WebView _draggingDocumentViewAtWindowPoint:]): call documentViewAtWindowPoint:
        (-[WebView _autoscrollForDraggingInfo:timeDelta:]): forward call to the document view
        (-[WebView _shouldAutoscrollForDraggingInfo:]): ditto

=== Safari-153 ===

2004-07-23  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Trey

        Fix for this bug:
        
        <rdar://problem/3738920> Caret blinks in inactive window

        As part of the fix, I cleaned up the way we handle special drawing that needs
        to be done in the HTML view that is first responder in the key window (e.g the
        drawing of text selection highlight and caret blinking).

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusDisplay]): New method that centralizes the changes
        we need to make when the first responder-ness of the view or key-ness of the
        window changes.
        (-[WebHTMLView viewDidMoveToWindow]): Call new updateFocusDisplay helper.
        (-[WebHTMLView windowDidBecomeKey:]): Ditto.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView becomeFirstResponder]): Ditto.
        (-[WebHTMLView resignFirstResponder]): Ditto.

2004-07-22  Darin Adler  <darin@apple.com>

        * Plugins.subproj/npruntime.h: Update with new version from newer JavaScriptCore.

2004-07-21  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Trey

        * WebCoreSupport.subproj/WebBridge.m: Remove interceptEditingKeyEvent
        bridge call over. This method of handling editing key events is now
        obsolete.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView performKeyEquivalent:]): Send key event over to the 
        DOM if this view is or contains the first responder. This now
        happens unconditionally.
        (-[WebHTMLView keyDown:]): Send key event to the DOM, then see if
        the web view wants to interpret it an an editing key event. This
        is the new place to intercept key events for editing.

2004-07-21  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Add implementations for these methods. Formerly, they logged an error.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView moveToBeginningOfLine:]):
        (-[WebHTMLView moveToBeginningOfLineAndModifySelection:]):
        (-[WebHTMLView moveToEndOfLine:]):
        (-[WebHTMLView moveToEndOfLineAndModifySelection:]):

2004-07-21  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Added some more handlers for standard Cocoa key bindings. 
        These are "secrets" of NSText, meaning they are not public API, but we choose to mimic.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView moveToBeginningOfDocumentAndModifySelection:]):
        (-[WebHTMLView moveToBeginningOfLineAndModifySelection:]):
        (-[WebHTMLView moveToBeginningOfParagraphAndModifySelection:]):
        (-[WebHTMLView moveToEndOfDocumentAndModifySelection:]):
        (-[WebHTMLView moveToEndOfLineAndModifySelection:]):
        (-[WebHTMLView moveToEndOfParagraph:]):
        (-[WebHTMLView moveToEndOfParagraphAndModifySelection:]):
        * WebView.subproj/WebView.h: Add these declarations to the comment in the header listing
        the responder-like methods we support.
        * WebView.subproj/WebView.m:
        (-[WebView moveToBeginningOfParagraphAndModifySelection:]):
        (-[WebView moveToEndOfParagraphAndModifySelection:]):
        (-[WebView moveToBeginningOfLineAndModifySelection:]):
        (-[WebView moveToEndOfLineAndModifySelection:]):
        (-[WebView moveToBeginningOfDocumentAndModifySelection:]):
        (-[WebView moveToEndOfDocumentAndModifySelection:]):

2004-07-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        * Misc.subproj/WebNSEventExtras.h: Added helper that returns whether
        a key event has a binding in the key binding manager.
        * Misc.subproj/WebNSEventExtras.m: 
        (-[NSEvent _web_keyBindingManagerHasBinding]): New helper mentioned above.
        * Plugins.subproj/npruntime.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView performKeyEquivalent:]): Add a check of whether the key event 
        has a binding in the key binding manager. This works around the fact that
        NSResponder's interpretKeyEvents does not return a value telling whether
        or not the key was handled. This now makes it possible for us to trap
        modified key events we know we can handle (like those command-key + arrow events 
        used for text navigation), while letting all others pass.

2004-07-20  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	<rdar://problem/3580589> REGRESSION (1.1-1.2): can't open a new window for an image that has not loaded
	<rdar://problem/3612691> Missing image icons (blue ?) lack context menu

        Reviewed by john.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): if there is no image, but there is an image URL, provide image context menu items besides "Copy Image" 
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]): don't drag an image with an actual image
        (-[WebHTMLView _mayStartDragAtEventLocation:]): ditto

2004-07-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris.

	<rdar://problem/3721690> REGRESSION (125.7-148u) clicking on links at macosx.apple.com/Builds does not load new page in frame
	
        * Plugins.subproj/npruntime.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canTargetLoadInFrame:]): Don't apply the restrictions to frames
	that are in the same window (Mozilla does this too).

2004-07-20  Richard Williamson   <rjw@apple.com>

		Fix for 3728558.  Fixed the key event handling in the carbon/cocoa
		integration code.  This does not fix the arrow keys not working on
		initial focus problem also mentioned in the bug.
		
		Bumped the version of the NP function structures.
		
        Reviewed by John.

        * Carbon.subproj/CarbonUtils.m:
        (WebInitForCarbon):
        (PoolCleaner):
        * Carbon.subproj/HIWebView.m:
        (OwningWindowChanged):
        (WindowHandler):
        * Plugins.subproj/npapi.h:

2004-07-20  Trey Matteson  <trey@apple.com>

	3733698	REGRESSION: sometimes dragging photos on homepage.mac.com leads to an assertion

	Relax an assertion, as we ran into a valid case where it's not true.

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
	Removing this assert allows for the oddball case of a drag gesture that
	starts on one element, but then the element is no longer there when
	the drag is about to start.

2004-07-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        Fix for this bug:
        
        <rdar://problem/3707505> HTMLCompose: blinking cursor in both an address text field and the message body

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView setCaretVisible:]): New helper. Calls over bridge to do the work.
        (-[WebHTMLView windowDidBecomeKey:]): This function cannot just assume that self is first responder
        (and do things like adjusting text background color and restoring focus rings). 
        First-responder-ness needs to be checked first. Now it is.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView becomeFirstResponder]): Call new helper to make caret visible.
        (-[WebHTMLView resignFirstResponder]): Call new helper to make caret invisible.

2004-07-12  Richard Williamson   <rjw@apple.com>

        Fixed 3721917.  The RealPlayer plugin doesn't support the new 
        NPPVpluginScriptableNPObject variable passed to NPP_GetValue and
        incorrectly returns NPERR_NO_ERROR.  We interpret this to the
        mean the variable has been set.  The variable has not been set 
        and will consequently be uninitialized.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView pluginScriptableObject]):

2004-07-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Fix for this bug:
        
        <rdar://problem/3707504> HTMLCompose: key events are stolen by Web(HTML)View

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView firstResponderIsSelfOrDescendantView]): New helper to 
        (-[WebHTMLView performKeyEquivalent:]): Do not pass key events through to the editing
        key handler unless the WebHTMLView is first responder or contains the first responder.
        This prevents the "stealing" of key events mentioned in the bug.
        * WebView.subproj/WebView.m:
        (-[WebView _performResponderOperation:with:]): Uses the new firstResponderIsSelfOrDescendantView
        helper. The code I replaced used the same logic as the new helper.

=== Safari-152 ===

2004-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin.

	<rdar://problem/3673988>: (REGRESSION(141-144): connection assertion failure at http://traffic.511.org/sfgate)
	
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]):
	Don't check connection consistency if this load got cancelled
	while finishing, because in this case we have cleared the
	connection field already. This can happen when a redirect fires
	from an onload handler.

2004-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

	<rdar://problem/3632570>: (REGRESSION: SocialText.net wiki keeps asking for auth, even though pages load)

        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader didReceiveAuthenticationChallenge:]): Ignore the challenge - we don't
	want an auth panel for favicons.
        (-[WebIconLoader didCancelAuthenticationChallenge:]): Ignore cancel, since we are ignoring
	the challenge.

2004-07-09  Chris Blumenberg  <cblu@apple.com>
	
	Allowed my change for 3715785 to compile on Jaguar.

        Reviewed by kocienda.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canTargetLoadInFrame:]): don't use the DOM API since it doesn't exist on Jaguar, instead call the new domain method on the bridge

2004-07-09  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        * Plugins.subproj/npruntime.h: Updated license to lawyer-approved 
        joint Apple-Mozilla BSD-style license.

2004-07-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3720728> REGRESSION (125.8-146): Crash moving mouse over plugin at manray-photo.com
	
        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView pluginScriptableObject]): don't call NPP_GetValue unless the plug-in implements it

2004-07-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3706296> VIP: ifilm.com crashing reproducibly with Safari

        Reviewed by kocienda.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage launchRealPlayer]): don't release a NULL appURL

2004-07-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3650140> reproducible assertion failure going to plugin page with JavaScript disabled

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]): don't call NPP_NewStream and other stream methods if there is no JS result to deliver. This is what Mozilla does.
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): Return NPERR_GENERIC_ERROR if JS is disabled. This is what Mozilla does.

=== Safari-151 ===

2004-07-07  Trey Matteson  <trey@apple.com>

	3719051 - Safari doesn't update form inputs when a page was refreshed by javascript window.location
	... and at least 5 other cases in Radar

	Very similar problem to the Harvard PIN bug.  We need to be sure
	to not carry any state over when we are processing a client
	redirect, which reuses the same WebHistoryItem.

        Reviewed by John.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):  Comment
        (-[WebFrame _opened]):  Clear form and scroll state on client redirect.

2004-07-06  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3715785> multiple frame injection vulnerability reported by Secunia, affects almost all browsers
	
        Reviewed by john, trey, kocienda.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge canTargetLoadInFrame:]): new method, return YES if the requesting frame is local, the target frame is an entire window or if the domain of the parent of the targeted frame equals this domain
        (-[WebBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]): call canTargetLoadInFrame: to make sure we can load the request
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): ditto

2004-07-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey.

        - fixed <rdar://problem/3717147> folder icon used for error page in back/forward 
        menu when iTunes is not installed

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):
        When displaying the error page for an unreachable URL, leave the requested URL
        in the WebHistoryItem; don't clobber it with a bogus one that represents the
        error page. This not only avoids the wrong-icon problem, but should also help
        in cases where an unreachable URL becomes reachable later on.

2004-07-06  Trey Matteson  <trey@apple.com>

	3716053 - www.theage.com.au has extra back/forward items due to ads

	The real change was in WebKit.  Here was are just renaming a method and folding
	all the WebFrameLoadTypeOnLoadEvent uses to be WebFrameLoadTypeInternal, since there
	was never any difference anyway.

        Reviewed by Richard

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]):  rename part of the method.
        * WebView.subproj/WebFrame.m:  Nuke WebFrameLoadTypeOnLoadEvent.
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _checkLoadCompleteForThisFrame]):
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _itemForRestoringDocState]):
        * WebView.subproj/WebFramePrivate.h:

2004-07-06  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Trey
        
        Only register the editing delegate for those notifications for which it implements the callbacks.

        * WebView.subproj/WebView.m:
        (-[WebView registerForEditingDelegateNotification:selector:]):
        (-[WebView setEditingDelegate:]):

2004-07-06  Trey Matteson  <trey@apple.com>

	3294652 - Failed drag of links doesn't slide back

	The only reason for this is that because of some hacks, we lie to
	AK about the drag image offset, which means we slide back to
	slightly the wrong place.  But it's very minor, so we should
	just fix it.

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
	Ask for slideback.

2004-07-02  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed problem where tabsToLinks and privateBrowsingEnabled did not work with non-
          standard WebPreferences objects

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _valueForKey:]): New helper.
        (-[WebPreferences _stringValueForKey:]): Use _valueForKey.
        (-[WebPreferences _integerValueForKey:]): Use _valueForKey.
        (-[WebPreferences _boolValueForKey:]): Use _valueForKey.
        (-[WebPreferences tabsToLinks]): Use _boolValueForKey; this is the bug fix.
        (-[WebPreferences privateBrowsingEnabled]): Ditto.
        (+[WebPreferences _setIBCreatorID:]): Use copy instead of retain for keeping an NSString.

2004-07-01  Trey Matteson  <trey@apple.com>

	3556159 - Crashes in -[WebFrame(WebPrivate) _transitionToCommitted:] at www.mastercardbusiness.com

	We know from the line number of the crash that it is due to [self parentFrame]==nil.

	Looking at the HTML and that of the related bugs, they do special stuff with onload
	handlers.  It is no longer repro, presumably because the includes JS files changed,
	as the bugs only included the top level HTML.  I suspect that the problem is that the
	WebFrameLoadTypeOnLoadEvent case was added, and in some weird sequence specific to
	MasterCard, they hit a case where we would be in WebFrameLoadTypeOnLoadEvent mode but
	not have a parent frame.

	So we guard in the code against hitting a nil parentFrame, and log an error just in
	case this ever crops up again and we can learn more about it.

        Reviewed by Richard.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):  Guard against nil parentFrame.

2004-07-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey.
        
        - fixed these bugs:
        <rdar://problem/3709110> REGRESSION (Tiger): Pressing Tab key to move focus 
        onto links skips every other link
        <rdar://problem/3692576> focus ring is in odd place after clicking RSS button 
        with "Tab to links" enabled
        
        WebHTMLView has some trickery by which we advance the focused link when nextKeyView
        or previousKeyView is called within nextValidKeyView or previousValidKeyView. This
        broke in Tiger because AppKit now (sometimes at least) calls nextKeyView more than
        once within nextValidKeyView. Fixed 3709110 by making sure we only advance the focus 
        once within a call to nextValidKeyView or previousValidKeyView.
        
        Also, this same trickery didn't work right with hidden views. Fixed 3692576 by checking
        whether the view is hidden and bypassing the focus-moving trickery in that case.

        * WebView.subproj/WebHTMLViewInternal.h:
        renamed inNextValidKeyView -> nextKeyViewAccessShouldMoveFocus
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView nextKeyView]):
        now clears nextKeyViewAccessShouldMoveFocus
        (-[WebHTMLView previousKeyView]):
        ditto
        (-[WebHTMLView nextValidKeyView]):
        now doesn't set focus-moving trigger ivar if view is hidden or has hidden ancestor
        (-[WebHTMLView previousValidKeyView]):
        ditto

2004-06-30  Trey Matteson  <trey@apple.com>

	Dragging within a web view should be allowed to start when the window isn't key.

	A few months ago, Chris made this work, but it relied on the fact that all dragging
	was done in WebKit.  When WebCore got involved in dragging, it was broken.  Now we
	have a new scheme that gets it working again that properly involves WebCore.

	The general idea is that when AK asks us whether to accept the first mouse and do
	"delayed window ordering", we must consult WC to see if we might start a drag.  In
	addition, instead of these drags in non-active windows being started as a special
	case in WK, they go through the normal WK-WC drag machinery.  Finally to work in
	frames we have to drill to the deepest hit view in acceptsFirstMouse, because previous
	hacks to hitTest make the top-most WebHTMLView field all events for its view tree
	(which leads to it fielding all acceptFirstMouse messages too).

        Reviewed by John.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge mayStartDragAtEventLocation:]):  Glue change for new arg type.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
	firstMouseDownEvent ivar is no longer needed.
        (-[WebHTMLView _mayStartDragAtEventLocation:]):  Receives a location instead of a drag
	event, since we need to do this work when we have no drag event.  This means the
	check of the delay for text dragging is moved down to WebCore.
        (-[WebHTMLView acceptsFirstMouse:]):  Respond based on whether we might do a drag.
	This includes drilling to the deepest view the event hits, whereas we used to only
	respond considering the topmost WebHTMLView.
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]):  Ditto.
        (-[WebHTMLView mouseDown:]):  Get rid of special case where some activating
	mouseDown events weren't sent to WC.  We need to go through the whole pipeline
	now to get a drag started properly.
        (-[WebHTMLView mouseDragged:]):  Ditto, let WC start the drag.
        (-[WebHTMLView mouseUp:]):  firstMouseDownEvent ivar is no longer needed.
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-06-25  Trey Matteson  <trey@apple.com>

	Added new utility method.

        Reviewed by John.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _isDescendantOfFrame:]):   New code.
        * WebView.subproj/WebFramePrivate.h:

2004-06-24  Richard Williamson   <rjw@apple.com>

		Fixed <rdar://problem/3710313>: CGContext not zeroed when WebImageRenderer is copied
		The context ivar of WebImageRenderer wasn't being nil when the object was copied.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer copyWithZone:]):
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):

2004-06-24  Trey Matteson  <trey@apple.com>

	3672725 - Assertion failure in URLCompletion code with particular set of bookmarks

	Problem was caused by a URL with unescaped unicodes getting into
	the Bookmarks file, presumably from import from IE.  We now test
	for this case and convert the data on the way in as if it were
	user-entered.

        Reviewed by John and Darin.

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):

2004-06-24  Trey Matteson  <trey@apple.com>

	3704950	drag image in DB ConfigBar has horizontal graphics turd	WebCore JavaScript

	When we generate a drag image (or a selection image too, for that matter) we
	translate the CTM using a CG call.  Later, WebImageRenderer adjusts the pattern
	phase based on the CTM of the focused view, which doesn't include our translate.
	So we must inform WebKit about the additional phase adjustment.

        Reviewed by Richard

        * WebCoreSupport.subproj/WebGraphicsBridge.h:
        * WebCoreSupport.subproj/WebGraphicsBridge.m:
        (-[WebGraphicsBridge setAdditionalPatternPhase:]):  New trivial setter.
        (-[WebGraphicsBridge additionalPatternPhase]):      ...and getter.
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer tileInRect:fromPoint:context:]):  Take any additional phase
	adjustment into account when setting phase.

2004-06-24  Trey Matteson  <trey@apple.com>

	3693420 - onbeforecut and onbeforepaste need real implementaion

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView validateUserInterfaceItem:]):  Check with WebCore
	to see if cut, copy, paste should be enabled.

2004-06-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed <rdar://problem/3706792> 8A161: Choosing text encoding for 
        error page opens finder window!?

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadAllowingStaleDataWithOverrideEncoding:]):
        take unreachableURL into account

2004-06-23  Richard Williamson   <rjw@apple.com>

	Implemented changes for latest npruntime.h.
	Made npruntime.h public.
		
        Reviewed by Chris.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView pluginScriptableObject]):
        (-[WebBaseNetscapePluginView forceRedraw]):
        (-[WebBaseNetscapePluginView getVariable:value:]):
        * Plugins.subproj/WebBaseNetscapePluginViewPrivate.h:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins.subproj/npapi.h:
        * Plugins.subproj/npapi.m:
        (NPN_GetValue):
        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:
        * WebKit.pbproj/project.pbxproj:

2004-06-21  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2004-06-21  Chris Blumenberg  <cblu@apple.com>

	Made WebKitErrorDescriptionPlugInCancelledConnection have its own description string
	(Not for software update branch)

        Reviewed by john.

        * English.lproj/Localizable.strings:
        * Misc.subproj/WebKitErrors.m:

2004-06-21  Chris Blumenberg  <cblu@apple.com>

	Made WebKitErrorDescriptionPlugInCancelledConnection properly reuse an already localized string to avoid loc changes.

        Reviewed by john.

        * ChangeLog:
        * Misc.subproj/WebKitErrors.m:

2004-06-21  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3701269> change in error handling behavior from 10.3.3 to 10.3.4 breaks unreleased Adobe PDF plug-in

        Reviewed by john.

        * Misc.subproj/WebKitErrors.m:
        (registerErrors): register string for WebKitErrorPlugInCancelledConnection
        * Misc.subproj/WebKitErrorsPrivate.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]): use renamed WEB_REASON_PLUGIN_CANCELLED constant
        (-[WebBaseNetscapePluginStream destroyStream]): ditto
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation cancelWithReason:]): if the reason is WEB_REASON_PLUGIN_CANCELLED, cancel the load with WebKitErrorPlugInCancelledConnection
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream cancelWithReason:]): ditto

=== Safari-146 ===

2004-06-17  Richard Williamson   <rjw@apple.com>

		Changed private headers to be pubic for npapi.h and npfunctions.h.  That
		API was approved but never marked as public in the project file.  This change does
		not make npruntime.h public, which contains the not yet approved changes
		for script-ability of netscape plugins.  Unfortunately, that API will not
		be public for WWDC.
				
        Reviewed by Chris.

        * WebKit.pbproj/project.pbxproj:

2004-06-17  Trey Matteson  <trey@apple.com>

	3698514 - coordinates in ondragstart and ondrag events are wrong

	This part fixes the ondrag coords.  I thought Cocoa passed us the mouse location
	in draggedImage:movedTo:, but no, it's the position of the dragged image.
	WebCore needs the mouse location, so to calc that we must save away the
	offset of the mouse relative to the image when we kick off the drag.

        Reviewed by Maciej.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:rect:event:pasteboard:source:offset:]): Add the ability
	to return the offset of the cursor wrt to the drag image, since this routine
	generates its own drag image and positions it.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
	Calc the offset of the cursor wrt to the drag image in the myriad of ways
	that we kick off the drag.	
        (-[WebHTMLView draggedImage:movedTo:]):  Adjust the location by the
	offset we save when we kicked off the drag.
        (-[WebHTMLView draggedImage:endedAt:operation:]):  Ditto.
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView mouseDragged:]):  Pass nil for new arg, we don't care.

2004-06-16  David Hyatt  <hyatt@apple.com>

	In order to support truncation in Emerson, enhance pointToOffset so that it needn't include partial
	character glyphs (the left half of a glyph).
	
        Reviewed by mjs

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer pointToOffset:style:position:reversed:includePartialGlyphs:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:includePartialGlyphs:]):

=== Safari-145 ===

2004-06-16  Darin Adler  <darin@apple.com>

        - fixed <rdar://problem/3696081> REGRESSION: <WebKit/CarbonUtils.h> doesn't build any more

        Reviewed by Trey.

        * Carbon.subproj/CarbonUtils.h: Fixed include. Need to include <ApplicationServices/ApplicationServices.h>
        to get CGImageRef; can't include an individual header.

2004-06-15  Richard Williamson   <rjw@apple.com>

	Fixed <rdar://problem/3695875>: Objective-C instances that are exported to JavaScript are too promiscuous
	
	Flip the policy for exposing Objective-C methods and properties.
	
	Reviewed by Trey.
	
	* Plugins.subproj/WebPluginPackage.m:
	(+[NSObject isSelectorExcludedFromWebScript:]):  Just return YES.
	(+[NSObject isKeyExcludedFromWebScript:]):  Just return YES.

2004-06-15  Trey Matteson  <trey@apple.com>

	3639321 - Harvard PIN authentication ends up sending PIN as clear text with POST action

	When going back/forward to an item, if we went there originally via a POST, 
	we ask the user about rePOSTing, and if they say yes, we resend the POST. 
	This rePOST case is triggered by the form data that we saved on the b/f item.
	In the case of this bug, the overall navigation was accomplished by a POST,
	then a redirect, causing a GET.  When a load of type redirect achieves the Committed
	stage, we replace the current URL in the b/f item with the new URL (instead of
	adding a new item to the b/f list).

	The bug is that at the same time we should also update the form data in
	the b/f item to match that of the new request.  I think this will normally
	mean nil'ing it out, unless there's some way for the result of the redirect
	to be another POST.
 
	The security leak occurred because we did not clear the form data on the item,
	so when going back or forward to the page, we would go into the rePOSTing code,
	even though we eventually reached that page via a GET (caused by the redirect).
	So we would do a POST to the redirect URL containing the private data sent in
	the original POST.

        Reviewed by mjs and rjw.

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem _setFormInfoFromRequest:]):  New method, just wraps 3 old set methods.
        (-[WebHistoryItem formData]):  Diff being dumb, no change.
        (-[WebHistoryItem formContentType]):  Ditto
        (-[WebHistoryItem formReferrer]): Ditto
        * History.subproj/WebHistoryItemPrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _createItem:]):  Call new WebHistoryItem method - no change in real behavior
        (-[WebFrame _transitionToCommitted:]):  Clear out the form data at the key time, to fix the bug.

2004-06-15  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3695724> WebKit plug-ins should only have to implement plugInViewWithArguments:

        Reviewed by rjw.

        * ChangeLog:
        * Plugins.subproj/WebPluginViewFactory.h: mention that plugInViewWithArguments is required
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadForPluginChanges]): check for plugInViewWithArguments: not webPlugInInitialize
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addSubview:]): ditto

2004-06-15  Trey Matteson  <trey@apple.com>

	3695240 - pasting plain text with newlines in it turns them into spaces

	Easy fix, we just need to consume the incoming data as text instead of markup.

        Reviewed by John and Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]):

2004-06-15  Darin Adler  <darin@apple.com>

        - fixed crash introduced by my earlier change

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageContext dealloc]): Set _cgsContext to 0 before calling super as before.
        (-[WebImageContext finalize]): Ditto.

2004-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed some things for GC that Patrick missed, or that happened after the branch

        * Carbon.subproj/HIWebView.m:
        (HIWebViewConstructor): Use CFRetain instead of retain.
        (HIWebViewDestructor): Use CFRelease instead of release.
        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabase initWithPath:]): Use release instead of dealloc.
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageContext finalize]): Had [super dealloc] here by mistake; change to [super finalize].
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer finalize]): Added.
        * WebView.subproj/WebDebugDOMNode.m:
        (-[WebDebugDOMNode initWithWebFrameView:]): Use release instead of dealloc.
        * WebView.subproj/WebRenderNode.m:
        (-[WebRenderNode initWithWebFrameView:]): Use release instead of dealloc.

2004-06-15  Trey Matteson  <trey@apple.com>

	Fix ASSERT/crash we get sometimes when dragging link images.  Turns
	out there was an uninitialized variable for the image size,
	so at random we would try to create huge images that could not
	be focused.
	
        Reviewed by Maciej and Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _dragImageForLinkElement:]):  Trivial fix to
	not use += with uninited variable.

2004-06-14  Darin Adler  <darin@apple.com>

        Reviewed by me, code changes by Patrick Beard.

        - fixed <rdar://problem/3671507>: (WebKit should adopt GC changes and compile with GC enabled)

        * WebKit.pbproj/project.pbxproj: Added WebNSObjectExtras.h.
        * Misc.subproj/WebNSObjectExtras.h: Added. Includes WebMakeCollectable, a cover for
        CFMakeCollectable that returns type id, for less casting, and works on Panther as well
        as Tiger. Also declares finalize in NSObject so we can call super without warnings on Panther.

        * Carbon.subproj/CarbonWindowAdapter.m: Fixed header and includes a bit.
        (-[CarbonWindowAdapter finalize]): Added.
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList dealloc]): Got count outside loop.
        (-[WebBackForwardList finalize]): Added.
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem finalize]): Added.
        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabase _createLRUList:]): Use release on Panther, drain on Tiger.
        (+[WebFileDatabase _syncLoop:]): Ditto.
        (-[WebFileDatabase dealloc]): Removed, since we never deallocate objects of this class, and
        the method was untested.
        * Misc.subproj/WebKitErrors.m: (registerErrors): Use release on Panther, drain on Tiger.
        * Misc.subproj/WebKitNSStringExtras.m: (+[NSString _web_encodingForResource:]): Use
        WebMakeCollectable. Also fixed indenting.
        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithData:relativeToURL:]): Use WebMakeCollectable.
        (-[NSURL _web_URLWithLowercasedScheme]): Use WebMakeCollectable.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Change code to use CFRelease
        to balance CFURLCreateStringByReplacingPercentEscapes CFString creation, not release.
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream finalize]): Added.
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView freeAttributeKeysAndValues]): Added. Shared code for dealloc and finalize.
        (-[WebBaseNetscapePluginView dealloc]): Call freeAttributeKeysAndValues.
        (-[WebBaseNetscapePluginView finalize]): Added.
        (-[WebBaseNetscapePluginView requestWithURLCString:]): Changed so that CFString objects are
        released with CFRelease, not release.
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): Fixed storage leak in
        error case. Made sure CFString object is released with CFRelease, not release.
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        Another CFString that needed to a CFRelease, not a release.
        (-[WebBaseNetscapePluginView status:]): Ditto.
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage pathByResolvingSymlinksAndAliasesInPath:]): Changed code to
        CFRelease a CFURLRef, instead of release.
        (-[WebBasePluginPackage finalize]): Added.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge fini]): Added. Shared code for dealloc and finalize.
        (-[WebBridge dealloc]): Call fini.
        (-[WebBridge finalize]): Added.
        * WebCoreSupport.subproj/WebGlyphBuffer.m:
        (-[WebGlyphBuffer finalize]): Added.
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageContext initWithBounds:context:]): Use CGContextRetain to avoid cast.
        (-[WebImageContext dealloc]): Tweaked.
        (-[WebImageContext finalize]): Added.
        (-[WebImageRenderer finalize]): Added.
        (-[WebPDFDocument finalize]): Added.
        * WebView.subproj/WebDataProtocol.m:
        (+[NSURL _web_uniqueWebDataURL]): Changed so that CFString object is released with
        CFRelease, not release.
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]): Took non-release work out of here.
        (-[WebDataSource dealloc]): Moved it here.
        (-[WebDataSource finalize]): Added.
        (-[WebDataSource isLoading]): Use release on Panther, drain on Tiger.
        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]): Took non-release work out of here.
        (-[WebFrame dealloc]): Moved it here.
        (-[WebFrame finalize]): Added.
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView finalize]): Added.
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finalize]): Added.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLViewPrivate dealloc]): Moved non-release work out of here.
        (-[WebHTMLView dealloc]): Moved it here.
        (-[WebHTMLView finalize]): Added.
        * WebView.subproj/WebImageView.m:
        (-[WebImageView finalize]): Added.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient finalize]): Added.
        * WebView.subproj/WebTextView.m:
        (-[WebTextView finalize]): Added.
        * WebView.subproj/WebView.m:
        (-[WebView finalize]): Added.

2004-06-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin
        
        Fix for this bug:
        
        <rdar://problem/3693202> WebView.h header unnecessarily lists NSResponder methods it overrides

        * WebView.subproj/WebView.h: NSResponder overrides now gathered in a comment section.

2004-06-13  Trey Matteson  <trey@apple.com>

	Support for DHTML cut/copy/paste.

        Reviewed by Chris

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView copy:]):  Give DHTML first crack at executing the command.
        (-[WebHTMLView cut:]):  Ditto
        (-[WebHTMLView paste:]):  Ditto

2004-06-14  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3674456> make new drag & drop API compatible with DHTML dragging

        Reviewed by trey.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): tweak
        * WebView.subproj/WebUIDelegate.h: removed old, added new methods
        * WebView.subproj/WebUIDelegatePrivate.h: moved new methods to public header
        * WebView.subproj/WebView.h: removed old, added new methods
        * WebView.subproj/WebView.m: moved methods around
        (-[WebView moveDragCaretToPoint:]): moved
        (-[WebView removeDragCaret]): moved
        (-[WebView _bridgeAtPoint:]): moved
        (-[WebView editableDOMRangeForPoint:]): moved
        * WebView.subproj/WebViewInternal.h: add new internal method
        * WebView.subproj/WebViewPrivate.h: moved new methods to public header

2004-06-14  Trey Matteson  <trey@apple.com>

	Use a different hack, as recommended by Kristin, to force the drag
	manager to exit a modal event wait it is in.  The hack is required
	to update the drag image on the fly.  Instead of posting a CG
	event we post at the AppKit level.

        Reviewed by Louch

        * WebCoreSupport.subproj/WebGraphicsBridge.m:
        (-[WebGraphicsBridge setDraggingImage:at:]):

2004-06-14  Chris Blumenberg  <cblu@apple.com>

	Fixed:
	<rdar://problem/3692668> REGRESSION: delay when images and links
	<rdar://problem/3692675> links should drag when dragging images that are links when drag source action is WebDragSourceActionLink

        Reviewed by trey.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _mayStartDragWithMouseDragged:]): cleaned up, only use selection delay for selections, allow links to be dragged when image dragging is disabled 

2004-06-12  Trey Matteson  <trey@apple.com>

	Small rearrangement to support dynamic changing of the drag
	image during DHTML dragging.

        Reviewed by John

        * WebCoreSupport.subproj/WebBridge.m:  Bridge glue moved to WebGraphicsBridge.
        * WebCoreSupport.subproj/WebGraphicsBridge.m:
        (FlipImageSpec):  Code moved from WebHTMLView.m.
        (-[WebGraphicsBridge setDraggingImage:at:]):  Ditto.  Plus, we've added a gross
	event posting hack to force CG drag manager to update the display when we set
	the drag image.
        * WebView.subproj/WebHTMLView.m:  Code moved to WebGraphicsBridge.
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-06-11  Chris Blumenberg  <cblu@apple.com>

	Implemented the remainder of the drag & drop API.

        Reviewed by trey.

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_declareAndWriteDragImage:URL:title:archive:source:]): new
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:rect:event:pasteboard:source:]): simplified, this method now just creates a drag image and starts the drag
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge allowDHTMLDrag:UADrag:]): now calls _delegateDragSourceActionMask on WebHTMLView to interact with the delegate
        * WebView.subproj/WebDefaultUIDelegate.m:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]): call new delegate method, cleaned-up a little
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:actionMask:]): call drag caret methods on WebView instead of WebBridge so WebView can make sure only 1 HTML view has a drag cursor
        (-[WebHTMLView draggingCancelledWithDraggingInfo:]): ditto
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): ditto
        (-[WebHTMLView _delegateDragSourceActionMask]): new, gets drag source action mask from delegate
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView mouseDown:]): get the drag source action mask from the delegate
        (-[WebImageView mouseDragged:]): inform the delegate of the drag
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): assert that dragCursorBridge is nil
        (-[WebView _close]): release dragCursorBridge
        (-[WebView _bridgeAtPoint:]): new
        (-[WebView editableDOMRangeForPoint:]): new API
        (-[WebView moveDragCaretToPoint:]): new API
        (-[WebView removeDragCaret]): new API
        (-[WebView _frameViewAtWindowPoint:]): moved so this can be called internally
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2004-07-10  Trey Matteson  <trey@apple.com>

	Prep work for latest delegate API for dragging.  In addition, I also straightened out all
	the cases of DHTML setting a drag image or setting pasteboard data, and how that would
	override WebKit's default behavior (which follows how WinIE does things).

        Reviewed by Chris.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:archive:rect:URL:title:event:dragImage:dragLocation:writePasteboard:]):
	New args to allow WebCore override of dragImage and pasteboard data.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge allowDHTMLDrag:UADrag:]):  New method to return the drag action info to WC.
        (-[WebBridge startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
	Pass along new args.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
	Allow WebCore to override drag image and pasteboard data for any type of drag.
        (-[WebHTMLView mouseDragged:]):  Pass NO for new args.
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView mouseDragged:]):  Pass NO/nil for new args.

=== Safari-144 ===

2004-06-10  Kevin Decker  <kdecker@apple.com>

        Reviewed by John.

        * WebView.subproj/WebResource.m:
        (-[WebResource description]):
            -added per request of cblu
        (-[WebResource _response]):
            -added this method to the header
        (-[WebResource _stringValue]):
            - gives the string value of the NSData representation
        * WebView.subproj/WebResourcePrivate.h:

2004-06-10  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebBridge.m: Removed undo-related methods.
        (-[WebBridge undoManager]): Added.

        * WebKit.pbproj/.cvsignore: Updated for new Xcode files.

2004-06-09  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:
        
        <rdar://problem/3672088>: "Editable WebViews should maintain a selection even when they're not firstResponder"

        Add some code to determine whether a WebHTMLView should maintain an
        inactive selection when the view is not first responder. Traditionally,
        these views have not maintained such selections, clearing them when the
        view was not first responder. However, for appls embedding this view as
        an editing widget, it is desirable to act more like an NSTextView. For
        now, however, the view only acts in this way when the web view is set to
        be editable with -[WebView setEditable:YES]. This will maintain
        traditional behavior for WebKit clients dating back to before this
        change, and will likely be a decent switch for the long term, since
        clients to ste the web view to be editable probably want it to act like
        a "regular" Cocoa view in terms of its selection behavior.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateTextBackgroundColor]): Add code to tell whether the view is resigning first responder,
        and if it is, use the inactive text background color.
        (-[WebHTMLView maintainsInactiveSelection]): New helper which does checks to see if the new selection
        behavior should be used, or whether we should continue with traditional WebKit behavior.
        (-[WebHTMLView resignFirstResponder]): Call new maintainsInactiveSelection helper. If true,
        do not clear the selection.
        * WebView.subproj/WebHTMLViewInternal.h: Add resigningFirstResponder flag.

2004-06-09  Chris Blumenberg  <cblu@apple.com>

	Implemented drag destination portion of the new drag & drop API.

        Reviewed by trey.

        * WebView.subproj/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:dragDestinationActionMaskForDraggingInfo:]): new delegate implementation
        (-[WebDefaultUIDelegate webView:willPerformDragDestinationAction:forDraggingInfo:]): ditto
        * WebView.subproj/WebDocumentInternal.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:actionMask:]): handle the action mask
        (-[WebHTMLView concludeDragForDraggingInfo:actionMask:]): ditto
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebUIDelegatePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _dragOperationForDraggingInfo:]): call new delegate methods
        (-[WebView performDragOperation:]): ditto
        * WebView.subproj/WebViewInternal.h:
        * WebView.subproj/WebViewPrivate.h:

2004-06-09  Richard Williamson   <rjw@apple.com>

        Implemented PDF rendering for the drawImage() function
        in Context2D.  This allows PDF files to be drawn in scaled
        or rotated context without rasterization artifacts.
        
        The PDF image is currently NOT cached.  Caching can/will be added
        as an optimization.  The hooks are already in place to flush
        the cache as necessary.
        
        Reviewed by John.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer _needsRasterFlush]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        (-[WebImageRenderer _PDFDocumentRef]):
        (-[WebImageRenderer _PDFDraw]):
        (-[WebImageRenderer _PDFDrawFromRect:toRect:operation:alpha:flipped:]):
        (-[WebImageRenderer MIMEType]):
        (ReleasePDFDocumentData):
        (-[WebPDFDocument initWithData:]):
        (-[WebPDFDocument dealloc]):
        (-[WebPDFDocument documentRef]):
        (-[WebPDFDocument mediaBox]):
        (-[WebPDFDocument bounds]):
        (-[WebPDFDocument adjustCTM:]):
        (-[WebPDFDocument setCurrentPage:]):
        (-[WebPDFDocument currentPage]):
        (-[WebPDFDocument pageCount]):

        Added back check for old plugin API.
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadForPluginChanges]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addSubview:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameRequiredForMIMEType:URL:]):

2004-06-08  Trey Matteson  <trey@apple.com>

	In DHTML dragging there is no notion of registering for types, so we'd
	like to just pass all types down to WebCore.  It turns out that the per-type
	registration doesn't matter as far as the underlying drag service is
	concerned, so Cocoa is already getting called for any type.  We just hack and
	override a private method to ensure we accept any type.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView _hitTest:dragTypes:]):  We accept any drag type if it is within
	our view, without overriding a subview's decision.

2004-06-08  Trey Matteson  <trey@apple.com>

	A DHTML drag source can now change the dragging image during the drag.  Currently
	it may only be set to a static image.

        Reviewed by John

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setDraggingImage:at:]):  Typical bridge glue.
        * WebView.subproj/WebHTMLView.m:
        (FlipImageSpec):  New utility, copied from AppKit.
        (-[WebHTMLView _setDraggingImage:at:]):  Mostly copied from AppKit.  Sets the drag
	image using CG API.
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-06-08  Chris Blumenberg  <cblu@apple.com>

	Fixed: <rdar://problem/3640423>: (REGRESSION: can't paste text copied from web page into Excel (due to HTML on the pasteboard?))

        Reviewed by darin.

        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _selectionPasteboardTypes]): don't include NSHTMLPboardType
        (-[WebHTMLView _selectedArchive]): removed markup string parameter
        (_selectionPasteboardTypes::if): don't put NSHTMLPboardType on the pasteboard
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed <rdar://problem/3676761>: (REGRESSION: Text Bigger/Smaller commands are always disabled in TOT)

        * WebView.subproj/WebHTMLView.m: Add @interface declaration for WebTextSizing category
        on WebHTMLView. This must have gotten lost somewhere along the way.

2004-06-05  Trey Matteson  <trey@apple.com>

        WebKit no longer causes an endless stream of dragexit events to
        occur at the DHTML level when hovering over an element that is
        not accepting the drag.

        Reviewed by Chris

        * WebView.subproj/WebView.m:
        (-[WebView _dragOperationForDraggingInfo:]):  If the potential target refuses
        the item, don't turn around and immediately tell it to cancel the drag, which is
        what leads to the exit event happening at the DOM level.  If the target just
        refused the drag, it should not have anything it needs to cancel.

2004-06-03  Trey Matteson  <trey@apple.com>

        DHTML dragging uses the Cocoa NSDragOperation on both the source and dest ends.
        Most of the real work is in WebCore.

        Reviewed by rjw

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startDraggingImage:at:operation:event:]):  Pass the drag op along.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:operation:event:]):  Remember drag op from WC.
        (-[WebHTMLView mouseDragged:]):  Pass None for the op (alternate code path that will
        be going away).
        (-[WebHTMLView draggingSourceOperationMaskForLocal:]):  Use the WC drag op.
        * WebView.subproj/WebHTMLViewInternal.h:
        * WebView.subproj/WebHTMLViewPrivate.h:

=== Safari-143 ===

2004-06-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3674921>: (can't drag an image from Desktop to Blot document)

        Reviewed by mjs.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _imageElementWithImageResource:]): factored out from _documentFragmentWithImageResource:
        (-[WebDataSource _documentFragmentWithImageResource:]): call _imageElementWithImageResource:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _imageExistsAtPaths:]): new
        (-[WebHTMLView _documentFragmentWithPaths:]): new
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): handle NSFilenamesPboardType
        (+[WebHTMLView _insertablePasteboardTypes]): include NSFilenamesPboardType
        (-[WebHTMLView _canProcessDragWithDraggingInfo:]): check for NSFilenamesPboardType and check that the files are images

2004-06-04  Richard Williamson   <rjw@apple.com>

        Fixed crasher from last checkin.
        
        Reviewed by Ken.

        * Plugins.subproj/WebPluginDatabase.m:
        (+[WebPluginDatabase setAdditionalWebPlugInPaths:]):
        (pluginLocations):

2004-06-03  Richard Williamson   <rjw@apple.com>

        Add SPI to allow setting of plugin load path.
                Reviewed by Hyatt.

        * Plugins.subproj/WebPluginDatabase.h:
        * Plugins.subproj/WebPluginDatabase.m:
        (+[WebPluginDatabase setAdditionalWebPlugInPaths:]):
        (pluginLocations):

2004-06-03  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed <rdar://problem/3677038>: (Need SPI to get URL of favicon for a site)

        * Misc.subproj/WebIconDatabase.h: Add iconURLForURL: method.
        * Misc.subproj/WebIconDatabase.m: (-[WebIconDatabase iconURLForURL:]): Added.

2004-06-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for these bugs:
        
        <rdar://problem/3675806>: "Make API name change for -webViewShouldBeginEditing:inDOMRange:"
        <rdar://problem/3675809>: "Make API name change for -webViewShouldEndEditing:inDOMRange:"

        New names are -webView:shouldBeginEditingInDOMRange: and -webView:shouldEndEditingInDOMRange:, 
        respectively.

        * WebView.subproj/WebDefaultEditingDelegate.m:
        (-[WebDefaultEditingDelegate webView:shouldBeginEditingInDOMRange:]):
        (-[WebDefaultEditingDelegate webView:shouldEndEditingInDOMRange:]):
        * WebView.subproj/WebEditingDelegate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _shouldBeginEditingInDOMRange:]):
        (-[WebView _shouldEndEditingInDOMRange:]):

2004-06-02  Richard Williamson   <rjw@apple.com>

        conformsToProtocol:@protocol(WebPlugin) becomes
        respondsToSelector:@selector(webPlugInInitialize) because
        protocol was changed to an informal protocol.
                Reviewed by Kevin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameRequiredForMIMEType:URL:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addSubview:]):

2004-06-01  Trey Matteson  <trey@apple.com>

        First cut at source side of DHTML dragging.  Most of the work is in WebCore.

        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startDraggingImage:at:event:]):  Added image and loc args for
        when WC tells WK to start a drag.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _startDraggingImage:at:event:]):  New image and loc args coming
        from WebCore.  Hysteresis is moved to WC.
        (-[WebHTMLView mouseDragged:]):  Call new _startDragging method.
        (-[WebHTMLView draggedImage:movedTo:]):  Pass event to WC.
        (-[WebHTMLView draggedImage:endedAt:operation:]):  Pass event to WC.
        (-[WebHTMLView mouseUp:]):  Reset firstMouseDownEvent.  Fixes bug where
        we would occasionally short-circuit WC event handling due to aliasing
        problem with this event.
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-06-02  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed problem with timing of delegate callbacks in the back/forward cache case

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]): Move code to indicate page is done loading in the
        back/forward cache case from here ...
        (-[WebFrame _opened]): ... to here.

2004-06-01  Richard Williamson   <rjw@apple.com>

        Fixed deployment build warning.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):

2004-06-01  Richard Williamson   <rjw@apple.com>

        Added support for drawImage and drawImageFromRect to <CANVAS>
        Added support for composite attribute to <CANVAS>

        Reviewed by Trey.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageContext initWithBounds:context:]):
        (-[WebImageContext dealloc]):
        (-[WebImageContext saveGraphicsState]):
        (-[WebImageContext restoreGraphicsState]):
        (-[WebImageContext isDrawingToScreen]):
        (-[WebImageContext focusStack]):
        (-[WebImageContext setFocusStack:]):
        (-[WebImageContext bounds]):
        (-[WebImageContext isFlipped]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer _beginRedirectContext:]):
        (-[WebImageRenderer _endRedirectContext:]):
        (-[WebImageRenderer _needsRasterFlush]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        (-[WebImageRenderer drawImageInRect:fromRect:]):
        (-[WebImageRenderer flushRasterCache]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:context:]):
        (-[WebImageRenderer tileInRect:fromPoint:context:]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]):
        (-[WebImageRendererFactory imageRendererWithName:]):
        (-[WebImageRendererFactory CGCompositeOperationInContext:]):
        (-[WebImageRendererFactory setCGCompositeOperation:inContext:]):
        (-[WebImageRendererFactory setCGCompositeOperationFromString:inContext:]):

2004-06-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey.
        
        Work on text-align API. Marked these bugs fixed:
        <rdar://problem/3655380>: (Editing: -alignCenter: method unimplemented (WebKit editing API))
        <rdar://problem/3655381>: (Editing: -alignJustified: method unimplemented (WebKit editing API))
        <rdar://problem/3655383>: (Editing: -alignLeft: method unimplemented (WebKit editing API))
        <rdar://problem/3655384>: (Editing: -alignRight: method unimplemented (WebKit editing API))        
        
        in favor of opening this bug:
        <rdar://problem/3675191>: (Editing: -alignLeft: and friends mostly implemented but not 
        yet working (WebKit editing API))        

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for these changes
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView changeDocumentBackgroundColor:]):
        added a FIXME about why this is still not quite right
        (-[WebHTMLView _alignSelectionUsingCSSValue:]):
        new method, bottleneck for the various values
        (-[WebHTMLView alignCenter:]):
        call _alignSelectionUsingCSSValue:@"center"
        (-[WebHTMLView alignJustified:]):
        call _alignSelectionUsingCSSValue:@"justify"
        (-[WebHTMLView alignLeft:]):
        call _alignSelectionUsingCSSValue:@"left"
        (-[WebHTMLView alignRight:]):
        call _alignSelectionUsingCSSValue:@"right"

2004-06-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Ken.
        
        - fixed <rdar://problem/3655378>: (Editing: -changeDocumentBackgroundColor: 
        method unimplemented (WebKit editing API))
        - made startSpeaking: actually work; previous implementation raised a DOMException

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        added range parameter
        (-[WebHTMLView _entireDOMRange]):
        new convenience method
        (-[WebHTMLView changeDocumentBackgroundColor:]):
        now affects entire document, not just selected range, a la NSTextView
        (-[WebHTMLView changeColor:]):
        now passes in a range to _changeCSSColorUsingSelector:inRange:
        (-[WebHTMLView startSpeaking:]):
        now uses _entireDOMRange

2004-06-01  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3661505>: (REGRESSION (Safari-140) can't drag standalone images more than once)

        Reviewed by john.

        * WebView.subproj/WebImageView.m:
        (-[WebImageView mouseDown:]): set ignoringMouseDraggedEvents to NO. This line of code was deleted somehow.

2004-06-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.
        
        - fixed <rdar://problem/3657003>: (HTML Editing: Color panel doesn't work)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _colorPanelColorAsStyleUsingSelector:]):
        new method, returns a DOMCSSStyleDeclaration *
        (-[WebHTMLView _changeCSSColorUsingSelector:]):
        new method, sets a color-related style attribute on the selection
        (-[WebHTMLView changeDocumentBackgroundColor:]):
        call _changeCSSColorUsingSelector: with @selector(setBackgroundColor:)
        (-[WebHTMLView changeColor:]):
        call _changeCSSColorUsingSelector: with @selector(setColor:); also added
        comments explaining why changeDocumentBackgroundColor: will never actually
        be called until an AppKit code-incest mess is straighted out.

2004-06-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _fontManagerOperationAsStyle]): Fixed typo in family-name code that caused
        family names to match when they should not.

2004-06-01  Chris Blumenberg  <cblu@apple.com>

        Made paste and drop ask the delegate before making any replacements.

        Reviewed by kocienda.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]): renamed, now calls _shouldInsertFragment:replacingDOMRange:givenAction:
        (-[WebHTMLView _shouldInsertFragment:replacingDOMRange:givenAction:]): new, asks delegate
        (-[WebHTMLView concludeDragForDraggingInfo:]): now calls _shouldInsertFragment:replacingDOMRange:givenAction:
        (-[WebHTMLView paste:]): call renamed _pasteWithPasteboard:allowPlainText:
        (-[WebHTMLView pasteAsRichText:]): ditto

2004-05-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _fontManagerOperationAsStyle]):
        First cut at figuring out what operation the font manager is doing without
        digging into its private data structures.

2004-05-28  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - various editing-related improvements
        - fixed <rdar://problem/3655366>: (Editing: -selectParagraph: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655367>: (Editing: -selectLine: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655369>: (Editing: -selectWord: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655392>: (Editing: -uppercaseWord: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655393>: (Editing: -lowercaseWord: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655394>: (Editing: -capitalizeWord: method unimplemented (WebKit editing API))

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _alterCurrentSelection:direction:granularity:]): Removed the call to
        ensureCaretVisible. This is now handled on the other side of the bridge.
        (-[WebHTMLView moveDown:]): Changed to use WebSelectByLine granularity instead of
        WebSelectDown direction.
        (-[WebHTMLView moveDownAndModifySelection:]): Ditto.
        (-[WebHTMLView moveUp:]): Ditto.
        (-[WebHTMLView moveUpAndModifySelection:]): Ditto.
        (-[WebHTMLView _expandSelectionToGranularity:]): Added.
        (-[WebHTMLView selectParagraph:]): Implemented by calling _expandSelectionToGranularity.
        (-[WebHTMLView selectLine:]): Ditto.
        (-[WebHTMLView selectWord:]): Ditto.
        (-[WebHTMLView _fontManagerOperationAsStyle]): Added. Placeholder for the job of figuring
        out what style change to make based on NSFontManager.
        (-[WebHTMLView changeFont:]): Implemented, but not really tested because guts are still
        missing due to lack of above method.
        (-[WebHTMLView insertTab:]): Removed the call to ensureCaretVisible.
        (-[WebHTMLView insertNewline:]): Removed the call to ensureCaretVisible.
        (-[WebHTMLView insertParagraphSeparator:]): Made this insert a newline for now.
        (-[WebHTMLView _changeWordCaseWithSelector:]): Added.
        (-[WebHTMLView uppercaseWord:]): Implemented by calling _changeWordCaseWithSelector.
        (-[WebHTMLView lowercaseWord:]): Ditto.
        (-[WebHTMLView capitalizeWord:]): Ditto.
        (-[WebHTMLView deleteBackward:]): Removed the call to ensureCaretVisible.
        (-[WebHTMLView checkSpelling:]): Put a pile of AppKit code in here as a placeholder.
        (-[WebHTMLView startSpeaking:]): Use the new stringForRange: method instead of outerText.
        That way we can handle cases where the entire document is selected.
        (-[WebHTMLView insertText:]): Removed the call to ensureCaretVisible.

2004-05-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3672129>: (selection deselects when clicking editable WebView in background window)

        Fixed this problem by using NSTextView's approach of only allowing dragging on first mouse down.

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView acceptsFirstMouse:]): store the first mouse down
        (-[WebHTMLView mouseDown:]): Don't tell WebCore about the first mouse down event since only dragging can occur on the first mouse down.
        (-[WebHTMLView mouseDragged:]): Don't tell WebCore about the drags that occur after the first mouse down since only dragging can occur after the first mouse down.
        * WebView.subproj/WebHTMLViewInternal.h:

2004-05-28  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebView.m: At Ken's suggestion, for better efficiency and safety,
        use _cmd rather than explicit selector names in the forwarding methods.

2004-05-28  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - implemented a few more editing operations, moved code from WebView to WebHTMLView

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge respondToChangedContents]): Call _updateFontPanel on the WebHTMLView, not the WebView.
        (-[WebBridge respondToChangedSelection]): Ditto.

        * WebView.subproj/WebHTMLView.m: Moved WebElementOrTextFilter class here from WebView and
        gave it a prefix so it won't conflict with developers' class names.
        (-[WebHTMLView _updateFontPanel]): Moved here from WebView.

        * WebView.subproj/WebView.m:
        (-[WebView toggleSmartInsertDelete:]): Added.
        (-[WebView toggleContinuousSpellChecking:]): Added.
        (-[WebView isContinuousGrammarCheckingEnabled]): Added.
        (-[WebView setContinuousGrammarCheckingEnabled:]): Added.
        (-[WebView toggleContinuousGrammarChecking:]): Added.
        (-[WebView setSmartInsertDeleteEnabled:]): Implemented. We have the flag now, although we
        still don't actually have smart insert and delete implemented.
        (-[WebView smartInsertDeleteEnabled]): Ditto.
        (-[WebView setContinuousSpellCheckingEnabled:]): Implemented.
        (-[WebView isContinuousSpellCheckingEnabled]): Implemented.
        (-[WebView spellCheckerDocumentTag]): Implemented.
        (-[WebView _preflightSpellCheckerNow:]): Added.
        (-[WebView _preflightSpellChecker]): Added.
        (-[WebView _continuousCheckingAllowed]): Added.

        * WebView.subproj/WebHTMLViewInternal.h: Added. We'll things here from WebHTMLViewPrivate so
        they are internal to the framework, rather than SPI.
        * WebKit.pbproj/project.pbxproj: Added WebHTMLViewInternal.h.
        * WebView.subproj/WebHTMLViewPrivate.h: Moved WebHTMLViewPrivate into the internal header.
        Despite its name, it's internal, not SPI.

        * WebView.subproj/WebViewPrivate.h: Moved WebViewPrivate into the internal header.
        Despite its name, it's internal, not SPI. Added a number of new operations which should
        be public API. We'll have to figure out what to do about API review and the WWDC deadline.
        * WebView.subproj/WebViewInternal.h: Removed _updateFontPanel method.

        * English.lproj/StringsNotToBeLocalized.txt: Update.

2004-05-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        The font panel now updates correctly, reflecting the current selection. There may
        still be some bugs and corner cases to handle, but this will work for a general
        implementation of the feature.

        * WebView.subproj/WebView.m:
        (+[ElementOrTextFilter filter]): Added. This filter will accept DOM elements and
        text nodes and skip everything else. This filter is used when walking a selection
        to determine the fonts in use.
        (-[ElementOrTextFilter acceptNode:]): DOM node filter implementation method.
        (-[WebView _fontFromStyle]): Removed, in lieu of new fontForCurrentPosition call on the bridge.
        (-[WebView _updateFontPanel]): Reworked to use a TreeWalker instead of a NodeIterator. This
        was done since the iterator must be rooted at the document root, but start iterating 
        at the start of the selection. TreeWalker's setCurrentNode allows this to be done.

2004-05-27  Kevin Decker  <kdecker@apple.com>

        * Plugins.subproj/WebScriptObject.h:

2004-05-27  Kevin Decker  <kdecker@apple.com>

        Reviewed by Ken.
        
        - error messages (eg. from JavaScriptCore) sent to the bridge now 
          get delievered to a new delegate method.  
    
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge addMessageToConsole:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebUIDelegatePrivate.h:

=== Safari-142 ===

2004-05-27  Trey Matteson  <trey@apple.com>

        First cut at DHTML dragging, destination side.  Dragging text, files and URLs onto
        elements works.  Type conversion from NSPasteboard to MIME types is hardwired.
        No JS access yet to modifier keys, or operations mask.

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:]): Call DHTML dragging via bridge.
        (-[WebHTMLView draggingCancelledWithDraggingInfo:]): Ditto.
        (-[WebHTMLView concludeDragForDraggingInfo:]): Ditto.
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _setWebKitDragRespondsToDragging:]):  New SPI for finer grained control than the
        delegate currently has.
        (-[WebView _webKitDragRespondsToDragging]): Ditto.
        (-[WebView _commonInitializationWithFrameName:groupName:]):  Init new flag.
        (-[WebView _dragOperationForDraggingInfo:]):  Comment.
        * WebView.subproj/WebViewPrivate.h:

2004-05-27  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebFrameView.m: (-[WebFrameView _scrollVerticallyBy:]): Added comment.

2004-05-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3667948>: (REGRESSION: Page Down key goes down two pages when smooth scrolling is on)

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _scrollVerticallyBy:]): Added return value to indicate if any scrolling was done.
        This requires using secret AppKit methods; the public methods don't have a return value.
        (-[WebFrameView _pageVertically:]): Added return value to indicate if any scrolling was done.
        (-[WebFrameView scrollPageUp:]): Base call through to next responder on whether any scrolling was done,
        using return value, rather than looking at new scroll position. This was the cause of the bug,
        since with smooth scrolling no scrolling has happened yet when the function returns.
        (-[WebFrameView scrollPageDown:]): Ditto.

        - removed temporary DOMDocument method from WebView

        * WebView.subproj/WebView.m:
        (-[WebView computedStyleForElement:pseudoElement:]): Call getComputedStyle on the document that owns the
        element rather than on the document that currently contains the selection.
        (-[WebView _updateFontPanel]): Get the document from the DOM range rather than using the DOMDocument method.
        (-[WebView styleDeclarationWithText:]): Change this method to not use the DOMDocument method, but do the same
        job with inline code.

        * WebView.subproj/WebViewPrivate.h: Moved a recently-added category that is not SPI out of here.
        * WebView.subproj/WebViewInternal.h: Moved the category in here. And removed the DOMDocument method from it.

        - other changes

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

        * copy-webcore-files-to-webkit: Change tabs to spaces. Quiet the script down by
        making it no longer echo each command or print messages about what it's doing by default.

2004-05-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - moved to new symlink technique for embedding frameworks

        * WebKit.pbproj/project.pbxproj: Get rid of embed-frameworks build step
        because we don't need it any more.

2004-05-27  Darin Adler  <darin@apple.com>

        - fixed Deployment build

        * WebView.subproj/WebView.m: (-[WebView concludeDragOperation:]):
        Got rid of ASSERT-only local variable.

2004-05-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

        - fix further problems with Emerson feed: redirection for RSS feeds

        This is done by removing removing the calls to defer callbacks
        while waiting for [... Maciej stopped typing here ...]

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterNavigationPolicy:formState:]):
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:]):

2004-05-26  Chris Blumenberg  <cblu@apple.com>

        Added and implemented proposed dragging API changes. These changes are necessary to make JS dragging work properly.

        Reviewed by trey.

        * WebView.subproj/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:shouldDetermineDragOperationForDraggingInfo:dragOperation:]): instead of calling back to the WebView to get the default drag operation, return YES. Return NO in order to return a custom drag operation. Removed element parameter since another new API provides a way to get that.
        (-[WebDefaultUIDelegate webView:shouldProcessDragWithDraggingInfo:]): Removed element parameter since another new API provides a way to get that.
        * WebView.subproj/WebDocumentInternal.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:]): now returns a drag operation
        (-[WebHTMLView draggingCancelledWithDraggingInfo:]): moved
        * WebView.subproj/WebUIDelegatePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView elementAtPoint:]): new proposed API
        (-[WebView dragOperationForDraggingInfo:]): removed code from this API that should be removed
        (-[WebView _dragOperationForDraggingInfo:]): call new API
        (-[WebView concludeDragOperation:]): call new API

2004-05-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - moved HTML editing operations from WebView to WebHTMLView, leaving only forwarding machinery
          at the WebView level

        - fixed <rdar://problem/3655412>: (Editing: -startSpeaking: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655414>: (Editing: -stopSpeaking: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655375>: (Editing: -pasteAsRichText: method unimplemented (WebKit editing API))

        * WebView.subproj/WebView.h: Added missing declaration of selectionAffinity. I think this
        omission was an editorial mistake.

        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]): Use _frameForCurrentSelection directly,
        since it no longer returns nil.
        (-[WebView pasteboardTypesForSelection]): Use _frameForCurrentSelection instead of going through the bridge.
        (-[WebView _frameForCurrentSelection]): Renamed from _currentFrame and changed to return main frame
        rather than nil when called on WebView that has no current selection.
        (-[WebView _bridgeForCurrentSelection]): Moved in file.
        (-[WebView _updateFontPanel]): Removed the one call to _currentSelectionIsEditable here, since
        it was the only one left in this file. Eventually this code will move to WebHTMLView.
        (-[WebView _performResponderOperation:with:]): Name change.

        * WebView.subproj/WebDataSource.m: (-[WebDataSource _documentFragmentWithImageResource:]):
        Build document fragment using DOM instead of composing HTML text.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:allowPlainText:]): Added allowPlainText boolean,
        moved method into new location in file so it can be in the right category, changed link pasting
        to use DOM instead of composing HTML text.
        (-[WebHTMLView _replaceSelectionWithPasteboard:selectReplacement:allowPlainText:]): Added allowPlainText
        boolean, moved method into new location in file so it can be in the right category.
        (-[WebHTMLView concludeDragForDraggingInfo:]): Pass YES for allowPlainText.
        (-[WebHTMLView keyDown:]): Set keyDownEvent field for use by workaround below.
        (-[WebHTMLView centerSelectionInVisibleArea:]): Moved here from WebView.
        (-[WebHTMLView _alterCurrentSelection:direction:granularity:]): Ditto.
        (-[WebHTMLView moveBackward:]): Ditto.
        (-[WebHTMLView moveBackwardAndModifySelection:]): Ditto.
        (-[WebHTMLView moveDown:]): Ditto.
        (-[WebHTMLView moveDownAndModifySelection:]): Ditto.
        (-[WebHTMLView moveForward:]): Ditto.
        (-[WebHTMLView moveForwardAndModifySelection:]): Ditto.
        (-[WebHTMLView moveLeft:]): Ditto.
        (-[WebHTMLView moveLeftAndModifySelection:]): Ditto.
        (-[WebHTMLView moveRight:]): Ditto.
        (-[WebHTMLView moveRightAndModifySelection:]): Ditto.
        (-[WebHTMLView moveToBeginningOfDocument:]): Ditto.
        (-[WebHTMLView moveToBeginningOfLine:]): Ditto.
        (-[WebHTMLView moveToBeginningOfParagraph:]): Ditto.
        (-[WebHTMLView moveToEndOfDocument:]): Ditto.
        (-[WebHTMLView moveToEndOfLine:]): Ditto.
        (-[WebHTMLView moveToEndOfParagraph:]): Ditto.
        (-[WebHTMLView moveUp:]): Ditto.
        (-[WebHTMLView moveUpAndModifySelection:]): Ditto.
        (-[WebHTMLView moveWordBackward:]): Ditto.
        (-[WebHTMLView moveWordBackwardAndModifySelection:]): Ditto.
        (-[WebHTMLView moveWordForward:]): Ditto.
        (-[WebHTMLView moveWordForwardAndModifySelection:]): Ditto.
        (-[WebHTMLView moveWordLeft:]): Ditto.
        (-[WebHTMLView moveWordLeftAndModifySelection:]): Ditto.
        (-[WebHTMLView moveWordRight:]): Ditto.
        (-[WebHTMLView moveWordRightAndModifySelection:]): Ditto.
        (-[WebHTMLView pageDown:]): Ditto.
        (-[WebHTMLView pageUp:]): Ditto.
        (-[WebHTMLView selectParagraph:]): Ditto.
        (-[WebHTMLView selectLine:]): Ditto.
        (-[WebHTMLView selectWord:]): Ditto.
        (-[WebHTMLView copy:]): Moved down in file so it's in the right category.
        (-[WebHTMLView cut:]): Ditto.
        (-[WebHTMLView delete:]): Ditto.
        (-[WebHTMLView paste:]): Ditto.
        (-[WebHTMLView copyFont:]): Moved here from WebView.
        (-[WebHTMLView pasteFont:]): Ditto.
        (-[WebHTMLView pasteAsPlainText:]): Ditto.
        (-[WebHTMLView pasteAsRichText:]): Implemented this by calling the paste code with
        allowPlainText:NO; believe it or not, that's what this means in NSTextView.
        (-[WebHTMLView changeFont:]): Moved here from WebView.
        (-[WebHTMLView changeAttributes:]): Ditto.
        (-[WebHTMLView changeDocumentBackgroundColor:]): Ditto.
        (-[WebHTMLView changeColor:]): Ditto.
        (-[WebHTMLView alignCenter:]): Ditto.
        (-[WebHTMLView alignJustified:]): Ditto.
        (-[WebHTMLView alignLeft:]): Ditto.
        (-[WebHTMLView alignRight:]): Ditto.
        (-[WebHTMLView indent:]): Ditto.
        (-[WebHTMLView insertTab:]): Moved here from WebView, also call insertText rather than
        replaceSelectionWithText so it's undoable like a typed character.
        (-[WebHTMLView insertBacktab:]): Moved here from WebView.
        (-[WebHTMLView insertNewline:]): Moved here from WebView, also call insertText rather than
        replaceSelectionWithText so it's undoable like a typed character.
        (-[WebHTMLView insertParagraphSeparator:]): Moved here from WebView.
        (-[WebHTMLView changeCaseOfLetter:]): Ditto.
        (-[WebHTMLView uppercaseWord:]): Ditto.
        (-[WebHTMLView lowercaseWord:]): Ditto.
        (-[WebHTMLView capitalizeWord:]): Ditto.
        (-[WebHTMLView deleteForward:]): Ditto.
        (-[WebHTMLView deleteBackward:]): Ditto.
        (-[WebHTMLView deleteBackwardByDecomposingPreviousCharacter:]): Ditto.
        (-[WebHTMLView deleteWordForward:]): Ditto.
        (-[WebHTMLView deleteWordBackward:]): Ditto.
        (-[WebHTMLView deleteToBeginningOfLine:]): Ditto.
        (-[WebHTMLView deleteToEndOfLine:]): Ditto.
        (-[WebHTMLView deleteToBeginningOfParagraph:]): Ditto.
        (-[WebHTMLView deleteToEndOfParagraph:]): Ditto.
        (-[WebHTMLView complete:]): Ditto.
        (-[WebHTMLView checkSpelling:]): Ditto.
        (-[WebHTMLView showGuessPanel:]): Ditto.
        (-[WebHTMLView performFindPanelAction:]): Ditto.
        (-[WebHTMLView startSpeaking:]): Implemented this.
        (-[WebHTMLView stopSpeaking:]): Implemented this.
        (-[WebHTMLView insertText:]): Moved here from WebView.

        * WebView.subproj/WebHTMLViewPrivate.h: Removed declarations of methods that are neither
        SPI nor needed outside WebHTMLView.m.

        * WebView.subproj/WebViewInternal.h: Removed _currentFrame, and added _frameForCurrentSelection and
        _bridgeForCurrentSelection.

2004-05-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        <rdar://problem/3652498>: new sniffing support is crashing
        
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient checkContentPolicyForResponse:]): Retain
        listener around call, in case delegate does something that ends up
        invalidating it, like navigating to a new URL.

2004-05-25  Chris Blumenberg  <cblu@apple.com>

        Fixed regression where undoing typing would undo character-by-character.

        Reviewed by kocienda.

        * WebView.subproj/WebView.m:
        (-[WebView insertText:]): call insertText: rather than replaceSelectionWithText:: since text insertion via insertText: is coalesced and this is the behavior we want here

2004-05-25  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Change postDidChangeSelectionNotification and postDidChangeNotification tp
        respondToChangedSelection and respondToChangedContents, respectively, to
        account for the fact that we do work in these calls other than post a
        notification. The need to clear the typing style on both kinds of changes
        inspired the name change.

        Add in support to set and access typing style. We don't do anything with it yet
        except store and return it. Using the typing style is still to come.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge respondToChangedContents]): Change name of functions as described.
        (-[WebBridge respondToChangedSelection]): Change name of functions as described.
        * WebView.subproj/WebView.m:
        (-[WebView dealloc:]): Dealloc typing style ivar.
        (-[WebView setTypingStyle:]): Change to set typing style ivar.
        (-[WebView typingStyle]): Return new typing style ivar.
        * WebView.subproj/WebViewPrivate.h: Add ivar for typing style.

2004-05-25  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John
        
        Improve _bridgeForCurrentSelection so that it is frame-savvy.
        Fixup setSelectedDOMRange:affinity: so that it uses the right bridge.

        * WebView.subproj/WebView.m:
        (-[WebView _bridgeForCurrentSelection]): Use _currentFrame not mainFrame. 
        (-[WebView _currentFrame]): Moved to WebView (WebInternal) category so _bridgeForCurrentSelection can use it.
        (-[WebView setSelectedDOMRange:affinity:]): Derive the bridge to use from the range passed in; _bridgeForCurrentSelection
        is not the right way to get at the document for the range.
        * WebView.subproj/WebViewInternal.h: Add _currentFrame declaration.

2004-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3666022>: (REGRESSION: crash from infinite regress in -[WebFrameView(WebPrivate) scrollPageDown:])

        * WebView.subproj/WebView.m:
        (-[WebView _performResponderOperation:sender:]): Helper method that knows how to pass on operations
        to the responder chain, allowing us to implement operations that will get passed to views inside
        us as necessary. Moved a few methods to this, and soon will move even more.
        (-[WebView scrollLineDown:]): Use the above method.
        (-[WebView scrollLineUp:]): Ditto.
        (-[WebView scrollPageDown:]): Ditto.
        (-[WebView scrollPageUp:]): Ditto.
        (-[WebView copy:]): Ditto.
        (-[WebView cut:]): Ditto.
        (-[WebView paste:]): Ditto.
        (-[WebView delete:]): Ditto.
        (-[WebView insertBacktab:]): Ditto.

2004-05-24  Chris Blumenberg  <cblu@apple.com>

        Improved editing via drag
 
        Reviewed by kocienda.

        * WebView.subproj/WebDataSource.m: 
        (-[WebDataSource _documentFragmentWithImageResource:]): made this method return a fragment instead of replace the selection so that the caller do other things with the fragment
        (-[WebDataSource _documentFragmentWithArchive:]): ditto
        (-[WebDataSource _replaceSelectionWithArchive:selectReplacement:]): call renamed methods
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDocumentInternal.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _documentFragmentFromPasteboard:]): made this method return a fragment instead of replace the selection so that the caller do other things with the fragment
        (-[WebHTMLView _replaceSelectionWithPasteboard:selectReplacement:]): new
        (-[WebHTMLView paste:]): call _replaceSelectionWithPasteboard:selectReplacement:
        (-[WebHTMLView dragOperationForDraggingInfo:]): handle the case where the destination is editable, but the source is not
        (-[WebHTMLView draggingCancelledWithDraggingInfo:]): new, removes drag caret
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:]): remove drag caret when we can't handle the drag
        (-[WebHTMLView concludeDragForDraggingInfo:]): instead of calling paste, move the selection when doing a move and replace the drag caret when doing a copy
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]):
        (-[WebView _setDraggingDocumentView:]): new
        (-[WebView _dragOperationForDraggingInfo:]): if the current dragging document view changes, tell the previous dragging document view that dragging cancelled 
        (-[WebView draggingExited:]): new, tell the previous dragging document view that dragging cancelled
        (-[WebView concludeDragOperation:]): release the dragging document view
        (-[WebView replaceSelectionWithNode:]): pass the selectReplacement BOOL to the bridge
        (-[WebView replaceSelectionWithText:]): ditto
        (-[WebView replaceSelectionWithMarkupString:]): ditto
        (-[WebView replaceSelectionWithArchive:]): ditto
        (-[WebView pasteAsPlainText:]): ditto
        (-[WebView insertTab:]): ditto
        (-[WebView insertText:]): ditto
        * WebView.subproj/WebViewPrivate.h: 

2004-05-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave.
        
        - added private RSSFeedReferrer field to WebHistoryItem so RSS feeds in the
        back/forward list can remember what page (if any) they were initiated from.

        * History.subproj/WebHistoryItem.m:
        new RSSFeedReferrer ivar in private structure
        (-[WebHistoryItemPrivate dealloc]):
        release RSSFeedReferrer
        (-[WebHistoryItem copyWithZone:]):
        copy RSSFeedReferrer
        (-[WebHistoryItem RSSFeedReferrer]):
        return RSSFeedReferrer
        (-[WebHistoryItem setRSSFeedReferrer:]):
        set RSSFeedReferrer

        * History.subproj/WebHistoryItemPrivate.h:
        declare -RSSFeedReferrer and -setRSSFeedReferrer:

2004-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - implemented some of the trivial WebView editing operations; some had bug reports, to wit:
        - fixed <rdar://problem/3655342>: (Editing: -centerSelectionInVisibleArea: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655398>: (Editing: -deleteWordBackward: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655397>: (Editing: -deleteWordForward: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655387>: (Editing: -insertBacktab: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655386>: (Editing: -insertTab: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655351>: (Editing: -moveWordBackward: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655352>: (Editing: -moveWordBackwardAndModifySelection: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655353>: (Editing: -moveWordForward: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655354>: (Editing: -moveWordForwardAndModifySelection: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655374>: (Editing: -pasteAsPlainText: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655362>: (Editing: -scrollLineDown: method unimplemented (WebKit editing API))
        - fixed <rdar://problem/3655363>: (Editing: -scrollLineUp: method unimplemented (WebKit editing API))

        * WebView.subproj/WebView.m:
        (-[WebView centerSelectionInVisibleArea:]): Implemented. The implementation isn't perfect, but it's hooked
        up. It simply calls ensureCaretVisible for now.
        (-[WebView moveBackward:]): Implemented. The WebCore API already has a way to specify backward as opposed
        to left. A separate issue is the fact that these operations don't have bi-di-savvy implementations, but
        now this method is hooked up and will work at least for left-to-right text.
        (-[WebView moveBackwardAndModifySelection:]): Ditto.
        (-[WebView moveForward:]): Ditto.
        (-[WebView moveForwardAndModifySelection:]): Ditto.
        (-[WebView moveWordBackward:]): Ditto.
        (-[WebView moveWordBackwardAndModifySelection:]): Ditto.
        (-[WebView moveWordForward:]): Ditto.
        (-[WebView moveWordForwardAndModifySelection:]): Ditto.
        (-[WebView scrollLineDown:]): Forward to WebFrameView.
        (-[WebView scrollLineUp:]): Ditto.
        (-[WebView scrollPageDown:]): Ditto.
        (-[WebView scrollPageUp:]): Ditto.
        (-[WebView delete:]): Implemented. Follows pattern used in cut, copy, and paste.
        (-[WebView pasteAsPlainText:]): Implemented. Calls delegate, then replaceSelectionWithText: on the bridge.
        (-[WebView insertTab:]): Implemented. Calls delegate, then replaceSelectionWithText: on the bridge.
        (-[WebView insertBacktab:]): Implemented. Does nothing. If we ever change so that you can use a WebView as
        a field editor, then we might have to add code here.
        (-[WebView deleteWordForward:]): Implement by calling moveForwardAndModifySelection: and then delete:.
        Might not be a perfect implementation in the presence of delegates who refuse to delete because it will
        change the selection even if the delete is disallowed.
        (-[WebView deleteWordBackward:]): Implement by calling moveBackwardAndModifySelection: and then delete:.
        Same issue about about delegates as deleteWordForward:.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _pasteFromPasteboard:]): Added a FIXME.

        * DOM.subproj/DOMViews.h: Updated from recent change to WebCore.

2004-05-21  Richard Williamson   <rjw@apple.com>

        Removed _bindObject:forFrame: SPI.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

=== Safari-141 ===

2004-05-21  Darin Adler  <darin@apple.com>

        Reviewed by Ken and Chris.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _pasteFromPasteboard:]): Call replaceSelectionWithText:
        instead of replaceSelectionWithMarkupString: when pasting plain text.

        * WebView.subproj/WebDataSource.m: (-[WebDataSource _replaceSelectionWithMarkupString:baseURL:]):
        Remove bogus check for empty markup. There's nothing wrong with an empty string, and no reason
        that replacing with empty string should be a no-op instead of a delete.

2004-05-20  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed <rdar://problem/3662383>: (REGRESSION: drag slide-back sometimes causes link to load)

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge handleMouseDragged:]):
        Added BOOL result to handleMouseDragged:.
        * WebView.subproj/WebHTMLViewPrivate.h: Added BOOL result to _handleMouseDragged:.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _handleMouseDragged:]): Added BOOL result,
        returning YES when the drag started, and no when the hysteresis has not yet been overcome.

2004-05-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        Provide the methods to glue the WebView's editing delegate so that these methods work:
        
        <rdar://problem/3655316>: "Editing: -webViewShouldBeginEditing:inDOMRange: method unimplemented (WebKit editing API)"
        <rdar://problem/3655317>: "Editing: -webViewShouldEndEditing:inDOMRange: method unimplemented (WebKit editing API)"

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge shouldBeginEditing:]): New method used to glue delegate to focus shifts.
        (-[WebBridge shouldEndEditing:]): Ditto.
        * WebView.subproj/WebView.m:
        (-[WebView _shouldBeginEditingInDOMRange:]): Ditto.
        (-[WebView _shouldEndEditingInDOMRange:]): Ditto.
        * WebView.subproj/WebViewPrivate.h: Ditto.

2004-05-20  Richard Williamson   <rjw@apple.com>

        Fixed typo in header comment.

        Reviewed by Ken.

        * Plugins.subproj/WebScriptObject.h:

2004-05-19  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3462627>: (API: Need a way to disable/customize dragging)

        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:URL:title:archive:types:]): fixed bug that caused exception
        * WebView.subproj/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:shouldBeginDragForElement:dragImage:mouseDownEvent:mouseDraggedEvent:]): new, returns YES
        (-[WebDefaultUIDelegate webView:dragOperationForDraggingInfo:overElement:]): new, returns [WebView dragOperationForDraggingInfo:]
        (-[WebDefaultUIDelegate webView:shouldProcessDragWithDraggingInfo:overElement:]): new, returns YES
        * WebView.subproj/WebDocumentInternal.h: added WebDocumentDragging and WebDocumentElement for document dragging
        * WebView.subproj/WebDocumentPrivate.h: moved WebDocumentSelection to WebDocumentInternal.h
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _actionInformationForNavigationType:event:originalURL:]): 
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _insertablePasteboardTypes]): new 
        (-[WebHTMLView _handleMouseDragged:]): call shouldBeginDragForElement:::: delegate API
        (-[WebHTMLView _mayStartDragWithMouseDragged:]): call renamed elementAtPoint SPI
        (-[WebHTMLView initWithFrame:]): don't register for drag types since this is handled at the WebView
        (-[WebHTMLView menuForEvent:]): call renamed elementAtPoint SPI
        (-[WebHTMLView _isSelectionEvent:]): call renamed elementAtPoint SPI
        (-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]): rather than unregistering drag types on the WebView, just tell it that we're dragging
        (-[WebHTMLView draggedImage:endedAt:operation:]): ditto
        (-[WebHTMLView _canProcessDragWithDraggingInfo:]): new
        (-[WebHTMLView dragOperationForDraggingInfo:]): new WebDocumentDragging SPI
        (-[WebHTMLView draggingUpdatedWithDraggingInfo:]): ditto
        (-[WebHTMLView concludeDragForDraggingInfo:]): ditto
        (-[WebHTMLView elementAtPoint:]): renamed from _elementAtPoint since this is part of the WebDocumentElement SPI
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView elementAtPoint:]): new
        (-[WebImageView menuForEvent:]): call elementAtPoint
        (-[WebImageView mouseDragged:]): rather than unregistering drag types on the WebView, just tell it that we're dragging
        (-[WebImageView draggedImage:endedAt:operation:]): ditto
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (-[WebTextView _elementAtWindowPoint:]): new
        (-[WebTextView elementAtPoint:]): new
        (-[WebTextView menuForEvent:]): call _elementAtWindowPoint
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): removed draggedTypes ivar
        (+[WebView URLFromPasteboard:]): implemented
        (+[WebView URLTitleFromPasteboard:]): implemented
        (-[WebView _registerDraggedTypes]): moved
        (-[WebView _frameViewAtWindowPoint:]): new
        (-[WebView _draggingDocumentViewAtWindowPoint:]): new
        (-[WebView _elementAtWindowPoint:]): new
        (-[WebView dragOperationForDraggingInfo:]): updated this API to handle subviews that may want to handle drags
        (-[WebView _dragOperationForDraggingInfo:]): new, handles UI delegate for drag control
        (-[WebView draggingEntered:]): call _dragOperationForDraggingInfo:
        (-[WebView draggingUpdated:]): ditto
        (-[WebView concludeDragOperation:]): work with the UI delegate and the subview to handle what happens
        * WebView.subproj/WebViewPrivate.h:

2004-05-19  Richard Williamson   <rjw@apple.com>

        Removed extraneous tabs that were added (by XCode?).
        
        * DOM.subproj/DOM-compat.h:
        * Plugins.subproj/WebScriptObject.h:

2004-05-19  Richard Williamson   <rjw@apple.com>

        Updated header copy script to only copy if modified headers
        are different.

        * copy-webcore-files-to-webkit:

2004-05-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt and Darin

        Fix for this bug:
        
        <rdar://problem/3643230>: "can't tab out of contentEditable Elements"

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge interceptEditingKeyEvent:]): Renamed from _editingKeyDown. Also now returns
        a BOOL to report whether the event was handled or not.
        * WebView.subproj/WebView.m:
        (-[WebView _interceptEditingKeyEvent:]): Also renamed from _editingKeyDown. Now includes
        a check if the web view is editable and whether the event is a tab key event. If the former
        is not true and the latter is, the key is not intercepted. This causes the tab to shift once
        the key is processed by other non-editing key-handling mechanisms.
        * WebView.subproj/WebViewPrivate.h: Changed declaration due to name change.

2004-05-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge isEditable]): Return the isEditable value for the
        WebView which contains this bridge's frame.

2004-05-19  Darin Adler  <darin@apple.com>

        - fixed headers with licenses mangled by Xcode auto-indenting

        * DOM.subproj/DOMExtensions.h:
        * WebCoreSupport.subproj/WebGraphicsBridge.h:
        * WebCoreSupport.subproj/WebGraphicsBridge.m:

2004-05-18  David Hyatt  <hyatt@apple.com>

        Improve layout scheduling.
        Reviewed by kocienda

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToLayoutAcceptable]):
        (-[WebFrame _checkLoadCompleteForThisFrame]):
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):

2004-05-18  Richard Williamson   <rjw@apple.com>

        Finished implementation of windowScriptObject.
                Reviewed by Maciej.

        * WebView.subproj/WebView.m:
        (-[WebView windowScriptObject]):

2004-05-18  Richard Williamson   <rjw@apple.com>

        Added WebKit portion of webView:windowScriptObjectAvailable:
        implementation.  Still need to implement creating the WebScriptObject
        wrapper on the WebCore side.
        
        Reviewed by Maciej.

        Removed "_" from _setPageWidthForPrinting:.  This method facilitates
        a work-around for carbon printing.  At some point we may make this
        method public API.
                Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge overrideMediaType]):
        (-[WebBridge windowObjectCleared]):
        * WebView.subproj/WebDefaultFrameLoadDelegate.m:
        (-[WebDefaultFrameLoadDelegate webView:windowScriptObjectAvailable:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView setPageWidthForPrinting:]):

2004-05-18  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3520322>: "can't use <WebKit/HIWebView.h> or <WebKit/CarbonUtils.h> from non-Objective C"

        * Carbon.subproj/CarbonUtils.h: Added ifdefs so file compiles when included from non-Objective-C.
        Changed style to match other Carbon headers a bit more closely. Also remove unnecessary includes.
        * Carbon.subproj/HIWebView.h: Ditto.

        - fixed <rdar://problem/3648505>: "this text file scrolls to the second line instead of first when pressing home"

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _scrollToTopLeft]): Scroll to origin.y instead of assuming that top is 0; can be non-0 for text view.
        (-[WebFrameView _scrollToBottomLeft]): Use NSMaxY instead of height for the same reason.

2004-05-17  David Hyatt  <hyatt@apple.com>

        Fix for performance regression in PLT caused by not setting _timeOfLastCompletedLoad, causing
        page cache to release during the benchmark.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _setState:]):

2004-05-17  Chris Blumenberg  <cblu@apple.com>

        Implemented new WebView pasteboard methods. Made a lot of factoring changes related to pasteboard management.

        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard _web_writableTypesForURL]): renamed to not include "drag" these types are also used for copying
        (+[NSPasteboard _web_writableTypesForImage]): new
        (-[NSPasteboard _web_bestURL]): tweak
        (-[NSPasteboard _web_writeURL:andTitle:types:]): take an array of types that this method should write, don't declare the types since this complicates things for the caller
        (-[NSPasteboard _web_writeImage:URL:title:archive:types:]): ditto
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:archive:rect:URL:title:event:]): call renamed methods
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyLinkToClipboard:]): call code factored out to WebView
        (-[WebDefaultUIDelegate copyImageToClipboard:]): ditto
        * WebView.subproj/WebDocumentPrivate.h:
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedRTFData]): new factored out method
        (-[WebHTMLView _writeSelectionToPasteboard:]): factored code out to writeSelectionWithPasteboardTypes:toPasteboard:
        (-[WebHTMLView _dragImageForLinkElement:]): tweak
        (-[WebHTMLView _handleMouseDragged:]): call renamed methods
        (-[WebHTMLView pasteboardTypesForSelection]): new
        (-[WebTextView writeSelectionWithPasteboardTypes:toPasteboard:]): new, code moved from _writeSelectionToPasteboard:
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:types:]): call renamed methods
        (-[WebImageView copy:]):
        (-[WebImageView writeSelectionToPasteboard:types:]): call renamed methods
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (-[WebTextView pasteboardTypesForSelection]): new
        (-[WebTextView writeSelectionWithPasteboardTypes:toPasteboard:]): new
        * WebView.subproj/WebView.m:
        (-[WebView _writeImageElement:withPasteboardTypes:toPasteboard:]): new
        (-[WebView _writeLinkElement:withPasteboardTypes:toPasteboard:]): mew
        (-[WebView dragOperationForDraggingInfo:]): implemented API
        (-[WebView draggingEntered:]): call API
        (-[WebView draggingUpdated:]): ditto
        (-[WebView concludeDragOperation:]): ditto
        (-[WebView pasteboardTypesForSelection]): implemented API
        (-[WebView writeSelectionWithPasteboardTypes:toPasteboard:]): ditto
        (-[WebView pasteboardTypesForElement:]): ditto
        (-[WebView writeElement:withPasteboardTypes:toPasteboard:]): ditto
        * WebView.subproj/WebViewPrivate.h:

2004-05-17  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Remove overrides in WebView for scrollPageDown and scrollPageUp.
        NSView behavior gives us just what we want, and there is no
        special behavior required for editing.

        <rdar://problem/3655364>: "Editing: -scrollPageDown: method unimplemented (WebKit editing API)"
        <rdar://problem/3655365>: "Editing: -scrollPageUp: method unimplemented (WebKit editing API)"

        * WebView.subproj/WebView.h: Comment methods out and add a note about why.
        * WebView.subproj/WebView.m: Remove stubbed out implementation.

2004-05-14  Vicki Murley  <vicki@apple.com>

        Reviewed by mjs.
 
        <rdar://problem/3642427>: framework marketing number should be 2.0 for DoubleBarrel release

        * WebKit.pbproj/project.pbxproj: change CFBundleShortVersionString to 2.0

2004-05-14  David Hyatt  <hyatt@apple.com>

        Eliminate timedLayout.
        Reviewed by darin

        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]):
        (-[WebFrame _detachFromParent]):
        (-[WebFrame _transitionToLayoutAcceptable]):
        (-[WebFrame _setState:]):
        (-[WebFrame _checkLoadCompleteForThisFrame]):
        (-[WebFrame stopLoading]):
        * WebView.subproj/WebFramePrivate.h:

=== Safari-140 ===

2004-05-14  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3655495>: (exception loading applets)

        Reviewed by kocienda.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]): when calling old cocoa plug-ins, use old keys

2004-05-14  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3655204>: (repro assertion failure and crash loading java applets)

        Reviewed by kocienda.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]): call pluginViewWithArguments: for old Cocoa plug-ins

2004-05-14  Chris Blumenberg  <cblu@apple.com>

        Copied headers from WebCore.

        * DOM.subproj/DOMCore.h:
        * DOM.subproj/DOMEvents.h:

2004-05-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]): Fixed a compile error: undeclared identifier. 
        Looked like a typo.

2004-05-13  Richard Williamson   <rjw@apple.com>

        Backed out mistaken change that I didn't mean to checkin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):

2004-05-13  Richard Williamson   <rjw@apple.com>

        Updated to reflect new API.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setIsSelected:forView:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadForPluginChanges]):

2004-05-13  Chris Blumenberg  <cblu@apple.com>

        Fixed some indenting issues in public headers.

        * Plugins.subproj/WebJavaPlugIn.h:
        * Plugins.subproj/WebPlugin.h:
        * Plugins.subproj/WebScriptObject.h:
        * WebView.subproj/WebEditingDelegate.h:
        * WebView.subproj/WebFrameView.h:
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebView.h:

2004-05-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        Moved -DOMDocument convenience back to private header.
        I mistakenly moved it to the public header earlier today.

        * WebView.subproj/WebView.h: Removed
        * WebView.subproj/WebViewPrivate.h: Re-added

2004-05-13  Richard Williamson   <rjw@apple.com>

        Updated to implementation to reflect new API.  Left old SPI
        in place for compatibility.  Can remove when the Java plug-in
        updates.

        Reviewed by Chris.

        * Plugins.subproj/WebPlugin.h:
        * Plugins.subproj/WebPluginContainer.h:
        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]):
        (-[WebPluginController showURL:inFrame:]):
        (-[WebPluginController webPlugInContainerShowStatus:]):
        (-[WebPluginController showStatus:]):
        (-[WebPluginController webPlugInContainerSelectionColor]):
        (-[WebPluginController selectionColor]):
        (-[WebPluginController webFrame]):

2004-05-13  Chris Blumenberg  <cblu@apple.com>

        - Added stubs for WebView action and drag & drop customization API's
        - Fixed: <rdar://problem/3616555>: (API: Make DOM extensions and WebKit DOM operations public)

        Reviewed by rjw.

        * DOM.subproj/WebDOMOperations.h: added remaining DOM operations
        * DOM.subproj/WebDOMOperationsPrivate.h:
        * Misc.subproj/WebKit.h: added new public headers
        * WebKit.pbproj/project.pbxproj:
        * WebKit.exp: added symbol for WebElementDOMNodeKey
        * WebView.subproj/WebUIDelegate.h: added new UI delegate methods
        * WebView.subproj/WebView.h: added new pasteboard related methods
        * WebView.subproj/WebView.m:
        (+[WebView URLFromPasteboard:]): new stub
        (+[WebView URLTitleFromPasteboard:]): new stub
        (-[WebView dragOperationForDraggingInfo:]): new stub
        (-[WebView pasteboardTypesForSelection]): new stub
        (-[WebView writeSelectionWithPasteboardTypes:toPasteboard:]): new stub
        (-[WebView pasteboardTypesForElement:]): new stub
        (-[WebView writeElement:withPasteboardTypes:toPasteboard:]): new stub
        * WebView.subproj/WebViewPrivate.h:

2004-05-13  Richard Williamson   <rjw@apple.com>

        Changed imports of all DOM headers.  DOM headers
        should be imported using the normal #import <WebCore/foo.h>,
        they import is modified when copied to WebKit.

        Other approved API changes.  Currently unimplemented.

        Reviewed by Chris.

        * ChangeLog:
        * DOM.subproj/DOM.h:
        * DOM.subproj/DOMCSS.h:
        * DOM.subproj/DOMCore.h:
        * DOM.subproj/DOMEvents.h:
        * DOM.subproj/DOMExtensions.h:
        * DOM.subproj/DOMHTML.h:
        * DOM.subproj/DOMRange.h:
        * DOM.subproj/DOMStylesheets.h:
        * DOM.subproj/DOMTraversal.h:
        * DOM.subproj/DOMViews.h:
        * Plugins.subproj/WebPlugin.h:
        * Plugins.subproj/WebPluginContainer.h:
        * Plugins.subproj/WebPluginPackage.m:
        * Plugins.subproj/WebPluginViewFactory.h:
        * Plugins.subproj/WebScriptObject.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebFrameLoadDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView windowScriptObject]):
        * copy-webcore-files-to-webkit:

2004-05-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Kevin

        Move WebKit editing APIs to public API files.

        * WebCoreSupport.subproj/WebBridge.m: Add WebEditingDelegate include.
        * WebKit.pbproj/project.pbxproj: Go Xcode!
        * WebView.subproj/WebDefaultEditingDelegate.m: Remove WebViewPrivate include; add WebEditingDelegate include.
        * WebView.subproj/WebEditingDelegate.h: Added. New file.
        * WebView.subproj/WebView.h: Move API-approved interfaces to this file.
        * WebView.subproj/WebView.m: Add WebEditingDelegate include.
        * WebView.subproj/WebViewPrivate.h: Move API-approved interfaces from this file.

2004-05-12  Chris Blumenberg  <cblu@apple.com>

        Fixed: 
        <rdar://problem/3633296>: (Japanese input is not working properly in Carbon Web Kit applications (including CarbonWeb))
        <rdar://problem/3631390>: (can't toggle between Input Methods (IMEs) using cmd-space in Carbon Web Kit applications)

        Reviewed by rjw.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter sendSuperEvent:]): call [NSInputContext processInputKeyBindings:inEvent] just as NSApp does
        * Carbon.subproj/HIWebView.m:
        (HIWebViewEventHandler): [NSApp setWindowsNeedUpdate:YES] must be called before events so that ActivateTSMDocument is called to set an active document. Without an active document, TSM will use a default document which uses a bottom-line input window which we don't want.

2004-05-11  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3616537>: (API: Make WebResource, WebArchive and related API's public)
        <rdar://problem/3616471>: (API: provide way to get from WebFrame to DOMDocument and vice versa)

        Reviewed by rjw.

        * DOM.subproj/WebDOMOperations.h:
        * DOM.subproj/WebDOMOperations.m:
        (-[DOMHTMLFrameElement contentFrame]): new
        (-[DOMHTMLIFrameElement contentFrame]): new
        (-[DOMHTMLObjectElement contentFrame]): new
        * DOM.subproj/WebDOMOperationsPrivate.h:
        * Misc.subproj/WebNSImageExtras.m:
        (-[NSImage _web_saveAndOpen]): fixed leak
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _addSubresources:]): made private
        (-[WebDataSource _archiveWithMarkupString:nodes:]): handle object tags with frame content
        (-[WebDataSource _archiveWithCurrentState:]): renamed from _archive, now takes flag
        (-[WebDataSource _replaceSelectionWithArchive:]): call renamed _addSubresources
        (-[WebDataSource webArchive]): new
        (-[WebDataSource mainResource]): new
        (-[WebDataSource subresources]): made public
        (-[WebDataSource subresourceForURL:]): made public
        (-[WebDataSource addSubresource:]): made public
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDocumentPrivate.h:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadRequest:subresources:subframeArchives:]): call renamed _addSubresources
        (-[WebFrame DOMDocument]): new
        (-[WebFrame frameElement]): new
        (-[WebFrame loadArchive:]): made public
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation loadArchive]): call renamed _addSubresources
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation archive]): call webArchive on WebDataSource

2004-05-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - avoid redecoding animated images that are only used once for
        ~2.5% iBench speedup (WebCore part of fix)

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer increaseUseCount]):
        (-[WebImageRenderer decreaseUseCount]):
        (-[WebImageRenderer retainOrCopyIfNeeded]):

2004-05-10  Maciej Stachowiak  <mjs@apple.com>

        Fix build.

        * WebView.subproj/WebFrame.m:

2004-05-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - avoid messing with undo manager needlessly for ~1% HTML iBench speedup

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge registerCommandForUndo:]): mark undo/redo item flag
        (-[WebBridge registerCommandForRedo:]): ditto
        (-[WebBridge clearUndoRedoOperations]): check flag before removing items,
        and clear it after removing them

2004-05-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - -[WebFrame childFrames] is so hot that a special internal
        version which avoids the copy and autorelease results in a .75%
        performance improvement on HTML iBench.

        * WebView.subproj/WebFramePrivate.h: Prototype new method.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _internalChildFrames]): New method, just returns
        internal value instead of copying.

        (-[WebFrame _descendantFrameNamed:]): Use it
        (-[WebFrame _textSizeMultiplierChanged]): likewise
        (-[WebFrame _viewWillMoveToHostWindow:]): likewise
        (-[WebFrame _viewDidMoveToHostWindow]): likewise
        (-[WebFrame _saveDocumentAndScrollState]): likewise
        (-[WebFrame _numPendingOrLoadingRequests:]): likewise
        (-[WebFrame _checkLoadComplete]): Refactored this and it's two
        helpers a little so we could get away with using
        _internalChildFrames.
        (-[WebFrame _checkLoadCompleteForThisFrame]): Renamed from
        _isLoadComplete
        (-[WebFrame _recursiveCheckLoadComplete]): renamed from (class
        method) _recursiveCheckCompleteFromFrame:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _defersCallbacksChanged]): Use it
        (-[WebDataSource isLoading]): likewise
        * WebView.subproj/WebView.m:
        (-[WebView _frameForDataSource:fromFrame:]): likewise
        (-[WebView _frameForView:fromFrame:]): likewise

2004-05-10  Chris Blumenberg  <cblu@apple.com>

        Forgot to commit this copied header.

        * DOM.subproj/DOMExtensions.h:

=== Safari-139 ===

2004-05-06  Chris Blumenberg  <cblu@apple.com>

        * DOM.subproj/WebDOMOperations.h: improved a header doc comment

2004-05-05  Chris Blumenberg  <cblu@apple.com>

        - DOM Extensions API tweaks

        Reviewed by kocienda.

        * DOM.subproj/DOMExtensions.h: copied from WebCore
        * DOM.subproj/WebDOMOperations.h: added header doc comments
        * DOM.subproj/WebDOMOperations.m:
        (-[DOMNode _URLsFromSelectors:]): use renamed URLWithAttributeString
        (-[DOMDocument URLWithAttributeString:]): renamed
        (-[DOMHTMLTableElement _web_background]): new private method
        (-[DOMHTMLTableElement _subresourceURLs]): use new private method
        (-[DOMHTMLTableCellElement _web_background]): new private method
        (-[DOMHTMLTableCellElement _subresourceURLs]): use new private method

2004-05-04  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        * DOM.subproj/DOMTraversal.h: File coppied from WebCore

2004-05-02  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3640419>: "_webkit_stringByReplacingValidPercentEscapes does not handle %00 properly"

        * Misc.subproj/WebNSURLExtras.m: (-[NSString _webkit_stringByReplacingValidPercentEscapes]):
        Use the function in NSURL instead of implementing our own here.

2004-04-30  John Sullivan  <sullivan@apple.com>

        * WebView.subproj/WebView.m:
        fixed deployment build breakage
        
2004-04-30  John Sullivan  <sullivan@apple.com>

        - more work on getting the font panel to work with editable HTML.
        The font panel in Blot now correctly reflects the first selected font when the
        selection is at least one character long.

        Reviewed by Ken.

        * WebView.subproj/WebView.m:
        removed unfinished plumbing to support reflecting selected attributes (e.g. text color,
        underline) in font panel, since this doesn't work in Mail or TextEdit either.
        (_fontFromStyle):
        removed assertion for now
        (-[WebView _updateFontPanel]):
        now uses new bridge method to get the NSFont from the node, instead of trying
        to create an NSFont from a DOMCSSStyleDeclaration

2004-04-29  John Sullivan  <sullivan@apple.com>

        - more work on getting the font panel to work with editable HTML

        Reviewed by Ken.

        * WebView.subproj/WebView.m:
        (-[WebView computedStyleForElement:pseudoElement:]):
        convert nil pseudoElement to empty string because lower level chokes on nil
        (_fontFromStyle):
        I tried to implement this, but was thwarted by missing API, so I added a
        bunch of FIXMEs instead
        (_stylesRepresentSameFont):
        new function, not yet implementable
        (_stylesRepresentSameAttributes):
        new function, not yet implementable
        (-[WebView _updateFontPanel]):
        added code to get first and last element in selection, and to use
        NodeIterator to walk through the entire selection to see if more than one
        font or set of attributes is in use. However, createNodeIterator is declared
        in DOMTraversal.h but not actually defined anywhere, so I had to prevent this
        code from actually being called.

2004-04-28  Chris Blumenberg  <cblu@apple.com>

        - Made WebArchive and WebResource conform to NSCoding and NSCopying.

        Reviewed by rjw.

        * DOM.subproj/WebDOMOperations.h: added header doc comment for WebArchive methods
        * WebView.subproj/WebArchive.h:
        * WebView.subproj/WebArchive.m:
        (-[WebArchive initWithCoder:]): new
        (-[WebArchive encodeWithCoder:]): new
        (-[WebArchive copyWithZone:]): new
        * WebView.subproj/WebResource.h:
        * WebView.subproj/WebResource.m:
        (-[WebResource init]): new
        (-[WebResource initWithData:URL:MIMEType:textEncodingName:frameName:]): call [self init]
        (-[WebResource initWithCoder:]): new
        (-[WebResource encodeWithCoder:]): new
        (-[WebResource copyWithZone:]): new

2004-04-28  John Sullivan  <sullivan@apple.com>

        A little bit more progress in wiring up the font panel.

        Reviewed by Ken.

        * WebView.subproj/WebViewInternal.h:
        put _updateFontPanel here. Also moved _isLoading here, since it was
        already in a category named WebInternal

        * WebView.subproj/WebView.m:
        (-[WebView _isLoading]):
        moved into WebInternal category implementation
        (_textAttributesFromStyle):
        changed from method to function
        (_fontFromStyle):
        added, guts not filled in yet
        (-[WebView _updateFontPanel]):
        now calls these two functions (but results are always nil)
        (-[WebView setSelectedDOMRange:affinity:]):
        remove call to _updateFontPanel here since it's now called in
        the proper bottleneck

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge postDidChangeNotification]):
        call -[WebView _updateFontPanel] in addition to sending notification
        (-[WebBridge postDidChangeSelectionNotification]):
        ditto

2004-04-28  John Sullivan  <sullivan@apple.com>

        - fixed these bugs:
        <rdar://problem/3636570>: "API: [WebPreferences tabsToLinks] should be public API"        
        <rdar://problem/3610597>: "API: could turn "stealth browsing" preference into API"

        Reviewed by Darin.
        
        I just moved the declarations and implementations from one place to another.
        (No clients in WebKit needed their #imports updated.) This confused cvs diff quite a bit.

        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences setTabsToLinks:]):
        (-[WebPreferences tabsToLinks]):
        (-[WebPreferences setPrivateBrowsingEnabled:]):
        (-[WebPreferences privateBrowsingEnabled]):
        (-[WebPreferences _pageCacheSize]):
        (-[WebPreferences _objectCacheSize]):
        (-[WebPreferences _backForwardCacheExpirationInterval]):
        * WebView.subproj/WebPreferencesPrivate.h:

2004-04-27  David Hyatt  <hyatt@apple.com>

        Cut the time spent on an operation inside widthForNextCharacter from 17% of the function time down to less than 
        5% merely by adding a check for non-zero letter-spacing (thus avoiding double precision math in the 
        common case where we just add 0 between letters).
        Reviewed by rjw

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):

2004-04-28  John Sullivan  <sullivan@apple.com>

        Initial plumbing to get the font panel to be updated from an editable
        WebView.

        Reviewed by Ken.

        * WebView.subproj/WebView.m:
        (-[WebView _textAttributesFromStyle:]):
        new dummy method, will need implementation
        (-[WebView _updateFontPanel]):
        new method, sets the font shown in the font panel from the current
        selection. Lots of placeholder stuff.
        (-[WebView setSelectedDOMRange:affinity:]):
        call _updateFontPanel here for now.

2004-04-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge postDidChangeNotification]): Posts Cocoa notification when the document changes
        due to editing.
        (-[WebBridge postDidChangeSelectionNotification]): Posts Cocoa notification when the document selection
        changes.
        * WebKit.exp: Export editing notification string constants.
        * WebView.subproj/WebView.m: Define editing notification string constants.
        (-[WebView computedStyleForElement:pseudoElement:]): Add implementation.
        (-[WebView setEditingDelegate:]): Do work to set up delegate to receive notification callbacks.
        (-[WebView DOMDocument]): Simplify to just call the bridge DOMDocument. No need to jump through hoops here.
        (-[WebView insertNewline:]): Consult delegate before taking action.
        (-[WebView deleteBackward:]): Ditto.
        (-[WebView insertText:]): Ditto.

2004-04-27  John Sullivan  <sullivan@apple.com>

        Fixed broken development build.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToLayoutAcceptable]):
        updated bad variable name used only in LOG statement to match
        recent change.

2004-04-27  Richard Williamson   <rjw@apple.com>

        Fixes for:

        <rdar://problem/3279301>: API: WebKitErrorCannotFindPlugin and WebKitErrorCannotLoadPlugin should use PlugIn
        <rdar://problem/3278513>: API: Need API to control the size of WebHistory
        <rdar://problem/3564519>: API: please add a way to set the media type for a WebView
        <rdar://problem/3565642>: API: allow a way to extend the MIME types that a WebView will display
        <rdar://problem/3577693>: API: add ability to subclass WebView but still use it with Carbon
        
        Reviewed by Chris.

        * Carbon.subproj/HIWebView.h:
        * Carbon.subproj/HIWebView.m:
        (HIWebViewCreate):
        (HIWebViewCreateWithClass):
        (HIWebViewConstructor):
        * History.subproj/WebHistory.h:
        * History.subproj/WebHistory.m:
        (-[WebHistoryPrivate setHistoryAgeInDaysLimit:]):
        (-[WebHistoryPrivate historyAgeInDaysLimit]):
        (-[WebHistoryPrivate setHistoryItemLimit:]):
        (-[WebHistoryPrivate historyItemLimit]):
        (-[WebHistoryPrivate _ageLimitDate]):
        (-[WebHistoryPrivate arrayRepresentation]):
        (-[WebHistory setHistoryItemLimit:]):
        (-[WebHistory historyItemLimit]):
        (-[WebHistory setHistoryAgeInDaysLimit:]):
        (-[WebHistory historyAgeInDaysLimit]):
        * History.subproj/WebHistoryPrivate.h:
        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (registerErrors):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge isViewSelected:]):
        (-[WebBridge overrideMediaType]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]):
        (+[WebView MIMETypesShownAsHTML]):
        (+[WebView setMIMETypesShownAsHTML:]):
        (-[WebView customUserAgent]):
        (-[WebView setMediaStyle:]):
        (-[WebView mediaStyle]):
        * WebView.subproj/WebViewPrivate.h:

2004-04-27  David Hyatt  <hyatt@apple.com>

        Eliminate the preferences for timed/resource layouts.  Accessing them is now taking 0.5% on the cvs-base
        test, so we're just going to hardcode the values instead.
        Reviewed by mjs

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToLayoutAcceptable]):
        (-[WebFrame _isLoadComplete]):
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        (-[WebPreferences _objectCacheSize]):
        * WebView.subproj/WebPreferencesPrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _mainReceivedBytesSoFar:fromDataSource:complete:]):

2004-04-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt
        
        Make selections draw in a more Cocoa-like way, where
        fully-selected lines draw out to the ends of lines, and
        spaces between lines are drawn with the selection color as well.

        * Misc.subproj/WebKitNSStringExtras.m: Use new WebCoreTextGeometry struct. No change in functionality.
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawRun:style:geometry:]): Use new WebCoreTextGeometry struct. No change in functionality.
        (-[WebTextRenderer drawHighlightForRun:style:geometry:]): Ditto.
        (-[WebTextRenderer _CG_drawHighlightForRun:style:geometry:]): Many changes to add the new selection drawing behavior.
        (-[WebTextRenderer _CG_drawRun:style:geometry:]):  Use new WebCoreTextGeometry struct. No change in functionality.
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:geometry:]): Many changes to add the new selection drawing behavior.
        (-[WebTextRenderer _ATSU_drawRun:style:geometry:]):  Use new WebCoreTextGeometry struct. No change in functionality.

2004-04-26  Richard Williamson   <rjw@apple.com>

        Added support for specifying composite operation on an
        image element, i.e.:

        <img composite="source-over" src="triangle.png">
        <img style="position:relative; left:-200px;" composite="destination-in" src="circle.png">

        This feature was requested by the dashboard guys.  They can use it to apply
        transparency masks to widgies.


        Reviewed by Ken.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]):
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):
        (-[WebImageRenderer copyWithZone:]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        (-[WebImageRenderer drawImageInRect:fromRect:]):
        (-[WebImageRenderer drawImageInRect:fromRect:compositeOperator:]):

2004-04-26  Chris Blumenberg  <cblu@apple.com>

        More header doc changes after John's review.
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebResource.h:

2004-04-26  Chris Blumenberg  <cblu@apple.com>

        * WebView.subproj/WebDataSourcePrivate.h: added some header doc comments
        * WebView.subproj/WebFramePrivate.h: fixed header doc typo

2004-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        * Misc.subproj/WebNSURLExtras.m: (hexDigit): Use capitalized hex, not lowercase, for consistency
        with similar functions in WebCore and what other web browsers do.

2004-04-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3627362>: "bad access with libgmalloc in -[_WebCoreHistoryProvider containsItemForURLUnicode:length:]"

        * History.subproj/WebHistory.m:
        (-[_WebCoreHistoryProvider containsItemForURLUnicode:length:]): Add range checks so we
        don't overrun the buffer while looking for slashes.

2004-04-23  Chris Blumenberg  <cblu@apple.com>

        Reviewed by John

        Added header doc comments to proposed API's.

        * WebView.subproj/WebArchive.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebResource.h:

=== Safari-138 ===

2004-04-23  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Added some plumbing for applying styles.

        * DOM.subproj/DOMExtensions.h: Copied from WebCore.
        * WebView.subproj/WebView.m:
        (-[WebView DOMDocument]): Added new helper.
        (-[WebView styleDeclarationWithText:]): Added new helper.
        * WebView.subproj/WebViewPrivate.h: Declare above methods.

2004-04-22  Richard Williamson   <rjw@apple.com>

        Updates to plugin binding APIs.
        Updates to Java plugin APIs.
        Transparency fix for Dashboard.
        Reviewed by John and Greg Bolsinga.

        * Plugins.subproj/WebPluginJava.h: Added.
        New API for Java plugin.        

        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:
        (_NPString::):
        (_NPString::_NPVariant::):
        * Plugins.subproj/npsap.h: Added.
        New API for plugin bindings.        

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView drawRect:]):
        Update for Dashboard.  View must fill with transparency when not
        drawing background.        

        * copy-webcore-files-to-webkit:

2004-04-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        More work to bring code up to date with the latest API proposal. Note that
        all of the replaceXXX methods below now operate on the current selection, so
        the method implementations have been simplifed accordingly.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _replaceSelectionWithArchive:]): New name for _replaceSelectionWithWebArchive.
        * WebView.subproj/WebDataSourcePrivate.h: Ditto.
        * WebView.subproj/WebDefaultEditingDelegate.m:
        (-[WebDefaultEditingDelegate webViewShouldBeginEditing:inDOMRange:]): Added inDOMRange: parameter.
        (-[WebDefaultEditingDelegate webViewShouldEndEditing:inDOMRange:]): Ditto.
        (-[WebDefaultEditingDelegate webView shouldChangeSelectedDOMRange:toDOMRange:proposedRange affinity:stillSelecting:]):
        Missed adding affinity in last patch.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pasteFromPasteboard:]): Call old method with new name: _replaceSelectionWithArchive
        * WebView.subproj/WebView.m:
        (-[WebView replaceSelectionWithNode:]): New version of insertNode:replacingDOMRange:
        (-[WebView replaceSelectionWithText:]): New version of insertText:replacingDOMRange:
        (-[WebView replaceSelectionWithMarkupString:]): New version of insertMarkupString:replacingDOMRange:
        (-[WebView replaceSelectionWithArchive:]): New version of insertWebArchive:replacingDOMRange:
        (-[WebView deleteSelection]): New version of deleteDOMRange:
        (-[WebView applyStyle:]): New version of applyStyle:toElementsInDOMRange:
        * WebView.subproj/WebViewPrivate.h:

2004-04-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Adds the notion of selection affinity to the editing API, bringing it up to
        date with the latest proposal.

        * WebView.subproj/WebView.m:
        (-[WebView _alterCurrentSelection:direction:granularity:]): Pass selection affinity
        to the delegate. We can just pass the current one since this does not change with arrow keys.
        (-[WebView setSelectedDOMRange:affinity:]): Set the affinity on the selection.
        (-[WebView selectionAffinity]): New accessor.
        (-[WebView insertNode:replacingDOMRange:]): Change to pass selection affinity to call
        to set selection. This is just to get the code to compile for now, since this method
        will soon be removed in place of a similar one from the latest proposal that always
        works on the current selection.
        (-[WebView insertText:replacingDOMRange:]): Ditto.
        (-[WebView insertMarkupString:replacingDOMRange:]): Ditto.
        (-[WebView insertWebArchive:replacingDOMRange:]): Ditto.
        (-[WebView deleteDOMRange:]): Ditto.
        (-[WebView applyStyle:toElementsInDOMRange:]): Ditto.
        * WebView.subproj/WebViewPrivate.h: Add selection affinity to API declarations as needed.

2004-04-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Work around this bug:
        <rdar://problem/3630640>: "Calling interpretKeyEvents: in a custom text view can fail to process keys right after app startup"

        * WebView.subproj/WebView.m:
        (-[WebView _editingKeyDown:]): The issue is with a message to nil in AppKit
        key binding manager code. Add call to [NSKeyBindingManager sharedKeyBindingManager] to make
        sure the not-supposed-to-be-nil object is created before calling interpretKeyEvents:.

2004-04-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        Added calls to ensure caret visibility after the editing action is done.

        * WebView.subproj/WebView.m:
        (-[WebView _alterCurrentSelection:direction:granularity:]):
        (-[WebView insertNewline:]):
        (-[WebView deleteBackward:]):
        (-[WebView insertText:]):

2004-04-20  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3605209>: "HITLIST: REGRESSION (131-132): iframes/frames no longer dump on layout tests"

        Reviewed by hyatt.

        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]): the encoding was not being set in the about:blank case. Call receivedData:textEncodingName: as we did in the past to set it.

2004-04-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

         Added implementations for these methods.

        * WebView.subproj/WebView.m:
        (-[WebView moveUpAndModifySelection:]):
        (-[WebView moveWordLeft:]):
        (-[WebView moveWordLeftAndModifySelection:]):
        (-[WebView moveWordRight:]):
        (-[WebView moveWordRightAndModifySelection:]):

2004-04-20  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3622393>: When in stealth mode, visited webpage 
        contents should not be cached to disk

        Reviewed by Ken.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate willCacheResponse:]):
        if will cache to disk and in stealth mode, replace cache response with
        an identical one that won't cache to disk.

2004-04-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        * WebView.subproj/WebView.m:
        (-[WebView moveDown:]): Added implementation.
        (-[WebView moveUp:]): Added implementation.

2004-04-19  Chris Blumenberg  <cblu@apple.com>

        Added support for pasting frames via WebArchives.

        Reviewed by kocienda.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _addSubframeArchives:]): renamed, now allows subframe archives to be added at anytime
        (-[WebDataSource _popSubframeArchiveWithName:]): renamed, now deletes the returned subframe to consume less memory
        (-[WebDataSource _replaceSelectionWithWebArchive:]): added support for subframes
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadRequest:subresources:subframeArchives:]): call renamed methods
        (-[WebFrame _loadURL:intoChild:]): ditto
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation loadArchive]): ditto

=== Safari-137 ===

2004-04-16  Richard Williamson   <rjw@apple.com>

        Added an SPI to allow ObjC instances to be easily bound to 
        JS.  This is needed by the dashboard guys for their prototyping.
        Eventually they will use new API.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView _bindObject:withName:toFrame:]):
        * WebView.subproj/WebViewPrivate.h:

2004-04-16  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3587599>: Mail Page, Web Archives don't preserve subframes
        Moved code that assembled subresource URLs from DOM nodes from WebCore to WebKit.

        Reviewed by rjw.

        * DOM.subproj/DOMExtensions.h: copied from WebCore
        * DOM.subproj/WebDOMOperations.h:
        * DOM.subproj/WebDOMOperations.m:
        (-[DOMNode webArchive]): call renamed methods
        (-[DOMNode markupString]): ditto
        (-[DOMNode _URLsFromSelectors:]): new, returns array of URLs given selectors
        (-[DOMNode _subresourceURLs]): new, base class does nothing, subclasses call _URLsFromSelectors with URL selectors
        (-[DOMDocument webFrame]): new
        (-[DOMRange webArchive]): call renamed methods
        (-[DOMRange markupString]): ditto
        (-[DOMHTMLBodyElement _subresourceURLs]): new
        (-[DOMHTMLInputElement _subresourceURLs]): new
        (-[DOMHTMLLinkElement _subresourceURLs]): new
        (-[DOMHTMLScriptElement _subresourceURLs]): new
        (-[DOMHTMLImageElement _subresourceURLs]): new
        (-[DOMHTMLEmbedElement _subresourceURLs]): new
        (-[DOMHTMLObjectElement _subresourceURLs]): new
        (-[DOMHTMLParamElement _subresourceURLs]): new
        (-[DOMHTMLTableElement _subresourceURLs]): new
        (-[DOMHTMLTableCellElement _subresourceURLs]): new
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebArchive.h:
        * WebView.subproj/WebArchive.m:
        (-[WebArchivePrivate dealloc]): release new subframeArchives ivar
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]): take subframeArchives
        (-[WebArchive _initWithPropertyList:]): new, recursively creates WebArchives
        (-[WebArchive initWithData:]): call _initWithPropertyList
        (-[WebArchive subframeArchives]): new
        (-[WebArchive _propertyListRepresentation]): new, recursively creates property lists of WebArchives
        (-[WebArchive data]): call _propertyListRepresentation
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate saveResource]): call renamed methods
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]): release new pendingSubframeArchives ivar
        (-[WebDataSource _archiveWithMarkupString:nodes:]): renamed and reimplemented, handles subframes
        (-[WebDataSource _archive]): new
        (-[WebDataSource _setPendingSubframeArchives:]): new
        (-[WebDataSource _archiveForFrameName:]): new
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadArchive:]): handle subframes
        (-[WebFrame _loadRequest:subresources:subframeArchives:]): ditto
        (-[WebFrame _loadURL:intoChild:]): use the subframe archive if we have it
        (-[WebFrame loadRequest:]): call renamed methods
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation loadWebArchive]): call renamed methods and handle subframes
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedArchive:]): call renamed methods
        (-[WebHTMLView _pasteFromPasteboard:]): call renamed methods
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebImageRepresentation.m: instead of storing some items from the data source, just store the data source
        (-[WebImageRepresentation dealloc]): removed use of deleted ivars
        (-[WebImageRepresentation URL]): use dataSource instead of ivar
        (-[WebImageRepresentation doneLoading]): use new boolean ivar
        (-[WebImageRepresentation setDataSource:]): store the data source
        (-[WebImageRepresentation receivedData:withDataSource:]): use dataSource instead of ivar
        (-[WebImageRepresentation receivedError:withDataSource:]): ditto
        (-[WebImageRepresentation finishedLoadingWithDataSource:]): ditto
        (-[WebImageRepresentation title]): ditto
        (-[WebImageRepresentation data]): ditto
        (-[WebImageRepresentation filename]): ditto
        (-[WebImageRepresentation archive]): ditto
        * WebView.subproj/WebResource.h:
        * WebView.subproj/WebResource.m:
        (-[WebResourcePrivate dealloc]): release new frame name ivar
        (-[WebResource initWithData:URL:MIMEType:textEncodingName:frameName:]): take a frame name
        (-[WebResource frameName]): new
        (-[WebResource _initWithPropertyList:]): handle frame name
        (-[WebResource _initWithCachedResponse:originalURL:]): call renamed methods
        (-[WebResource _propertyListRepresentation]):
        * WebView.subproj/WebResourcePrivate.h: handle frame name

2004-04-15  David Hyatt  <hyatt@apple.com>

        Make sure isOpaque returns NO when the WebHTMLVIew doesn't draw its background.
        Reviewed by darin

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView isOpaque]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView isOpaque]):

2004-04-15  John Sullivan  <sullivan@apple.com>

        * WebView.subproj/WebPreferencesPrivate.h:
        added comments

2004-04-14  Richard Williamson   <rjw@apple.com>

        Updated fix for 3576315.  Don't hardcode 22 as the titlebar
        height.  (Note, other places in CarbonWindowFrame DO hardcode
        window geometry information, yuck!).

        Reviewed by Hyatt.

        * Carbon.subproj/CarbonWindowFrame.m:

2004-04-14  John Sullivan  <sullivan@apple.com>

        - changed stealth mode preference name from "historyIsFrozen"
        to "privateBrowsingEnabled"

        Reviewed by Darin.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):
        updated for method name change
        
        * WebView.subproj/WebPreferences.m:
        changed preference key name
        (+[WebPreferences initialize]):
        updated for preference key name change
        (-[WebPreferences setPrivateBrowsingEnabled:]):
        changed name from setHistoryIsFrozen:
        (-[WebPreferences privateBrowsingEnabled]):
        changed name from historyIsFrozen:
        
        * WebView.subproj/WebPreferencesPrivate.h:
        changed declared method names

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for this and other recent changes

2004-04-13  Chris Blumenberg  <cblu@apple.com>

        - Added WebElementDOMNodeKey as a potential API so that clients can get the node from an element dictionary.
        - Removed WebElementIsEditableKey. This functionality is available via [DOMNode isContentEditable].

        Reviewed by rjw.

        * DOM.subproj/WebDOMOperations.h:
        * DOM.subproj/WebDOMOperations.m:
        (-[DOMDocument URLWithRelativeString:]): new potential API
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): indenting tweak
        (-[WebDefaultUIDelegate copyImageToClipboard:]): use WebElementDOMNodeKey
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): use WebElementDOMNodeKey
        (-[WebHTMLView _dragOperationForDraggingInfo:]): use isContentEditable
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

2004-04-13  Chris Blumenberg  <cblu@apple.com>

        Fixed deployment build failure.

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): removed use of fileWrapper variable

2004-04-12  Chris Blumenberg  <cblu@apple.com>

        Factored out WebArchive to DOM code so that it could be used by both [WebHTMLView _pasteFromPasteboard:] and [WebView insertWebArchive:replacingDOMRange:].

        Reviewed by kocienda.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _replaceSelectionWithMarkupString:baseURL:]): moved from WebHTMLView
        (-[WebDataSource _replaceSelectionWithImageResource:]): ditto
        (-[WebDataSource _replaceSelectionWithWebArchive:]): ditto
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _replaceSelectionWithMarkupString:]): renamed
        (-[WebHTMLView _pasteFromPasteboard:]): call renamed methods
        * WebView.subproj/WebView.m:
        (-[WebView insertMarkupString:replacingDOMRange:]): call renamed methods
        (-[WebView insertWebArchive:replacingDOMRange:]): have data source handle the archive instead of the bridge

2004-04-12  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Dave
        
        Added execCommand support for cut/copy/paste.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge issueCutCommand]): Glue for calling from WebCore to do a cut in Cocoa.
        (-[WebBridge issueCopyCommand]): Same as above, but for copy.
        (-[WebBridge issuePasteCommand]): Same as above, but for paste.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView copy:]): Move this to private implementation category so the bridge can see it.
        (-[WebHTMLView cut:]): Ditto.
        (-[WebHTMLView paste:]): Ditto.
        * WebView.subproj/WebHTMLViewPrivate.h: Move copy;, cut:, and paste: to private implementation 
        category so the bridge can see it.
        * WebView.subproj/WebView.m:
        (-[WebView copy:]): Implemented by calling WebHTMLView to do the work.
        (-[WebView cut:]): Ditto.
        (-[WebView paste:]): Ditto.
        * WebView.subproj/WebViewPrivate.h: Added all the NSReponder methods we plan to implement as
        part of the WebKit editing API.

2004-04-09  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Stubbed in the entire WebKit editing API, improving some
        methods already present in minor ways, and adding those 
        methods not yet present.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge editingKeyDown:]):
        * WebView.subproj/WebDefaultEditingDelegate.m:
        (-[WebDefaultEditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:stillSelecting:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pasteMarkupString:]):
        * WebView.subproj/WebView.m:
        (-[WebView _alterCurrentSelection:direction:granularity:]):
        (-[WebView _currentSelectionIsEditable]):
        (-[WebView computedStyleForElement:pseudoElement:]):
        (-[WebView _editingKeyDown:]):
        (-[WebView setEditable:]):
        (-[WebView isEditable]):
        (-[WebView setTypingStyle:]):
        (-[WebView typingStyle]):
        (-[WebView setSmartInsertDeleteEnabled:]):
        (-[WebView smartInsertDeleteEnabled]):
        (-[WebView setContinuousSpellCheckingEnabled:]):
        (-[WebView isContinuousSpellCheckingEnabled]):
        (-[WebView spellCheckerDocumentTag]):
        (-[WebView undoManager]):
        (-[WebView insertNode:replacingDOMRange:]):
        (-[WebView insertText:replacingDOMRange:]):
        (-[WebView insertMarkupString:replacingDOMRange:]):
        (-[WebView insertWebArchive:replacingDOMRange:]):
        (-[WebView deleteDOMRange:]):
        (-[WebView applyStyle:toElementsInDOMRange:]):
        (-[WebView centerSelectionInVisibleArea:]):
        (-[WebView moveBackward:]):
        (-[WebView moveBackwardAndModifySelection:]):
        (-[WebView moveDown:]):
        (-[WebView moveDownAndModifySelection:]):
        (-[WebView moveForward:]):
        (-[WebView moveForwardAndModifySelection:]):
        (-[WebView moveLeft:]):
        (-[WebView moveLeftAndModifySelection:]):
        (-[WebView moveRight:]):
        (-[WebView moveRightAndModifySelection:]):
        (-[WebView moveToBeginningOfDocument:]):
        (-[WebView moveToBeginningOfLine:]):
        (-[WebView moveToBeginningOfParagraph:]):
        (-[WebView moveToEndOfDocument:]):
        (-[WebView moveToEndOfLine:]):
        (-[WebView moveToEndOfParagraph:]):
        (-[WebView moveUp:]):
        (-[WebView moveUpAndModifySelection:]):
        (-[WebView moveWordBackward:]):
        (-[WebView moveWordBackwardAndModifySelection:]):
        (-[WebView moveWordForward:]):
        (-[WebView moveWordForwardAndModifySelection:]):
        (-[WebView moveWordLeft:]):
        (-[WebView moveWordLeftAndModifySelection:]):
        (-[WebView moveWordRight:]):
        (-[WebView moveWordRightAndModifySelection:]):
        (-[WebView pageDown:]):
        (-[WebView pageUp:]):
        (-[WebView scrollLineDown:]):
        (-[WebView scrollLineUp:]):
        (-[WebView scrollPageDown:]):
        (-[WebView scrollPageUp:]):
        (-[WebView selectAll:]):
        (-[WebView selectParagraph:]):
        (-[WebView selectLine:]):
        (-[WebView selectWord:]):
        (-[WebView copy:]):
        (-[WebView cut:]):
        (-[WebView paste:]):
        (-[WebView copyFont:]):
        (-[WebView pasteFont:]):
        (-[WebView delete:]):
        (-[WebView pasteAsPlainText:]):
        (-[WebView pasteAsRichText:]):
        (-[WebView changeFont:]):
        (-[WebView changeAttributes:]):
        (-[WebView changeDocumentBackgroundColor:]):
        (-[WebView changeColor:]):
        (-[WebView alignCenter:]):
        (-[WebView alignJustified:]):
        (-[WebView alignLeft:]):
        (-[WebView alignRight:]):
        (-[WebView indent:]):
        (-[WebView insertTab:]):
        (-[WebView insertBacktab:]):
        (-[WebView insertNewline:]):
        (-[WebView insertParagraphSeparator:]):
        (-[WebView changeCaseOfLetter:]):
        (-[WebView uppercaseWord:]):
        (-[WebView lowercaseWord:]):
        (-[WebView capitalizeWord:]):
        (-[WebView deleteForward:]):
        (-[WebView deleteBackward:]):
        (-[WebView deleteBackwardByDecomposingPreviousCharacter:]):
        (-[WebView deleteWordForward:]):
        (-[WebView deleteWordBackward:]):
        (-[WebView deleteToBeginningOfLine:]):
        (-[WebView deleteToEndOfLine:]):
        (-[WebView deleteToBeginningOfParagraph:]):
        (-[WebView deleteToEndOfParagraph:]):
        (-[WebView complete:]):
        (-[WebView checkSpelling:]):
        (-[WebView showGuessPanel:]):
        (-[WebView performFindPanelAction:]):
        (-[WebView startSpeaking:]):
        (-[WebView stopSpeaking:]):
        (-[WebView insertText:]):
        * WebView.subproj/WebViewPrivate.h:

2004-04-09  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - added "transparent mode"

        * WebView.subproj/WebFrameInternal.h: Added. Contains _updateDrawsBackground.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _makeDocumentView]): Call _updateDrawsBackground to tell the newly created
        KHTMLView whether to draw a background or not.
        (-[WebFrame _setState:]): Don't tell the scroll view to start drawing background if the
        WebView is not supposed to draw a background.
        (-[WebFrame _updateDrawsBackground]): Call setDrawsBackground: on the bridge, and do the
        same for all subframes.

        * WebView.subproj/WebFrameView.m: (-[WebFrameView setFrameSize:]): Only call setDrawsBackground:YES
        on the scroll view if the WebView has drawsBackground set to YES.

        * WebView.subproj/WebViewPrivate.h: Added new proposed API, setDrawsBackground and drawsBackground.
        Also added drawsBackground boolean to private structure.
        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Set drawsBackground to YES by default.
        (-[WebView setDrawsBackground:]): Added. Sets boolean and calls _updateDrawsBackground to update
        the flag for each frame.
        (-[WebView drawsBackground]): Added. Returns value of boolean.
        (-[WebView _bridgeForCurrentSelection]): Tweaked comment for no good reason.

        * WebView.subproj/WebViewInternal.h: Added, but empty for the moment.
        * WebView.subproj/WebFramePrivate.h: Tweaked a bit.

2004-04-08  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3616873>: support for pasting and drag and dropping of URLS to editable WebViews
        <rdar://problem/3546417>: support for pasting and drag and dropping of images to editable WebViews

        Reviewed by rjw.

        * DOM.subproj/WebDOMOperations.h:
        * DOM.subproj/WebDOMOperations.m:
        (-[DOMNode webArchive]): renamed from "archive" because "archive" collides with DOMHTMLObjectElement's method
        (-[DOMRange webArchive]): ditto
        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:URL:title:archive:]): take just an archive instead of an HTML string and file wrapper
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:archive:rect:URL:title:event:]): take just an archive instead of an HTML string and file wrapper
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (+[NSURL _web_uniqueWebDataURL]): new
        (+[NSURL _web_uniqueWebDataURLWithRelativeString:]): new
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call renamed _web_writeImage
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _webDataRequestForData:MIMEType:textEncodingName:baseURL:unreachableURL:]): use _web_uniqueWebDataURL for creating a URL
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _pasteImageResource:]): new
        (-[WebHTMLView _pasteFromPasteboard:]): renamed, now handles images and URLs
        (-[WebHTMLView _handleMouseDragged:]): call renamed _web_dragImage
        (-[WebHTMLView paste:]): call renamed _pasteFromPasteboard
        (-[WebHTMLView concludeDragOperation:]): call renamed _pasteFromPasteboard
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation archive]): new
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:]): call renamed _web_writeImage
        (-[WebImageView mouseDragged:]): call renamed _web_dragImage

=== Safari-136 ===

2004-04-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3548274>: API: DOM API for WebKit clients

        Reviewed by kocienda.

        * DOM.subproj/DOM.h: copied from WebCore
        * WebKit.pbproj/project.pbxproj: made our DOM headers public!

2004-04-08  Chris Blumenberg  <cblu@apple.com>

        Moved WebArchive to its own file.

        Reviewed by kocienda.

        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebArchive.h: Added.
        * WebView.subproj/WebArchive.m: Added.
        (-[WebArchive data]): renamed from dataRepresentation
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebHTMLRepresentation.m:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _writeSelectionToPasteboard:]): call renamed [WebArchive data]
        * WebView.subproj/WebResource.h:
        * WebView.subproj/WebResource.m:

2004-04-07  Chris Blumenberg  <cblu@apple.com>

        Created WebDOMOperations which are WebKit-specific categories on DOM objects.

        Reviewed by rjw.

        * DOM.subproj/DOMExtensions.h:
        * DOM.subproj/WebDOMOperations.h: Added.
        * DOM.subproj/WebDOMOperations.m: Added.
        (-[DOMNode _bridge]): new
        (-[DOMNode archive]): new
        (-[DOMNode markupString]): new
        (-[DOMRange _bridge]): new
        (-[DOMRange archive]): new
        (-[DOMRange markupString]): new
        (-[DOMHTMLImageElement image]):
        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge webFrame]): new
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _archiveWithMarkupString:subresourceURLStrings:]): moved from WebHTMLRepresentation
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call markupString on the node
        * WebView.subproj/WebDocumentPrivate.h:
        * WebView.subproj/WebFrame.m:
        (+[WebFrame frameForDOMDocument:]): new
        (-[WebFrame loadArchive:]): renamed
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        * WebView.subproj/WebHTMLRepresentationPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedArchive:]): renamed
        (-[WebHTMLView _handleMouseDragged:]): called renamed methods

2004-04-07  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        * DOM.subproj/DOMCSS.h: Updated from WebCore.

2004-04-07  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin and Dave (many weeks ago....I am so ashamed for not landing)

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge expiresTimeForResponse:]): Now adds in the difference between
        the Mac OS X epoch and the "standard" unix epoch when passing back a time
        that WebCore will use for its cache expiration determinations. 

2004-04-07  Richard Williamson   <rjw@apple.com>

        Fix for 3604388.  The runtime version check (_CFExecutableLinkedOnOrAfter) used by many of
        our frameworks doesn't work for CFM apps.  So, conditional panther bugs fixes aren't
        being pickup by CFM apps that use WebKit, specifically Contribute.  This particular radar
        describes a problem that was conditionally fixed in the AppKit for panther.  The work-around
        is to force NSBitmapImageRep to execute to conditional code.

        Reviewed by Maciej.

        * Carbon.subproj/CarbonUtils.m:
        (WebInitForCarbon):

2004-04-06  Richard Williamson   <rjw@apple.com>

        Fixed 3510805.  Only release pool in timer if the current nesting level of the
        pool matches the nesting level when the pool was created.

        Reviewed by Chris.

        * Carbon.subproj/CarbonUtils.m:
        (getNumPools):
        (WebInitForCarbon):
        (PoolCleaner):

2004-04-06  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3613974>: remove "to Clipboard" from context menus because it is redundant

        Reviewed by john.

        * English.lproj/Localizable.strings:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]):

2004-04-06  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Dave

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge issueUndoCommand]): New method. Forwards call to the undo manager. Added
        to support undo called via Javascript execCommand.
        (-[WebBridge issueRedoCommand]): Ditto.

2004-04-05  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3612580>: SPI: WebPlugin selection

        Reviewed by kocienda.

        * Plugins.subproj/WebPlugin.h: extended SPI for selection
        * Plugins.subproj/WebPluginContainer.h: ditto
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController selectionColor]): new, calls [WebCoreBridge selectionColor]
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setIsSelected:forView:]): new, calls [WebPlugin setIsSelected:]
        (-[WebBridge isViewSelected:]): new, calls [WebPlugin isSelected]

2004-04-02  Chris Blumenberg  <cblu@apple.com>

        Forgot to add the WebKit copy of DOMExtensions.h.

        * DOM.subproj/DOMExtensions.h: Added.

2004-04-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Dave.
        
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences historyIsFrozen]):
        take out OMIT_TIGER_FEATURES ifdeffing, since if we turn this into API
        then we'll probably want it to work in Panther also. To protect Safari users,
        Safari now explicitly sets historyIsFrozen to NO when starting up in Panther.

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for recent changes

2004-04-02  Chris Blumenberg  <cblu@apple.com>

        Moved the DOM extensions to their own headers

        Reviewed by kocienda.

        * DOM.subproj/DOM.h: changed from WebCore
        * DOM.subproj/DOMHTML.h: ditto
        * WebKit.pbproj/project.pbxproj: added DOMExtensions.h
        * copy-webcore-files-to-webkit: copy DOMExtensions.h

=== Safari-135 ===

2004-04-01  Richard Williamson   <rjw@apple.com>

        Fixed 3609493.  Don't remove the plugin's view until after
        sending pluginDestroy.  This change was requested by Greg
        and is needed in the Lavender update.

        Reviewed by Greg Bolsinga.

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController destroyAllPlugins]):
        * Plugins.subproj/npruntime.h:

2004-03-31  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3577917>: API: mechanism for displaying error 
        page for failed page load
        
        This was not commented on for a week in macosx-api-reviewers, so it
        has the silent rubber stamp of approval.
        
        Note that it isn't guarded by "Tiger only" availability macros because
        we (probably) want to use it in Panther for Safari. Maybe what we should
        do is guard the API with "Tiger only" macros but add an SPI version
        that Safari uses?

        Reviewed by Dave.

        * WebView.subproj/WebDataSource.h:
        moved unreachableURL to here
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource unreachableURL]):
        moved this from private category to main section
        
        * WebView.subproj/WebDataSourcePrivate.h:
        removed unreachableURL from here
        
        * WebView.subproj/WebFrame.h:
        moved loadAlternateHTMLString... to here
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        moved this from private category to main section
        
        * WebView.subproj/WebFramePrivate.h:
        removed unreachableURL from here

2004-03-31  Richard Williamson   <rjw@apple.com>

        Changed to reflect NP_runtime.h to npruntime.h.

        * copy-webcore-files-to-webkit:

2004-03-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences historyIsFrozen]):
        always return NO on Panther and older, so you can't get into a state
        where the WebKit pref is invisibly set and affecting Safari.

2004-03-31  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebHTMLView.m: Whitespace tweaks.

2004-03-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3604391>: Plug-in context menus (Flash) don't work in Carbon WebKit applications (e.g., CarbonWeb)

        Reviewed by rjw.

        * Carbon.subproj/HIWebView.m:
        (ContextMenuClick): instead of calling menuForEvent (which is not implemented on our plug-in view) call rightMouseDown and let AppKit handle the rest

2004-03-29  John Sullivan  <sullivan@apple.com>

        - some support for "Stealth Browsing"; add a preference that
        controls whether a history item is added when a page is visited.
        This is called "historyIsFrozen" for now, but I wouldn't be
        surprised to see this name change.

        Reviewed by Dave.

        * WebView.subproj/WebPreferencesPrivate.h:
        new historyIsFrozen, setHistoryIsFrozen: methods
        
        * WebView.subproj/WebPreferences.m:
        new WebKitHistoryIsFrozenPreferenceKey
        (+[WebPreferences initialize]):
        set initial value of WebKitHistoryIsFrozenPreferenceKey
        (-[WebPreferences setHistoryIsFrozen:]):
        set value of WebKitHistoryIsFrozenPreferenceKey
        (-[WebPreferences historyIsFrozen]):
        read value of WebKitHistoryIsFrozenPreferenceKey

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _transitionToCommitted:]):
        don't add item to history if history is frozen

2004-03-29  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3559178>: navigator.language always returns "en"

        * WebCoreSupport.subproj/WebViewFactory.m: (-[WebViewFactory defaultLanguageCode]):
        Call +[NSUserDefaults _web_preferredLanguageCode] rather than returning "en".

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2004-03-26  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3576334>: Printing "empty" page gives print error, 
        leaves browser window UI broken

        Reviewed by Dave.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView knowsPageRange:]):
        AppKit printing mechanism can't handle the case where you tell it there is
        nothing at all to print, so when we hit that case we give it a degenerate
        1-pixel rect to print. This prints a blank page (with correctly-placed
        header & footer if so configured), which matches other browsers' behavior for
        this page.

        * Plugins.subproj/npruntime.h:
        cvs keeps thinking I've removed a blank line from this auto-copied file.
        Richard said to just check it in to see if it stops doing this.
        
=== Safari-134 ===

2004-03-26  John Sullivan  <sullivan@apple.com>

        - fixed the following bugs:
        
        <rdar://problem/3601630>: command-modified keypresses that would activate links are ignored by WebKit
        <rdar://problem/3601604>: WebActionModifierFlagsKey not set correctly for modified keypresses that activate links
        <rdar://problem/3544946>: cmd-return should open a link in a new tab

        Reviewed by Darin.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _actionInformationForNavigationType:event:originalURL:]):
        Pass modifier flags always, not just for mouse events. This fixes 3601604.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView performKeyEquivalent:]):
        Give the bridge a chance to intercept command-modified keypresses. This fixes 3601630.
        
        Together these two changes fix 3544946.

2004-03-25  David Hyatt  <hyatt@apple.com>

        Implement the rest of the search field.

        Implement onscroll at the document level.
        Reviewed by darin

        * English.lproj/Localizable.strings:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[NSMenu addItemWithTitle:action:tag:]):
        (-[WebViewFactory submitButtonDefaultLabel]):
        (-[WebViewFactory cellMenuForSearchField]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _frameOrBoundsChanged]):
        (-[WebHTMLView viewDidMoveToWindow]):
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-03-25  Richard Williamson   <rjw@apple.com>

        Netscape plugin API header cleanup.

        Replaced our hacked up version of npapi.h with the
        "official SDK"  npapi.h.  Moved our changes to the new
        npfunctions.h.  npfunctions.h really replaces what was defined in
        the Netscape npupp.h header.  However, rather than use the "official SDK"
        npupp.h I think the cleaner npfunctions.h is better. npupp.h actually
        has a bunch of Mac classic specific stuff that is no longer needed.

        Copied npruntime.h to WebKit using Ken's copy-o-matic mechanism.

        Made npapi.h, npruntime.h, and npfunctions.h SPI.  With a bit
        more consideration they will become API.  They will also eventually be made
        available for other platforms/vendors are mozilla.org.

        Reviewed by Ken.

        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]):
        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebNetscapePluginPackage.h:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins.subproj/npapi.h:
        * Plugins.subproj/npruntime.h: Added.
        * WebKit.pbproj/project.pbxproj:
        * copy-webcore-files-to-webkit:

2004-03-24  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3566805>: REGRESSION: When the subject of mailto is 2 byte Safari failed to send mail address and subject to Mail.app

        * Misc.subproj/WebNSURLExtras.m: (applyHostNameFunctionToMailToURLString): Update to handle hostnames
        that end just before a '?' since a '?' ends the entire part of the URL that can contain hostnames.
        Also change the logic so that the '?' will successfully end the search.

2004-03-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * DOM.subproj/DOMHTML.h: Checking in copied over version of
        modified file.

2004-03-23  David Hyatt  <hyatt@apple.com>

        Fix for 3513627, HTML mail prints upside down occasionally.  Change printing so that it never resizes the
        WebHTMLView when formatting for printing.  When computing page rects, instead of using the view's bounds,
        use the root layer's width instead.
        Reviewed by darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView knowsPageRange:]):

=== Safari-133 ===

2004-03-17  David Hyatt  <hyatt@apple.com>

        Expose ageLimitDate so that the autocomplete code can access it.
        Reviewed by john

        * History.subproj/WebHistory.m:
        (-[WebHistory ageLimitDate]):
        * History.subproj/WebHistoryPrivate.h:

2004-03-17  Richard Williamson   <rjw@apple.com>

        Fixed 3591667.  Plugin view is added to view hierarchy before calling init.

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addSubview:]):

2004-03-16  Darin Adler  <darin@apple.com>

        * DOM.subproj/DOMHTML.h: Updated from WebCore.
        * DOM.subproj/DOMRange.h: Ditto.

2004-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - update for new DOM namespacing and header organization

        * DOM.subproj/DOM.h: Changed to include the other DOM headers.
        * DOM.subproj/DOMCSS.h: Added.
        * DOM.subproj/DOMCore.h: Added.
        * DOM.subproj/DOMEvents.h: Added.
        * DOM.subproj/DOMHTML.h: Added.
        * DOM.subproj/DOMRange.h: Added.
        * DOM.subproj/DOMStylesheets.h: Added.
        * DOM.subproj/DOMTraversal.h: Added.
        * DOM.subproj/DOMViews.h: Added.        
        * WebKit.pbproj/project.pbxproj: Added new files.

        * WebView.subproj/WebDefaultEditingDelegate.m:
        (-[WebDefaultEditingDelegate webView:shouldApplyStyle:toElementsInDOMRange:]):
        (-[WebDefaultEditingDelegate webView:shouldChangeTypingStyle:toStyle:]):
        Change class names from CSS to DOMCSS.
        * WebView.subproj/WebViewPrivate.h: Ditto.

        * copy-webcore-files-to-webkit: Add new files.

2004-03-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:
        
        <rdar://problem/3588717>: REGRESSION (125-131u): Tabbing to links and tabbing in bookmarks view no longer works

        WebView can't lay claim to -keyDown: just for editing events, as
        this gets in the way of tab processing. The solution is to give
        WebView a private method for processing editing key events fed to
        it from over the bridge, and leave -keyDown: unimplemented. 

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge editingKeyDown:]): Changed from -keyDown: to keep 
        terminology consistent with renamed WebView -editingKeyDown: method.
        * WebView.subproj/WebView.m:
        (-[WebView editingKeyDown:]): Give WebView a method to handle
        editing key events in a way that does not interfere with other key down
        events it processes.
        * WebView.subproj/WebViewPrivate.h: Declare -editingKeyDown: method.

=== Safari-132 ===

2004-03-15  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2004-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3433887>: copied &nbsp; characters remain non-breaking spaces; other browsers give normal spaces

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _writeSelectionToPasteboard:]):
        Convert non-breaking spaces to the normal kind in the plain text part of the pasteboard.

2004-03-12  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        * WebView.subproj/WebView.m:
        (-[WebView _alterCurrentSelection:direction:granularity:]): Changed name from
        _alterSelection:direction:granularity: to give a little extra clarity. Also, the
        body calls through to renamed rangeByAlteringCurrentSelection:direction:granularity:
        in WebCore.
        (-[WebView moveRight:]): Now calls renamed _alterCurrentSelection:direction:granularity:.
        (-[WebView moveRightAndModifySelection:]): Ditto.
        (-[WebView moveLeft:]): Ditto.
        (-[WebView moveLeftAndModifySelection:]): Ditto.

2004-03-11  Richard Williamson   <rjw@apple.com>

        Workaround for 3585644.  Force the window number of the
        mouse moved event to be correct.

        Reviewed by Chris.

        * Carbon.subproj/CarbonWindowFrame.m:
        * Carbon.subproj/HIWebView.m:
        (MouseMoved):
        (MouseDragged):

2004-03-11  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Dave

        Various changes to begin implementing the draft API proposal. 

        * DOM.subproj/DOM.h: Checking in generated file.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge registerCommandForUndo:]): Now takes an id, a wrapped
        WebCore EditCommand implementation object.
        (-[WebBridge registerCommandForRedo:]): Ditto.
        (-[WebBridge clearUndoRedoOperations]): Use the web view's undo manager.
        (-[WebBridge keyDown:]): Pass keyDown events through to the web view.
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDefaultEditingDelegate.h: Added.
        * WebView.subproj/WebDefaultEditingDelegate.m: Added. Stubbed in default
        implementations declared in the draft editing API.
        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]): WebFrame no longer has an undo manager.
        * WebView.subproj/WebFramePrivate.h: Ditto.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedWebArchive:]): selectedRange method 
        is now selectedDOMRange.
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): Dealloc new editingDelegateForwarder.
        (-[WebView _editingDelegateForwarder]): Added. 
        (-[WebView keyDown:]): Added. 
        (-[WebView _bridgeForCurrentSelection]): Added. 
        (-[WebView setSelectedDOMRange:]): Added. 
        (-[WebView selectedDOMRange]): Added. 
        (-[WebView insertText:]): Added. 
        (-[WebView _alterSelection:direction:granularity:]): Added. 
        (-[WebView selectWord:]): Added. 
        (-[WebView moveRight:]): Added. 
        (-[WebView moveRightAndModifySelection:]): Added. 
        (-[WebView moveLeft:]): Added. 
        (-[WebView moveLeftAndModifySelection:]): Added. 
        (-[WebView deleteBackward:]): Added. 
        (-[WebView insertNewline:]): Added. 
        (-[WebView insertParagraphSeparator:]): Added. 
        (-[WebView setEditingDelegate:]): Added. 
        (-[WebView editingDelegate]): Added. 
        (-[WebView undoManager]): Added. 
        (-[WebView insertText:replacingDOMRange:]): Added. 
        * WebView.subproj/WebViewPrivate.h: Added a collection of editing API 
        declarations that will be public some day, but are still under review.

2004-03-11  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3585056>: Assertion failure if error page is loaded from 
        webView:unableToImplementPolicyWithError:
        - also added HeaderDoc comments to could-be-API-soon methods and fixed a
        conceptual problem with said methods

        Reviewed by Darin.

        * WebView.subproj/WebDataSourcePrivate.h:
        added HeaderDoc comment for -unreachableURL
        
        * WebView.subproj/WebFramePrivate.h:
        added HeaderDoc comment for -loadAlternateHTMLString:baseURL:forUnreachableURL:;
        also added boolean delegateIsHandlingUnimplementablePolicy ivar to WebFramePrivate
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _shouldReloadToHandleUnreachableURLFromRequest:]):
        treat delegateIsHandlingUnimplementablePolicy like delegateIsDecidingNavigationPolicy.
        Safari serves up error pages during the latter but clients are equally or more likely
        to do so during the former.
        (-[WebFrame _handleUnimplementablePolicyWithErrorCode:forURL:]):
        set delegateIsHandlingUnimplementablePolicy during delegate callback
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        tweaked assertion so it doesn't erroneously fire for clients that call
        loadAlternateHTML:baseURL:forUnreachableURL: while processing
        webView:unableToImplementPolicyWithError:

2004-03-11  Chris Blumenberg  <cblu@apple.com>

        Made WebArchive a class instead of a data object. This allows clients to easily get the main resource and subresources from a WebArchive.

        Reviewed by kocienda.

        * WebKit.exp:
        * WebView.subproj/WebDocumentPrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadWebArchive:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation loadWebArchive]):
        (-[WebHTMLRepresentation _webArchiveWithMarkupString:subresourceURLStrings:]):
        (-[WebHTMLRepresentation webArchiveFromNode:]):
        (-[WebHTMLRepresentation webArchiveFromRange:]):
        * WebView.subproj/WebHTMLRepresentationPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedWebArchive:]):
        (-[WebHTMLView _writeSelectionToPasteboard:]):
        (-[WebHTMLView _pasteMarkupFromPasteboard:]):
        * WebView.subproj/WebResource.h:
        * WebView.subproj/WebResource.m:
        (-[WebArchivePrivate dealloc]):
        (-[WebResource _response]):
        (-[WebArchive init]):
        (-[WebArchive initWithMainResource:subresources:]):
        (-[WebArchive initWithData:]):
        (-[WebArchive dealloc]):
        (-[WebArchive mainResource]):
        (-[WebArchive subresources]):
        (-[WebArchive dataRepresentation]):
        * WebView.subproj/WebResourcePrivate.h:

2004-03-10  Chris Blumenberg  <cblu@apple.com>

        Made dragging of web archives work.

        Reviewed by rjw.

        * English.lproj/StringsNotToBeLocalized.txt: updated
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:didReceiveResponse:]): added a FIXME about working around old Foundations that don't know about web archive files
        * WebView.subproj/WebView.m:
        (+[WebView canShowFile:]): tweak
        (+[WebView suggestedFileExtensionForMIMEType:]): tweak
        (+[WebView _MIMETypeForFile:]): handle web archive files since Foundation may be too old to know about them

2004-03-09  Chris Blumenberg  <cblu@apple.com>

        Made web archives use NSPropertyListBinaryFormat_v1_0 instead of NSPropertyListXMLFormat_v1_0 because NSPropertyListBinaryFormat_v1_0 is 3-5 times faster to serialize and parse.

        Reviewed by rjw.

        * WebView.subproj/WebResource.m:
        (+[WebResource _parseWebArchive:mainResource:subresources:]): add timing code
        (+[WebResource _webArchiveWithMainResource:subresources:]): add timing code, use NSPropertyListBinaryFormat_v1_0

2004-03-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3577508>: API: web archive related API's
        Implemented WebKit side of: <rdar://problem/3144033>: ability to save web sites (images and all)

        Reviewed by rjw.

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge receivedData:textEncodingName:]): renamed to take a textEncodingName instead of data source. The data source argument is only needed for the textEncodingName.
        * WebKit.exp:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _subresourcesDictionary]): new
        (+[WebDataSource _repTypesAllowImageTypeOmission:]): include "application/x-webarchive"
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDocumentInternal.h:
        * WebView.subproj/WebDocumentPrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadWebArchive:]): renamed, code factored out to [WebResource _parseWebArchive:mainResource:subresources:]
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]): include "application/x-webarchive"
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentationPrivate dealloc]):
        (-[WebHTMLRepresentation _isDisplayingWebArchive]): new
        (-[WebHTMLRepresentation receivedData:withDataSource:]): don't feed data to WebCore if we're displaying a web archive since web archive can't be progressively loaded
        (-[WebHTMLRepresentation loadWebArchive]): new, feeds web archive data to WebCore
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]): call loadWebArchive if necessary
        (-[WebHTMLRepresentation documentSource]): if displaying a web archive, return the HTML source from within the archive
        (-[WebHTMLRepresentation _webArchiveWithMarkupString:subresourceURLStrings:]): new
        (-[WebHTMLRepresentation markupStringFromNode:]): implementation of new API
        (-[WebHTMLRepresentation markupStringFromRange:]): ditto
        (-[WebHTMLRepresentation webArchiveFromNode:]): ditto
        (-[WebHTMLRepresentation webArchiveFromRange:]): ditto
        * WebView.subproj/WebHTMLRepresentationPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _selectionPasteboardTypes]): use renamed WebArchivePboardType
        (-[WebHTMLView _selectedWebArchive:]): renamed, call renamed methods
        (-[WebHTMLView _writeSelectionToPasteboard:]): call renamed methods
        (-[WebHTMLView _haveSelection]): indentation tweak
        (-[WebHTMLView _canDelete]): ditto
        (-[WebHTMLView _canPaste]): ditto
        (-[WebHTMLView _pasteMarkupFromPasteboard:]): renamed, call [WebResource _webArchiveWithMainResource:subresources:]
        (-[WebHTMLView initWithFrame:]): use renamed WebArchivePboardType
        (-[WebHTMLView paste:]): call renamed _pasteMarkupFromPasteboard
        (-[WebHTMLView concludeDragOperation:]): call renamed _pasteMarkupFromPasteboard
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:didReceiveResponse:]): modify the MIME type for web archives since Foundation is not yet web archive aware. This is ifdef'd pre-Tiger code.
        * WebView.subproj/WebResource.h:
        * WebView.subproj/WebResource.m:
        (+[WebResource _parseWebArchive:mainResource:subresources:]): new
        (+[WebResource _webArchiveWithMainResource:subresources:]): new
        * WebView.subproj/WebResourcePrivate.h:

2004-03-09  John Sullivan  <sullivan@apple.com>

        - fixed the following bugs:
        <rdar://problem/3579715>: Going to an error page in back/forward list doesn't work 
        correctly in some cases
        <rdar://problem/3581031>: REGRESSION (130+): World Leak of WebFrame after trying 
        to load page with unknown scheme

        Reviewed by Darin.

        * WebView.subproj/WebDataSourcePrivate.h:
        renamed __setRequest -> __adoptRequest
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _URLForHistory]): 
        updated comment
        (-[WebDataSource __adoptRequest:]):
        Renamed from __setRequest; now takes an NSMutableURLRequest and uses it as-is.
        (-[WebDataSource _setRequest:]):
        now saves a mutable copy, instead of relying on the caller to do so. The
        (only) caller wasn't doing so in all cases, leading to trouble in River City.
        Also, special-case unreachable URL handling to allow alternate content to 
        replace a URL in a redirect-like way without sending a redirect callback.
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]):
        renamed after discussion with Richard (was loadPlaceholderHTMLString:baseURL:unreachableURL:)
        (-[WebFrame _shouldReloadToHandleUnreachableURLFromRequest:]):
        new helper method, returns YES only if we receive a load request for alternate
        content from a delegate for an unreachable URL while we are going back or forward.
        That's a lot of prepositions!
        (-[WebFrame _loadRequest:subresources:]):
        if _shouldReloadToHandleUnreachableURLFromRequest: returns YES, change load type
        to WebFrameLoadTypeReload so b/f list is preserved appropriately.
        (-[WebFrame _transitionToCommitted:]):
        Update currentItem in the unreachableURL case.
        (-[WebFrame _isLoadComplete]):
        Don't reset b/f list before calling provisionalLoadDidFail delegate; instead, determine 
        where to reset b/f list beforehand, and then actually reset list afterwards only if we 
        didn't start an alternate content load in the delegate. Also, set new boolean ivar so we
        know when we're processing a provisionalLoadDidFail delegate callback.
        (-[WebFrame _loadItem:withLoadType:]):
        don't make extra copy before calling __adoptRequest; just pass it the one we made here.
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
        If we're loading alternate content for an unreachableURL, don't ask the decision listener,
        just do it. (This avoids problem with nested calls to checking the navigation policy that
        led to a WebFrame leak, and is conceptually the right thing to do also.) Also added some
        asserts that helped me track down the WebFrame leak. Set new boolean ivar so we know
        when we're processing a navigation policy delegate decision.
        (-[WebFrame _currentBackForwardListItemToResetTo]):
        new method, replaces _resetBackForwardListToCurrent. Does the same test as the
        latter but returns a boolean rather than actually resetting.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        save dataSource in a local var before calling stopLoading, and use it for
        _setProvisionalDataSource, because otherwise stopLoading was clobbering the dataSource
        for an unreachable URL handling case.
        
        * WebView.subproj/WebFramePrivate.h:
        two new boolean ivars
        
        * WebView.subproj/WebView.m:
        (+[WebView _canHandleRequest:]):
        return YES when we're loading alternate content for an unreachable URL

=== Safari-131 ===

2004-03-08  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebKit.pbproj/project.pbxproj: Added CFBundleName to Info.plist

2004-03-05  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3560132>: REGRESSION: Safari crashed in -[NSPasteboard setData:forType:] dragging a map out of Mapquest.com

        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:URL:title:fileWrapper:HTMLString:]): declare the pboard types by calling _web_writeURL:::: before calling setData::

2004-03-05  John Sullivan  <sullivan@apple.com>

        First cut at WebKit support for showing error pages for unreachable URLs.
        This doesn't work quite right with the back/forward list yet, but is
        good enough for demos.

        Reviewed by Darin.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate didReceiveResponse:]):
        use new _webDataRequextExternalURL to share code
        
        * WebView.subproj/WebDataProtocol.h:
        Three new methods (all internal to WebKit):
        -[NSURLRequest _webDataRequestUnreachableURL], -[NSURLRequest _webDataRequestExternalURL],
        -[NSURLRequest _webDataRequestSetUnreachableURL]
        * WebView.subproj/WebDataProtocol.m:
        new unreachableURL field of WebDataRequestParameters
        (-[WebDataRequestParameters copyWithZone:]):
        copy new field
        (-[WebDataRequestParameters dealloc]):
        release new field
        (-[NSURLRequest _webDataRequestUnreachableURL]):
        read new field
        (-[NSURLRequest _webDataRequestExternalURL]):
        new method, returns baseURL or "about:blank" for webdata protocol requests. This
        was done in multiple places previously.
        (-[NSURLRequest _webDataRequestExternalRequest]):
        now calls _webDataRequestExternalURL to share code
        (-[NSMutableURLRequest _webDataRequestSetUnreachableURL:]):
        write new field
        
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource unreachableURL]):
        new method, might become API; returns the unreachable URL, if any, for which this datasource
        holds placeholder content
        (-[WebDataSource _URLForHistory]):
        new method, returns the URL to be stored in History for this dataSource. This returns nil
        for run-of-the-mill WebDataProtocol URLs (replacing code elsewhere that checked for this
        case) but returns the unreachableURL for the case where this datasource holds placeholder
        content.
        (-[WebDataSource _setTitle:]):
        now calls _URLForHistory
        
        * WebView.subproj/WebDataSourcePrivate.h:
        added unreachableURL in the should-become-API section, and _URLForHistory elsewhere
        
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadPlaceholderHTMLString:baseURL:unreachableURL:]):
        new should-become-API method for displaying an error page for an unreachable URL
        (-[WebFrame loadPropertyList:]):
        updated to pass nil for unreachableURL
        (-[WebFrame _webDataRequestForData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        added unreachableURL parameter, which gets set on the data request
        (-[WebFrame _addBackForwardItemClippedAtTarget:]):
        use _URLForHistory instead of just checking for WebDataProtocol
        (-[WebFrame _createItem:]):
        use unreachableURL if there is one
        (-[WebFrame _transitionToCommitted:]):
        use _URLForHistory instead of just checking for WebDataProtocol
        (-[WebFrame _isLoadComplete]):
        check whether a new load has started in the delegate callback and if so, don't
        reset the loading state here
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        added unreachableURL parameter, which gets passed through
        (-[WebFrame loadData:MIMEType:textEncodingName:baseURL:]):
        send nil unreachableURL parameter
        (-[WebFrame _loadHTMLString:baseURL:unreachableURL:]):
        new bottleneck method for loadHTMLString:baseURL: and loadPlaceholderHTMLString:baseURL:unreachableURL:;
        this is the guts of loadHTMLString:baseURL: with the new unreachableURL parameter passed through
        (-[WebFrame loadHTMLString:baseURL:]):
        now calls new bottleneck method
        
        * WebView.subproj/WebFramePrivate.h:
        added loadPlaceholderString:baseURL:unreachableURL: to should-be-API section; added unreachableURL
        parameter to _webDataRequestForData:MIMEType:textEncodingName:baseURL:

2004-03-04  Chris Blumenberg  <cblu@apple.com>

        - Made image dragging and copying always work without needing to re-download by using the data source's WebResource of the image instead of relying on the Foundation cache.
        - Fixed a "drag to self" problem I introduced in my last check-in. You could drag a URL from a WebHTMLView and drop it on its own WebView which we shouldn't allow.

        Reviewed by rjw.

        * ChangeLog:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge fileWrapperForURL:]): call _fileWrapperForURL on WebDataSource
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _fileWrapperForURL:]): moved from WebView, creates a wrapper from a WebResource
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call [WebDataSource _fileWrapperForURL:]
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): call [WebDataSource _fileWrapperForURL:]
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): call [WebDataSource _fileWrapperForURL:]
        (-[WebHTMLView _dragOperationForDraggingInfo:]): new, factored out from draggingUpdated:
        (-[WebHTMLView draggingEntered:]): call _dragOperationForDraggingInfo:, if NSDragOperationNone, forward to WebView to it can handle the drag
        (-[WebHTMLView draggingUpdated:]): ditto
        (-[WebHTMLView concludeDragOperation:]): ditto
        * WebView.subproj/WebResource.m:
        (-[WebResource _fileWrapperRepresentation]): new
        * WebView.subproj/WebResourcePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): release draggedTypes, a new ivar that keeps track of drag types that we're currently registered for
        (-[WebView _setDraggedTypes:]): new
        (-[WebView unregisterDraggedTypes]): new, calls _setDraggedTypes then super
        (-[WebView registerForDraggedTypes:]): ditto 
        (-[WebView _dragOperationForDraggingInfo:]): new, compares the types on the pasteboard against the types we are currently registered for. Normally the AppKit handles this for us, but since these messages can be forwarded from WebHTMLView, we need to do this comparison ourselves. 
        (-[WebView draggingEntered:]): calls _dragOperationForDraggingInfo:
        (-[WebView draggingUpdated:]): ditto
        (-[WebView concludeDragOperation:]): ditto
        * WebView.subproj/WebViewPrivate.h: define new draggedTypes ivar

2004-03-03  Chris Blumenberg  <cblu@apple.com>

        Fixed a typo.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView concludeDragOperation:]):

2004-03-03  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3576070>: REGRESSION: web view won't accept drag of webloc file

        Reviewed by rjw.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggingUpdated:]): if we're not handling the drag, forward this message to the WebView since it may want to handle it
        (-[WebHTMLView concludeDragOperation:]): if we're not handling the drag, forward this message to the WebView since it may want to handle it

2004-03-03  Darin Adler  <darin@apple.com>

        Reviewed by Vicki.

        * English.lproj/InfoPlist.strings: Removed. No need to localize the version and
        copyright string, and that's all that was in here.
        * WebKit.pbproj/project.pbxproj: Removed InfoPlist.strings from build.

2004-03-03  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        * copy-webcore-files-to-webkit: Fixed up this script so that
        it does not fail if it is running "non-locally", like for
        B&I. The idiom is to check these files into WebKit after
        copying them from WebCore, hence this script is merely
        a convenience to keep the files in sync.

2004-03-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * DOM.subproj/DOM.h: Checked in header copied over
        from WebCore.

2004-03-02  Richard Williamson   <rjw@apple.com>

        Added WebJavaScriptObject API.  The location of this file may
        change.

        Reviewed by Chris.

        * Plugins.subproj/NP_objc.h: Added.
        * WebKit.pbproj/project.pbxproj:

2004-03-02  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3575598>: REGRESSION: Safari crashes at IS&T website

        Reviewed by darin.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]): don't stop the icon loader here because that can cause an infinite loop
        (-[WebDataSource _stopLoadingInternal]): always stop the icon loader here instead of just when the data source is loading as well.

=== Safari-130 ===

2004-03-02  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * DOM.subproj/DOM.h: Rollout last night's checkin.
        The tree was closed.

2004-03-01  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3574979>: REGRESSION (129-TOT): crash loading macromedia.com

        deliverResource was being called after it had already been called in setDefersCallbacks:.

        Reviewed by rjw.

        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate deliverResource]): set deliveredResource to YES
        (-[WebBaseResourceHandleDelegate deliverResourceAfterDelay]): new, calls deliverResource after a delay
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): call deliverResourceAfterDelay
        (-[WebBaseResourceHandleDelegate setDefersCallbacks:]): call deliverResourceAfterDelay

2004-03-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * DOM.subproj/DOM.h: Checked in header copied over
        from WebCore.

2004-03-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * DOM.subproj/DOM.h: Oh, it's like the Keystone Cops this afternoon...
        Backed out an unintended change to thsi file.

2004-03-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * copy-webcore-files-to-webkit: Dumb typing error on my part in making
        my previous quick fix. This quick fix works. 

2004-03-01  Chris Blumenberg  <cblu@apple.com>

        Updated the WebKit project file to 1.1 because a previous check-in reverted to 1.01.

        * WebKit.pbproj/project.pbxproj:

2004-03-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * copy-webcore-files-to-webkit: Made this file buildit-compliant

2004-03-01  Chris Blumenberg  <cblu@apple.com>

        Found a bug in my last check-in. If a load that originates from a WebResource is cancelled before the data from the WebResource is delivered, callbacks are sent anyway. 

        Reviewed by rjw.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate cancelWithError:]): cancel the perform request for deliverResource

2004-03-01  Chris Blumenberg  <cblu@apple.com>

        Reviewed by darin.

        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader didFinishLoading]): rejigger handle code to avoid Deployment failure
        * WebKit.pbproj/project.pbxproj:

2004-03-01  Chris Blumenberg  <cblu@apple.com>

        - Made WebResource loading not use Foundation at all. This allows "Mail Page" and paste to more directly load subresources without any indirection involving NSURLConnection and the Foundation cache.
        - Made WebIconLoader a subclass of WebBaseResourceHandleDelegate. This makes favicons appear in the activity window among other things.

        Reviewed by kocienda.

        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebIconLoader.m: removed connection and data ivars since WebBaseResourceHandleDelegate holds these 
        (-[WebIconLoaderPrivate dealloc]): removed calls to deleted ivars
        (-[WebIconLoader URL]): call renamed request ivar
        (-[WebIconLoader startLoading]): call loadWithRequest
        (-[WebIconLoader stopLoading]): call cancel
        (-[WebIconLoader didFinishLoading]):
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate didReceiveResponse:]): renamed to be connection-less since callbacks may came from a WebResource and not an NSURLConnection
        (-[WebNetscapePluginConnectionDelegate didReceiveData:lengthReceived:]): ditto
        (-[WebNetscapePluginConnectionDelegate didFinishLoading]): ditto
        (-[WebNetscapePluginConnectionDelegate didFailWithError:]): ditto
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient didReceiveResponse:]): ditto
        (-[WebSubresourceClient didReceiveData:lengthReceived:]): ditto
        (-[WebSubresourceClient didFinishLoading]): ditto
        (-[WebSubresourceClient didFailWithError:]): ditto
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): instead of storing the resource in the Foundation cache in order to later load it from the cache, deliver the callbacks ourselves after a delay
        (-[WebBaseResourceHandleDelegate setDefersCallbacks:]): call deliverResource if callbacks are turned back on
        (-[WebBaseResourceHandleDelegate deliverResource]): new, calls didReceiveResponse:, didReceiveData:lengthReceived:, and didFinishLoading
        (-[WebBaseResourceHandleDelegate willSendRequest:redirectResponse:]): renamed to be connection-less since callbacks may came from a WebResource and not an NSURLConnection
        (-[WebBaseResourceHandleDelegate didReceiveAuthenticationChallenge:]): ditto
        (-[WebBaseResourceHandleDelegate didCancelAuthenticationChallenge:]): ditto
        (-[WebBaseResourceHandleDelegate didReceiveResponse:]): ditto
        (-[WebBaseResourceHandleDelegate didReceiveData:lengthReceived:]): ditto
        (-[WebBaseResourceHandleDelegate didFinishLoading]): ditto
        (-[WebBaseResourceHandleDelegate didFailWithError:]): ditto
        (-[WebBaseResourceHandleDelegate willCacheResponse:]): ditto
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]): calls connection-less version of this method
        (-[WebBaseResourceHandleDelegate connection:didReceiveAuthenticationChallenge:]): ditto
        (-[WebBaseResourceHandleDelegate connection:didCancelAuthenticationChallenge:]): ditto
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]): ditto
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:lengthReceived:]): ditto
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]): ditto
        (-[WebBaseResourceHandleDelegate connection:didFailWithError:]): ditto
        (-[WebBaseResourceHandleDelegate connection:willCacheResponse:]): ditto
        (-[WebBaseResourceHandleDelegate cancelWithError:]): call renamed _completeProgressForConnectionDelegate on WebView
        (-[WebBaseResourceHandleDelegate cancelledError]): tweak
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _loadIcon]): set the data source on the icon loader so it can callback
        * WebView.subproj/WebResource.m:
        (-[WebResource _response]): new, factored out from _cachedResponseRepresentation
        (-[WebResource _cachedResponseRepresentation]): call _response
        * WebView.subproj/WebResourcePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _incrementProgressForConnectionDelegate:response:]): renamed to be connection-less
        (-[WebView _incrementProgressForConnectionDelegate:data:]): ditto
        (-[WebView _completeProgressForConnectionDelegate:]): ditto
        * WebView.subproj/WebViewPrivate.h:

2004-03-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin
        
        Changed all Objective-C DOM classes from protocols to classes. 

        * DOM.subproj/DOM-compat.h:
        * DOM.subproj/DOM.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:referrer:reload:onLoadEvent:target:triggeringEvent:form:formValues:]):
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate frame:sourceFrame:willSubmitForm:withValues:submissionListener:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebFormState initWithForm:values:sourceFrame:]):
        (-[WebFormState form]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation DOMDocument]):
        (-[WebHTMLRepresentation setSelectionFrom:startOffset:to:endOffset:]):
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        (-[WebHTMLRepresentation elementWithName:inForm:]):
        (-[WebHTMLRepresentation elementForView:]):
        (-[WebHTMLRepresentation elementDoesAutoComplete:]):
        (-[WebHTMLRepresentation elementIsPassword:]):
        (-[WebHTMLRepresentation formForElement:]):
        (-[WebHTMLRepresentation controlsInForm:]):
        (-[WebHTMLRepresentation searchForLabels:beforeElement:]):
        (-[WebHTMLRepresentation matchLabels:againstElement:]):

2004-02-27  John Sullivan  <sullivan@apple.com>

        - WebKit changes to allow performance improvements to bookmarks 

        Reviewed by Darin.

        * History.subproj/WebHistoryItemPrivate.h:
        added notificationsSuppressed/setNotificationsSuppressed, and setURLString
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setNotificationsSuppressed:]):
        setter for new flag. When this flag is set, making changes to the WebHistoryItem
        will not cause WebHistoryChanged notifications to be sent. This is a big speedup
        for reading bookmarks from disk, since currently each WebBookmarkLeaf object
        keeps around a WebHistoryItem object that isn't really part of history and thus
        doesn't need to send notifications about history changing.
        (-[WebHistoryItem notificationsSuppressed]):
        getter for new flag
        (-[WebHistoryItem setURLString:]):
        new method, extracted from guts of setURL:; this allows callers (though
        currently only callers at Apple) that have a URL string in hand to set
        it directly on the WebHistoryItem rather than converting to a URL and
        back, both relatively slow operations. Also, doesn't sent a notification
        if notifications are suppressed.
        (-[WebHistoryItem setURL:]):
        now calls extracted method
        (-[WebHistoryItem setAlternateTitle:]):
        doesn't send notification if notifications are suppressed
        (-[WebHistoryItem setOriginalURLString:]):
        ditto
        (-[WebHistoryItem setTitle:]):
        ditto
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
        ditto

2004-02-26  Chris Blumenberg  <cblu@apple.com>

        WebKit side of:
        <rdar://problem/3056566>: mail a link to this page
        <rdar://problem/2961206>: implement ability to e-mail entire page

        Reviewed by john.

        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _createFileDatabase]): tweaks
        (-[WebIconDatabase _loadIconDictionaries]): fixed an assertion failure I found in Blot. Keep the original list of icon URLs as a separate list when doing the initial clean-up so we don't over release any icons.
        (-[WebIconDatabase _updateFileDatabase]): tweaks
        (-[WebIconDatabase _setIcon:forIconURL:]): tweaks
        (-[WebIconDatabase _releaseIconForIconURLString:]): tweaks
        (-[WebIconDatabase _retainOriginalIconsOnDisk]): use the original list of icons on disk instead of the current list
        (-[WebIconDatabase _releaseOriginalIconsOnDisk]): use the original list of icons on disk instead of the current list
        * Misc.subproj/WebIconDatabasePrivate.h:
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _propertyListWithData:subresourceURLStrings:]): new, code moved from [WebHTMLView _selectedPropertyList:], creates property list rep of data and subresources
        (-[WebDataSource propertyList]): does the above with all the data source data, this is what "Mail Page" uses
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadPropertyList:]): renamed from loadHTMLPropertyList because the property list may contain non-HTML data
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _selectedPropertyList:]): renamed, code moved to [WebDataSource _propertyListWithData:subresourceURLStrings:]
        (-[WebHTMLView _writeSelectionToPasteboard:]): call renamed _selectedPropertyList

2004-02-26  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        Updated usage of DOM SPI to use new names and conventions. 

        Unless indicated otherwise, the changes were to update protocol names for, which
        changed from using a "WebDOM" prefix to a "DOM" prefix, and changing now need 
        only include the DOM.h header from WebKit to get everything.

        * DOM.subproj/DOM-compat.h: Added. This header contains some compatibility declarations
        to work with older clients of our DOM SPI. Though this file is checked into WebKit, 
        it really lives and should be updated in WebCore. It is copied into WebKit by the build 
        system as needed.
        * DOM.subproj/DOM.h: Added. This file includes the new "guts" of the DOM SPI. As above,
        this file is checked into WebKit, it really lives and should be updated in WebCore.
        It is copied into WebKit by the build system as needed.
        * DOM.subproj/WebDOMDocument.h: Removed declarations. Now just includes DOM.h and DOM-compat.h
        * DOM.subproj/WebDOMDocument.m: Removed.
        * DOM.subproj/WebDOMElement.h: Removed declarations. Now just includes DOM.h and DOM-compat.h
        * DOM.subproj/WebDOMElement.m: Removed.
        * DOM.subproj/WebDOMNode.h: Removed declarations. Now just includes DOM.h and DOM-compat.h
        * DOM.subproj/WebDOMNode.m: Removed.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:referrer:reload:onLoadEvent:target:triggeringEvent:form:formValues:])
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:])
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate frame:sourceFrame:willSubmitForm:withValues:submissionListener:])
        * WebView.subproj/WebFrame.h: Unrelated change. Removed -undoManager accessor from public header. Moved to private header.
        * WebView.subproj/WebFrame.m: 
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:])
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:])
        (-[WebFrame undoManager]): Moved -undoManager accessor to private category implementation.
        (-[WebFormState initWithForm:values:sourceFrame:])
        (-[WebFormState form])
        (-[WebFrame childFrames])
        * WebView.subproj/WebFramePrivate.h: Moved in -undoManager accessor.
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation DOMDocument])
        (-[WebHTMLRepresentation setSelectionFrom:startOffset:to:endOffset:])
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:])
        (-[WebHTMLRepresentation elementWithName:inForm:])
        (-[WebHTMLRepresentation elementForView:])
        (-[WebHTMLRepresentation elementDoesAutoComplete:])
        (-[WebHTMLRepresentation elementIsPassword:])
        (-[WebHTMLRepresentation formForElement:])
        (-[WebHTMLRepresentation controlsInForm:])
        (-[WebHTMLRepresentation searchForLabels:beforeElement:])
        (-[WebHTMLRepresentation matchLabels:againstElement:])
        * WebView.subproj/WebHTMLView.m:
        * copy-webcore-files-to-webkit: Added. Copies DOM.h and DOM-compat.h from WebCore when they
        have been updated there.

2004-02-25  John Sullivan  <sullivan@apple.com>

        WebKit part of fix for <rdar://problem/3546370>: add a way to tab to menus, 
        checkmarks, and buttons without turning on Full Keyboard Acceess

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]):
        turn on WebCoreKeyboardAccessFull bit whenever we turn on
        WebCoreKeyboardAccessTabsToLinks bit

2004-02-24  Chris Blumenberg  <cblu@apple.com>

        I forgot to add these files in my last check-in.

        * WebView.subproj/WebResource.h: Added.
        * WebView.subproj/WebResource.m: Added.
        (-[WebResourcePrivate dealloc]):
        (-[WebResource initWithData:URL:MIMEType:textEncodingName:]):
        (-[WebResource dealloc]):
        (-[WebResource data]):
        (-[WebResource URL]):
        (-[WebResource MIMEType]):
        (-[WebResource textEncodingName]):
        (+[WebResource _resourcesFromPropertyLists:]):
        (+[WebResource _propertyListsFromResources:]):
        (-[WebResource _initWithPropertyList:]):
        (-[WebResource _initWithCachedResponse:originalURL:]):
        (-[WebResource _propertyListRepresentation]):
        (-[WebResource _cachedResponseRepresentation]):
        * WebView.subproj/WebResourcePrivate.h: Added.

2004-02-24  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3565476>: design/implement new pasteboard type for HTML that includes subresources

        Reviewed by rjw.

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate initWithStream:view:]): don't manage buffer, WebBaseResourceHandleDelegate does this now
        (-[WebNetscapePluginConnectionDelegate releaseResources]): ditto
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveData:lengthReceived:]): ditto
        (-[WebNetscapePluginConnectionDelegate connectionDidFinishLoading:]): ditto
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate releaseResources]): release resourceData and resource
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): check the dataSource for a resource, load that if we have one
        (-[WebBaseResourceHandleDelegate addData:]): new, adds data to resourceData
        (-[WebBaseResourceHandleDelegate saveResource]): new, saves data as a resource on the dataSource
        (-[WebBaseResourceHandleDelegate saveResourceWithCachedResponse:]): new, replaces the resource on the dataSource to save memory
        (-[WebBaseResourceHandleDelegate resourceData]): new
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:lengthReceived:]): call addData:
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]): call saveResource
        (-[WebBaseResourceHandleDelegate connection:willCacheResponse:]): new, calls saveResourceWithCachedResponse:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]): release subresources
        (-[WebDataSource subresources]): new, returns the subresources of the data source
        (-[WebDataSource subresourceForURL:]): new, returns a resource for a URL
        (-[WebDataSource addSubresource:]): new
        (-[WebDataSource addSubresources:]): new
        (-[WebDataSource _receivedData:]): added an assert
        (-[WebDataSource _setData:]): replaces the data of the data source
        (-[WebDataSource initWithRequest:]): create subresources
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadHTMLPropertyList:]): new, loads a frame from an HTML plist
        (-[WebFrame _webDataRequestForData:MIMEType:textEncodingName:baseURL:]): new, factored out from loadData:MIMEType:textEncodingName:baseURL:
        (-[WebFrame _loadRequest:subresources:]): new, factored out from loadRequest:, handles subresources
        (-[WebFrame loadRequest:]): now just calls _loadRequest:subresources:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _dataSource]): new internal convenience
        (+[WebHTMLView _selectionPasteboardTypes]): renamed from _pasteboardTypes to be more precise
        (-[WebHTMLView _selectedHTMLPropertyList:]): new, constructs an HTML plist from the selection
        (-[WebHTMLView _writeSelectionToPasteboard:]): calls _selectedHTMLPropertyList to support WebHTMLPboardType
        (-[WebHTMLView _pasteHTMLFromPasteboard:]): added support for pasting WebHTMLPboardType
        (+[WebHTMLView initialize]): call renamed _selectionPasteboardTypes 
        (-[WebHTMLView initWithFrame:]): allow WebHTMLPboardType to be dragged in
        (-[WebHTMLView validRequestorForSendType:returnType:]): call renamed _selectionPasteboardTypes 
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient addData:]): override since the main resource does it's own buffering
        (-[WebMainResourceClient saveResource]): override to do nothing since the main resource is not saved as a subresource
        (-[WebMainResourceClient saveResourceWithCachedResponse:]): override, calls _setData on the data source to 
        (-[WebMainResourceClient connection:didReceiveData:lengthReceived:]):
        * WebView.subproj/WebResource.h: Added.
        * WebView.subproj/WebResource.m: Added. New class the represents the data, URL, MIME type and textEncodingName of a resource.
        (-[WebResourcePrivate dealloc]):
        (-[WebResource initWithData:URL:MIMEType:textEncodingName:]):
        (-[WebResource dealloc]):
        (-[WebResource data]):
        (-[WebResource URL]):
        (-[WebResource MIMEType]):
        (-[WebResource textEncodingName]):
        (-[WebResource description]):
        (+[WebResource _resourcesFromPropertyLists:]):
        (+[WebResource _propertyListsFromResources:]):
        (-[WebResource _initWithPropertyList:]):
        (-[WebResource _propertyListRepresentation]):
        (-[WebResource _initWithCachedResponse:originalURL:]):
        (-[WebResource _cachedResponseRepresentation]):
        * WebView.subproj/WebResourcePrivate.h: Added.
        * WebView.subproj/WebView.m:

=== Safari-129 ===

2004-02-20  Darin Adler <darin@apple.com>

        Reviewed by mjs.

        - fix build breakage caused by removal of kWindowNoBufferingAttribute.  

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:disableOrdering:carbon:]):
        always used a retained backing store type

2004-02-20  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3563402>: when copying HTML, relative URLs should be made absolute

        Reviewed by dave.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation HTMLString]): renamed from reconstructed source to be more analogous with other data get methods
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _writeSelectionToPasteboard:]): call renamed selectedHTML on the bridge

2004-02-19  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for <rdar://problem/3292380>: Cycle Tabs keyboard shortcut 
        (cmd-shift-arrows) conflicts with text editing

        Reviewed by Chris.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView keyDown:]):
        If shift key is down along with an arrow key, call super rather than eating
        event since we don't handle any shifted events here.

2004-02-15  Darin Adler  <darin@apple.com>

        Reviewed by John and Don.

        - discovered that jaguar.com doesn't need spoofing any more, so removed
          the spoofing machinery entirely; if we ever have to bring it back we
          can, but I doubt we will

        * WebView.subproj/WebView.m: Removed include of WebUserAgentSpoofTable.c.
        (-[WebViewPrivate dealloc]): Release the new single userAgent rather than
        the array and userAgentOverride we used to.
        (-[WebView _preferencesChangedNotification:]): Release the single user agent,
        rather than the entire cache. Also only do it when the user agent is not
        overridden.
        (-[WebView setApplicationNameForUserAgent:]): Ditto.
        (-[WebView setCustomUserAgent:]): Set the new userAgentOverridden boolean,
        and also set userAgent itself.
        (-[WebView customUserAgent]): Return userAgent, but only if userAgentOverridden
        is true.
        (-[WebView userAgentForURL:]): Simplify, now that there's no automatic spoofing
        to do. Made even simpler by the fact that custom and computed user agents both
        share the same field now.

        * WebView.subproj/WebViewPrivate.h: Got rid of UserAgentStringType, turned the
        userAgent field into a single item instead of an array, and replaced the
        userAgentOverride field with a boolean userAgentOverridden field.

        * Makefile.am: Removed the rule to build WebUserAgentSpoofTable.c.
        * WebView.subproj/WebUserAgentSpoofTable.c: Removed.
        * WebView.subproj/WebUserAgentSpoofTable.gperf: Removed.

2004-02-15  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        * WebKit.pbproj/project.pbxproj: Tweak build styles a bit, fixing OptimizedWithSymbols,
        and removing redundant settings of things that match defaults in other build styles.

2004-02-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - redo visited link history checking for a 2% speed improvement

        * History.subproj/WebHistory.m:
        (-[_WebCoreHistoryProvider containsItemForURLString:]): Removed.
        (-[_WebCoreHistoryProvider containsItemForURLLatin1:length:]): Implemented.
        For https and http URLs with empty path, add a slash. Make a CFString
        using the passed-in latin1 buffer without copying.
        (-[_WebCoreHistoryProvider containsItemForURLUnicode:length:]): Ditto
        for unicode.
        (matchLetter): New static helper function.
        (matchUnicodeLetter): Ditto.

=== Safari-128 ===

2004-02-10  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge registerCommandForUndo]): Some cleanup. Cookie for events no longer needed.
        (-[WebBridge registerCommandForRedo]): Ditto.
        (-[WebBridge clearUndoRedoOperations]): Tells the Cocoa undo manager to clear
        steps targeted at the bridge.
        * WebView.subproj/WebFrame.h: Declare undo manager accessor.
        * WebView.subproj/WebFrame.m:
        (-[WebFramePrivate dealloc]): Release undo manager
        (-[WebFrame undoManager]): Allocate and return an undo manager. This helps
        undo in a browser to be per tab.
        * WebView.subproj/WebFramePrivate.h: Declare undo manager ivar.

2004-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed things seen in the profile, for a total speedup of 4% on cvs-base
        - fixed some layout regressions from my last speedup due to text measurement inconsistencies by adding
          a flag to control whether word rounding is done or not
        - fixed text measurement to be used with AppKit to match AppKit again, as it did at some point in the past

        * WebCoreSupport.subproj/WebTextRenderer.h: Remove some unused fields, and added a field to say whether we
        treat this font as fixed pitch.
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (getUncachedWidth): Remove space width hack from this level. There was already a width hack up at the higher
        level for space itself, so there's not a significant speed benefit, and the higher level can make a more
        intelligent choice based on the current rounding setting since it's not cached.
        (-[WebTextRenderer _computeWidthForSpace]): Don't store so many widths; just the adjusted width we will
        actually use.
        (widthForNextCharacter): Use two different rules for when to adjust space widths, based on whether this is
        a fixed pitch font or not. Also, don't do any adjusting of space widths if applyWordRounding is false.

        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_drawAtPoint:font:textColor:]): Turn off rounding, so we get the kind of spacing AppKit would normally give.
        (-[NSString _web_widthWithFont:]): Ditto.
        * Misc.subproj/WebStringTruncator.m: (stringWidth): Ditto.

2004-02-08  Darin Adler  <darin@apple.com>

        - fixed things seen in the profile, for a total speedup of 3.7% on cvs-base

        * Misc.subproj/WebNSURLExtras.m: (-[NSURL _web_userVisibleString]): Check for "xn--" as we
        walk the string instead of in a separate call to strcasestr. Faster this way.

2004-02-07  Darin Adler  <darin@apple.com>

        * WebKit.pbproj/project.pbxproj: Get rid of the DEPLOYMENT_LOCATION and DEPLOYMENT_POSTPROCESSING
        flags that were in the Deployment build style. These were causing the need to chmod all the time
        after building WebCore successfully, and were doing us no good.

2004-02-06  Darin Adler  <darin@apple.com>

        * Resources/missing_image.tiff: Compressed with compress-tiffs; saved 15890 bytes.

=== Safari-127 ===

2004-02-05  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        Added so that editing can hook into Cocoa undo architecture. 

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge registerCommandForUndo:]):

2004-02-04  David Hyatt  <hyatt@apple.com>

        Fix deployment build bustage.
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (ConsoleConnectionChangeNotifyProc):

2004-02-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3546028>: Safari should not give plug-ins any time, thus use 0% CPU, when not in the currently active session


        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (+[WebBaseNetscapePluginView initialize]): observe CG changes
        (-[WebBaseNetscapePluginView addWindowObservers]): observe user switch notifications
        (-[WebBaseNetscapePluginView removeWindowObservers]): stop observing user switch notifications
        (-[WebBaseNetscapePluginView viewHasMoved:]): tweak
        (-[WebBaseNetscapePluginView windowWillClose:]): tweak 
        (-[WebBaseNetscapePluginView windowBecameKey:]): tweak
        (-[WebBaseNetscapePluginView windowResignedKey:]): tweak
        (-[WebBaseNetscapePluginView windowDidMiniaturize:]): tweak
        (-[WebBaseNetscapePluginView windowDidDeminiaturize:]): tweak
        (-[WebBaseNetscapePluginView loginWindowDidSwitchFromUser:]): new, stop null events
        (-[WebBaseNetscapePluginView loginWindowDidSwitchToUser:]): new, restart null events
        (ConsoleConnectionChangeNotifyProc): new, post user switch notifications

2004-02-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.

        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_URLWithLowercasedScheme]):
        new method, returns a URL whose scheme has been tolower'ed

        * English.lproj/StringsNotToBeLocalized.txt:
        Updated for recent changes.

2004-02-02  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3546924>: REGRESSION: dragging text or images over a WebView is jerky

        Reviewed by mjs.

        * DOM.subproj/WebDOMNode.h: added HTMLString to the protocol
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): get the HTML representation via the DOM node
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): get the HTML representation via the DOM node
        * WebView.subproj/WebView.h: removed the HTML string element key constant
        * WebView.subproj/WebView.m: removed the HTML string element key constant

2004-02-02  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3546426>: when copying images via context menus, only some data is added to the pasteboard

        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeImage:URL:title:fileWrapper:HTMLString:]): new, writes and image, URL and other optional arguments to the pasteboard
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:fileWrapper:rect:URL:title:HTMLString:event:]): factored code out to _web_writeImage, call _web_writeImage
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call _web_writeImage
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:]): call _web_writeImage

2004-02-02  Darin Adler  <darin@apple.com>

        - fixed build failure on Merlot

        * Misc.subproj/WebNSPasteboardExtras.m: Import just CoreTranslationFlavorTypeNames.h rather than all of
        ApplicationServicesPriv.h; should compile faster and avoid build failure.

2004-02-02  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3546379>: support for editing via drag & drop

        Reviewed by kocienda.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:fileWrapper:rect:URL:title:HTMLString:event:]): added a HTMLString argument so that we retain all attributes when dragging images
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _canDelete]): call renamed isSelectionEditable
        (-[WebHTMLView _canPaste]): call renamed isSelectionEditable
        (-[WebHTMLView _pasteHTMLFromPasteboard:]): new, factored out from paste:
        (-[WebHTMLView _handleMouseDragged:]): removed code that returned early if we were loading, this kind of protection is no longer needed since we now retain the view while dragging, call renamed _web_dragImage
        (-[WebHTMLView initWithFrame:]): register for drop types
        (-[WebHTMLView paste:]): call _pasteHTMLFromPasteboard
        (-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]): set new isDragging BOOL to YES
        (-[WebHTMLView draggedImage:endedAt:operation:]): set new isDragging BOOL to NO
        (-[WebHTMLView draggingEntered:]): new
        (-[WebHTMLView draggingUpdated:]): new, handle caret movement during the drag
        (-[WebHTMLView prepareForDragOperation:]): new
        (-[WebHTMLView performDragOperation:]): new
        (-[WebHTMLView concludeDragOperation:]): new, paste in the drag
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView mouseDragged:]): call renamed _web_dragImage
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:

=== Safari-126 ===

2004-01-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3536126>: REGRESSION (Merlot): WebKit dragging is in strange location

        Reviewed by kocienda.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): use the proper offset when dragging text

2004-01-28  John Sullivan  <sullivan@apple.com>

        More header/footer work: refactored the header/footer code so it could
        be easily reused by other WebDocument classes; used it from WebImageView
        and WebTextView; removed the page count parameters because it's possible
        (though currently nasty, see 3543078) to determine this in the client.

        Reviewed by Dave.

        * Misc.subproj/WebNSPrintOperationExtras.h Added.
        * Misc.subproj/WebNSPrintOperationExtras.m Added.
        (-[NSPrintOperation _web_pageSetupScaleFactor]):
        new convenience method.
                
        * WebView.subproj/WebUIDelegatePrivate.h:
        Removed page index and page count parameters from delegate methods.
        
        * WebView.subproj/WebViewPrivate.h:
        New private category for header/footer printing methods so that different
        WebDocument methods can share almost all of the code.
        
        * WebView.subproj/WebView.m:
        (-[WebView _headerHeight]):
        (-[WebView _footerHeight]):
        (-[WebView _drawHeaderInRect:]):
        (-[WebView _drawFooterInRect:]):
        (-[WebView _adjustPrintingMarginsForHeaderAndFooter]):
        (-[WebView _drawHeaderAndFooter]):
        Moved all of these methods here, formerly in WebHTMLView. Removed the
        page index and page count parameters.

        * WebView.subproj/WebHTMLView.m:
        Removed all the header/footer code that's now in WebView.m, and the
        method that's now -[NSPrintOperation _web_pageSetupScaleFactor]
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
        call methods differently that have now been moved
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        ditto
        (-[WebHTMLView knowsPageRange:]):
        ditto
        (-[WebHTMLView drawPageBorderWithSize:]):
        now just turns around and calls -[WebView _drawHeaderAndFooter]
        
        * WebView.subproj/WebImageView.m:
        (-[WebImageView drawPageBorderWithSize:]):
        new method, just calls -[WebView _drawHeaderAndFooter]
        (-[WebImageView beginDocument]):
        now calls -[WebView _adjustPrintMarginsForHeaderAndFooter], also moved in file.
        (-[WebImageView endDocument]):
        just moved in file.

        * WebView.subproj/WebTextView.m:
        (-[WebTextView drawPageBorderWithSize:]):
        new method, just calls -[WebView _drawHeaderAndFooter]        
        (-[WebTextView knowsPageRange:]):
        overridden to call -[WebView _adjustPrintMarginsForHeaderAndFooter]
        
        * WebKit.pbproj/project.pbxproj:
        updated for added files


2004-01-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3197222>: need context menu items for back, forward, refresh.

        Reviewed by rjw.

        * English.lproj/Localizable.strings:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]): added support for WebMenuItemTagGoBack, WebMenuItemTagGoForward, WebMenuItemTagStop and WebMenuItemTagReload tags
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): added support for Back, Forward, Stop and Reload
        * WebView.subproj/WebUIDelegate.h: added WebMenuItemTagGoBack, WebMenuItemTagGoForward, WebMenuItemTagStop and WebMenuItemTagReload tags

2004-01-27  John Sullivan  <sullivan@apple.com>

        WebKit part of fixes for:
        <rdar://problem/3123975>: ER: please list the source URL in the header 
        or footer when printing the contents of a page
        <rdar://problem/3184091>: Safari - Configurable printing header/footer
        <rdar://problem/3306826>: Please allow printing the date (as well as URL) 
        in the header or footer

        Reviewed by Dave.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _headerHeight]):
        new method, gets result from WebView's UI delegate or returns 0
        (-[WebHTMLView _footerHeight]):
        new method, gets result from WebView's UI delegate or returns 0
        (-[WebHTMLView _drawHeaderInRect:]):
        new method, gives WebView's UI delegate a chance to draw header
        (-[WebHTMLView _drawFooterInRect:]):
        new method, gives WebView's UI delegate a chance to draw footer
        (-[WebHTMLView _adjustPrintingMarginsForHeaderAndFooter]):
        new method, adds header and footer heights into page margins so
        AppKit printing code will compute and use the right area
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
        now calls _adjustPrintingMarginsForHeaderAndFooter if starting to print
        (-[WebHTMLView drawPageBorderWithSize:]):
        new method, computes rects for header and footer and calls new drawing methods
        
        * WebView.subproj/WebUIDelegatePrivate.h:
        add header and footer-related delegate methods

2004-01-27  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3541812>: Implement Paste menu item
        <rdar://problem/3541814>: Implement Delete menu item
        <rdar://problem/3541811>: Implement Cut menu item

        Reviewed by dave.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _haveSelection]): new, renamed from hasSelection, calls haveSelection on the bridge, quicker than generating string rep of selection
        (-[WebHTMLView _canDelete]): new
        (-[WebHTMLView _canPaste]): new
        (-[WebHTMLView takeFindStringFromSelection:]): call renamed _haveSelection
        (-[WebHTMLView cut:]): new
        (-[WebHTMLView delete:]): new
        (-[WebHTMLView paste:]): new
        (-[WebHTMLView validateUserInterfaceItem:]): updated for new methods
        (-[WebHTMLView validRequestorForSendType:returnType:]): call renamed _haveSelection
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-01-27  Chris Blumenberg  <cblu@apple.com>

        Fixed build breakage.

        Reviewed by darin.

        * WebKit.pbproj/project.pbxproj: Use full path instead of -L to get at WebKitSecurity.a

2004-01-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3536624>: Webkit 1.2 links against SecurityNssAsn1.framework

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebKeyGeneration.h: Set DISABLE_WEB_KEY_GENERATION on Merlot for now.
        Then don't include anything if that's set.
        * WebCoreSupport.subproj/WebKeyGeneration.cpp: Don't compile anything if DISABLE_WEB_KEY_GENERATION
        is set.
        * WebCoreSupport.subproj/WebKeyGenerator.m:
        (-[WebKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:pageURL:]):
        Always return nil if DISABLE_WEB_KEY_GENERATION is set.
        (-[WebKeyGenerator addCertificatesToKeychainFromData:]): Always return failure if
        DISABLE_WEB_KEY_GENERATION is set.

        * WebKit.pbproj/project.pbxproj: Added shell build step to make library with security
        libraries in it. On Merlot, makes empty library. Also added library to link options.
        * WebKitSecurityDummy.c: Added. Used to make empty version of library for build on Merlot.

2004-01-26  Darin Adler  <darin@apple.com>

        * Makefile.am: Switch from pbxbuild to xcodebuild.

2004-01-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/3521379>: image dimensions uses lowercase x instead of multiplication sign

        * WebView.subproj/WebImageRepresentation.m: (-[WebImageRepresentation title]):
        Change string to use multiplication sign instead of x.
        * English.lproj/Localizable.strings: Updated.

2004-01-23  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateShowsFirstResponder]): Renamed from updateFocusRing:
        since it is now used to kill caret blink timer.
        (-[WebHTMLView windowDidBecomeKey:]): Now calls new updateShowsFirstResponder
        method.
        (-[WebHTMLView windowDidResignKey:]): Ditto.

2004-01-22  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3537542>: support for copying HTML

        Reviewed by dave.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation reconstructedSource]): for BLOT's eventual use
        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView _pasteboardTypes]): provide NSHTMLPboardType 
        (-[WebHTMLView _writeSelectionToPasteboard:]): add HTML to the pasteboard

2004-01-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris.

        * English.lproj/StringsNotToBeLocalized.txt:
        brought this file back up to date

2004-01-22  Darin Adler  <darin@apple.com>

        - fixed 3536624: Webkit 1.2 links against SecurityNssAsn1.framework

        * WebKit.pbproj/project.pbxproj: Remove SecurityNssAsn1.framework from the list we link against.
        It's still included in the list for places to find headers.

=== Safari-125 ===

=== Safari-124 ===

2004-01-15  Vicki Murley  <vicki@apple.com>

        Reviewed by Darin.

        * WebKit.pbproj/project.pbxproj: Update copyright date to 2004.
        * English.lproj/InfoPlist.strings: Update copyright date to 2004.

=== Safari-122 ===

=== Safari-121 ===

2004-01-10  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3524906: REGRESSION (114-115): page with plug-in content never stops loading (travelking.com.tw)

        Put the plug-in streams clients into their own separate set. Now a plug-in client is not considered part
        of "loading", but it does participate in the callback deferral mechanism, which was the real goal of the
        change I made that introduced this regression. Also remove the plug-in client in one case I had missed
        before (cancel).

        * WebView.subproj/WebDataSourcePrivate.h: Added a new set of plugInStreamClients.
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSourcePrivate dealloc]): Release the set.
        (-[WebDataSource _addPlugInStreamClient:]): Added. Adds to the set.
        (-[WebDataSource _removePlugInStreamClient:]): Added. Removes from the set.
        (-[WebDataSource _defersCallbacksChanged]): Added code to loop through plugInStreamClients too.

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream start]): Use _add/removePlugInStreamClient instead of _add/removeSubresourceClient.
        (-[WebNetscapePluginConnectionDelegate connectionDidFinishLoading:]): Ditto.
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]): Ditto.
        (-[WebNetscapePluginConnectionDelegate cancelWithError:]): Override to call _removePlugInStreamClient and
        then call super.

2004-01-09  Darin Adler  <darin@apple.com>

        - rolled out most of Dave's change for 3510669 and 3515442; it is not working yet

        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLView.m:

2004-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris.

        <rdar://problem/3514446>: cert downloaded from BofA or MIT is rejected (ACL issue on private key?)
        
        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (createPair): Cut & paste hunk of code from Security framework.
        (Safari_SecKeyCreatePair): Ditto.
        (signedPublicKeyAndChallengeString): Instead of creating a normal ACL,
        use our hacked version of the SecKeyCreatePair call that doesn't put in
        any kind of ACL. This works around a SecureTransport bug.

2004-01-09  David Hyatt  <hyatt@apple.com>

        Fixes for 3510669 and 3515442, blank frame problems caused by WebKit's resizing not scheduling actual
        layouts via WebCore.
        Reviewed by darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _web_layoutIfNeededRecursive:testDirtyRect:]):
        (-[WebHTMLView initWithFrame:]):
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView setNeedsLayout:]):
        * WebView.subproj/WebHTMLViewPrivate.h:

2004-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 3510805: "PoolCleaner" in Carbon WebKit leads to overrelease and crash using color picker in BBEdit

        * Carbon.subproj/CarbonUtils.m: (PoolCleaner): Only do the autorelease
        pool stuff in the default run loop mode. If we're in another run loop
        mode that means we are in some Cocoa code that sets up its own autorelease
        pool; it's important that we don't release ours in that case.

2004-01-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        <rdar://problem/3522298>: Error on MIT's x509 certificate site

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (addCertificatesToKeychainFromData): Sign the freshly minted public key
        using RSA/MD5 instead of RSA/SHA-1, because MIT only supports MD5.

2004-01-08  Richard Williamson   <rjw@apple.com>

        Fixed 3524430.  This was a regression introduced when we added '-' and '?' to the word boundary detection.

        Also backed out workaround for 3521759 as it's no longer needed with correct argument passing to ATSUPositionToOffset.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):
        (widthForNextCharacter):

2004-01-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3522900>: REGRESSION (100-117): Java plug-in description is garbled when displaying Plug-ins.html

        Reviewed by darin.

        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebKitNSStringExtras.m:
        (+[NSString _web_encodingForResource:]): new method, returns the encoding for a resource handle given its file system path
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage stringForStringListID:andIndex:]): call _web_encodingForResource when creating the NSString

=== Safari-120 ===

2004-01-06  Richard Williamson   <rjw@apple.com>

        Fixed 3513660.  Make ATSU layout and draw with integer glyph boundaries.  This fix should be removed if/when we convert WebCore to use floats for measuring/positioning (3521781).

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _createATSUTextLayoutForRun:]):

2004-01-05  Richard Williamson   <rjw@apple.com>

        Fix for 3514454.  Work-around added for 3521759.

        Filed 3521781 to cover deeper problem.

        Reviewed by Kocienda.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):

2003-12-22  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for <rdar://problem/3515706>: 
        REGRESSION (100-118): Web Kit printing does not honor Page Setup scale factor

        Reviewed by Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _userScaleFactorForPrintOperation:]):
        new method, extracts the scale factor provided by the user in
        the Page Setup dialog
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        take user scale factor into account
        (-[WebHTMLView knowsPageRange:]):
        renamed local var scaleFactor -> totalScaleFactor for clarity;
        take user scale factor into account for print width; now assumes
        computePageRects returns autoreleased result.

        * WebKit.pbproj/project.pbxproj:
        Xcode version wars; Darin says these don't affect the build.

2003-12-21  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed a storage leak

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        Move the release of the request out of an if statement, since it's always needed.

2003-12-19  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3515255>: Standalone image drag makes ocassionally makes 2 copies

        Reviewed by john.

        * WebKit.pbproj/project.pbxproj: Xcode 1.1 file format change
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m: copied double-drag protection code from WebHTMLView
        (-[WebImageView mouseDown:]): set ignoringMouseDraggedEvents to NO
        (-[WebImageView mouseDragged:]): if ignoringMouseDraggedEvents, return
        (-[WebImageView draggedImage:endedAt:operation:]): set ignoringMouseDraggedEvents to YES

=== Safari-119 ===

2003-12-18  Richard Williamson   <rjw@apple.com>

        Fixed 3511415.  We have to un-visually order visually ordered text
        before passing to ATSU.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (reverseCharactersInRun):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_drawRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):

2003-12-17  Richard Williamson   <rjw@apple.com>

        Fixed 3503011 (really, this time).  Always use integer width for '-' and '?', as we do for spaces, to ensure
        that 'words' (as defined by out rounding hack) start on integer boundaries.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):

2003-12-17  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3393758>: REGRESSION (85-100): Flash onKeyUp event non-functional
        <rdar://problem/3479020>: REGRESSION (85-100): Safari sends plug-in key events to wrong instance of plug-in

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): set suspendKeyUpEvents to NO
        (-[WebBaseNetscapePluginView keyMessageForEvent:]): copied from CVS
        (-[WebBaseNetscapePluginView keyUp:]): if !suspendKeyUpEvents, send the keyUp event
        (-[WebBaseNetscapePluginView keyDown:]): set suspendKeyUpEvents to YES
        (-[WebBaseNetscapePluginView windowBecameKey:]): call SetUserFocusWindow

2003-12-17  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3513274: REGRESSION: anchor navigation within frames with "Back" is broken at tivofaq.com

        * WebView.subproj/WebDataSource.m: (-[WebDataSource _setURL:]):
        Since this method is only used when you do a fragment scroll, we need to update
        the original request as well as the request. This ensure that the fragment gets
        recorded in the history item (which goes in the back/forward history).

=== Safari-118 ===

2003-12-17  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3512801>: REGRESSION (Safari 100-116): 
        Mike Hay's Magic 8-ball game ignores slow clicks

        Reviewed by Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleAutoscrollForMouseDragged:]):
        start the autoscroll timer here, so the timer only runs when KHTML is
        handling the event.
        (-[WebHTMLView mouseDown:]):
        don't start the autoscroll timer here.

2003-12-16  Ken Kocienda  <kocienda@apple.com>

        * WebCoreSupport.subproj/WebBridge.m: ObjC runtime needs a declaration for new
        _calculatedExpiration SPI in NSURLResponse in Foundation

2003-12-16  Richard Williamson   <rjw@apple.com>

        Fixed 3512348:  Rewrote _CG_drawHighlightForRun:style:atPoint: to use width
        iterators.  Much faster, better cheaper, etc.

        Reviewed by Dave.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_drawHighlightForRun:style:atPoint:]):

2003-12-16  Richard Williamson   <rjw@apple.com>

        Fixed 3503011.  Added '-' and '?' to rounding hack.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isRoundingHackCharacter):
        (widthForNextCharacter):

2003-12-16  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - finished fix to 3109132: can't open movie file via open panel

        * WebView.subproj/WebView.m: (+[WebView _supportedFileExtensions]):
        Include all the extensions for each MIME type, not jus the preferred one.

2003-12-16  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3512199>: WebBridge expiresTimeForResponse can be 
        improved to use better expiration calculations

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge expiresTimeForResponse:]): Switch to use new 
        _calculatedExpiration SPI method on NSURLResponse.

2003-12-15  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3505546>: always get keychain prompt when sending mail using cert downloaded with Safari

        Reviewed by john.

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (signedPublicKeyAndChallengeString): set up the SecAccessRef with "everything goes" restrictions

2003-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3311205: click() on a file input type form element does not work bring up the file chooser as it does in IE

        * WebCoreSupport.subproj/WebFileButton.m: (-[WebFileButton performClick]):
        Add method for clicking, now part of the WebCoreFileButton protocol.
        The rest of the fix is in WebCore.

2003-12-13  Darin Adler  <darin@apple.com>

        Fixed by Ed Voas, reviewed by me.

        - fixed 3278443: CARBON: grow box obscures scroll bar knob

        * Carbon.subproj/CarbonWindowAdapter.m: (-[CarbonWindowAdapter _growBoxRect]):
        Return the grow box so AppKit's scroll bar code will know where it is.

2003-12-12  Ken Kocienda  <kocienda@apple.com>

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (signedPublicKeyAndChallengeString): Fix build-bustin' typo.

2003-12-12  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3396936>: can't obtain a digital ID from Verisign, form submission fails
        <rdar://problem/3505208>: keys added to keychain from KEYGEN need better UI names

        Reviewed by rjw.

        * English.lproj/Localizable.strings:
        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (signedPublicKeyAndChallengeString): take a key description arg and use it, take and return CFStrings, handle the empty string case
        (addCertificatesToKeychainFromData): return a WebCertificateParseResult so WB knows how to handle the cert
        * WebCoreSupport.subproj/WebKeyGeneration.h:
        * WebCoreSupport.subproj/WebKeyGenerator.h:
        * WebCoreSupport.subproj/WebKeyGenerator.m:
        (-[WebKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:pageURL:]): take a page URL so we can use its host name in the key description
        * WebKit.pbproj/project.pbxproj:

2003-12-12  Vicki Murley  <vicki@apple.com>

        * WebKit.pbproj/project.pbxproj:

2003-12-12  Vicki Murley  <vicki@apple.com>

        * WebKit.pbproj/project.pbxproj:

2003-12-12  Vicki Murley  <vicki@apple.com>

        * WebKit.pbproj/project.pbxproj:

2003-12-11  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3489280>: redirect via post blows cache, causing everything to get reloaded

        Now POST requests reload the main document by default, but will not reload 
        all subresources.

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        Take the cache policy for subresources from the original request, rather than
        the data source's current request. 
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient _isPostOrRedirectAfterPost:redirectResponse:]): New helper.
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        Call new helper to set the cache policy on the main resource load.

=== Safari-117 ===

2003-12-11  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebCoreSupport.subproj/WebBridge.m: time_t is a signed type, so
        casting -1 to a time_t does not work to make a max value.
        We'll go with INT_MAX.

2003-12-11  Ken Kocienda  <kocienda@apple.com>

        Reviewed and C++ heavy-lifting by Darin

        Fix warnings in C++ files.

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (signedPublicKeyAndChallengeString): Add cast to remove warning.
        (addCertificatesToKeychainFromData): Add cast to remove warning.
        * WebKit.pbproj/project.pbxproj: Add back warnings to C++ files.
        * WebKitPrefix.h: Add define for NULL that works for C++.

2003-12-09  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin
        
        <rdar://problem/3505444>: WebCore cache does not use expiration dates on cache items
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge expiresTimeForResponse:]): New method. Call response
        freshness lifetime method and add it to the current time to yield
        an expiration time.

2003-12-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        WebKit part of fix for:

        <rdar://problem/3487160>: Implement synchronous loading for XMLHttpRequest

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge syncLoadResourceWithURL:customHeaders:postData:finalURL:responseHeaders:statusCode:]):

2003-12-10  Richard Williamson   <rjw@apple.com>

        Added method to get to the bridge from a view.  This is
        used to ultimately get the part and KJS::Window for a
        particular applet.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[WebViewFactory refreshPlugins:]):
        (-[WebViewFactory bridgeForView:]):

2003-12-10  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for:
        <rdar://problem/3505231>: REGRESSION (100-114): Some sites autoscroll to bottom of page when loading

        Reviewed by Darin

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        removed _web_scrollPointToVisible:fromView:
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView scrollPoint:]):
        removed call to _web_scrollPointToVisible:fromView:

2003-12-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3505537>: certificates downloaded from Verisign are multipart/mixed, must be parsed out

        Reviewed by kocienda.

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (signedPublicKeyAndChallengeString): tweak
        (addCertificateToKeychainFromData): renamed to use lowercase "c" in "keychain"
        (addCertificatesToKeychainFromData): take data instead of a path to a file
        * WebCoreSupport.subproj/WebKeyGeneration.h:
        * WebCoreSupport.subproj/WebKeyGenerator.h:
        * WebCoreSupport.subproj/WebKeyGenerator.m:
        (-[WebKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:]): added temporary workaround for 3396936

2003-12-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3504237>: add downloaded certificates to keychain

        Reviewed by darin.

        * WebCoreSupport.subproj/WebKeyGeneration.cpp:
        (signedPublicKeyAndChallengeString):
        (addCertificateToKeyChainFromData): new
        (addCertificateToKeyChainFromFile): new
        * WebCoreSupport.subproj/WebKeyGeneration.h:
        * WebCoreSupport.subproj/WebKeyGenerator.h:
        * WebCoreSupport.subproj/WebKeyGenerator.m:
        (-[WebKeyGenerator addCertificateToKeyChainFromFileAtPath:]): new
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj: made WebKeyGenerator.h private

2003-12-09  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3504907>: REGRESSION (100-116): 
        Clicking QuickTime-requiring link twice crashes (wholenote.com)

        I found the bug; Darin wrote the fix; I reviewed and tested.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage stringForStringListID:andIndex:]):
        Rewrote this method to not use GetIndString, because GetIndString looks
        at all open resource files and in this case was reading information from
        the wrong plugin file.

2003-12-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3234676>: Support for KEYGEN tag (ie 509 email certificates from www.thawte.com)

        Reviewed by mjs.

        * WebCoreSupport.subproj/WebKeyGeneration.cpp: Added.
        (gnrAddContextAttribute): new
        (gnrGetSubjPubKey): new
        (gnrNullAlgParams): new
        (gnrSign): new
        (gnrFreeCssmData): new
        (signedPublicKeyAndChallengeString): new
        * WebCoreSupport.subproj/WebKeyGeneration.h: Added.
        * WebCoreSupport.subproj/WebKeyGenerationFactory.h: Added. Renamed from WebLocalizedStringFactory.
        * WebCoreSupport.subproj/WebKeyGenerationFactory.m: Added.
        (+[WebKeyGenerationFactory createSharedFactory]): no change
        (-[WebKeyGenerationFactory dealloc]): no change
        (-[WebKeyGenerationFactory strengthMenuItemTitles]): new
        (-[WebKeyGenerationFactory signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:]): new
        * WebCoreSupport.subproj/WebLocalizedStringFactory.h: Removed.
        * WebCoreSupport.subproj/WebLocalizedStringFactory.m: Removed.
        * WebCoreSupport.subproj/WebNetscapeTemplates.cpp: Added.
        * WebCoreSupport.subproj/WebNetscapeTemplates.h: Added.
        * WebKit.pbproj/project.pbxproj:
        * WebKitPrefix.h:
        * WebView.subproj/WebFrameView.m:

2003-12-05  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3491427>: REGRESSION (100-114): multi-page HTML 
        content in Mail is blank when printed

        Darin and I figured this one out.

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
        Don't call setNeedsDisplay:NO when we're turning printing on, as doing so prevents
        anything from drawing in the case where this is called from 
        adjustPageHeightsNew:top:bottom:limit

2003-12-05  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed regression in small caps with substituted fonts my patch from yesterday caused
        - fixed 3463599: if Lucida font is installed, you see bad glyphs on pages that use it (advogato.org)
        - fixed storage leak if a renderer is ever deallocated (I don't think we ever do that)
        - fixed some small leaks in various error cases by adding appropriate free and dispose calls

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer dealloc]): Free the Unicode glyph map too.
        (fontContainsString): Moved inline function up here so it will be inlined.
        (-[WebTextRenderer _setupFont]): Free the glyph map and set it back to zero if we fail after
        extending the glyph map to include space. This fixes the "wrong glyph codes" bug with Lucida above.
        (-[WebTextRenderer _extendUnicodeCharacterToGlyphMapToInclude:]): Add free calls needed to avoid
        storage leaks in failure cases.
        (-[WebTextRenderer _extendCharacterToGlyphMapToInclude:]): Ditto.
        (-[WebTextRenderer _initializeATSUStyle]): Add ATSUDisposeStyle to fix storage leak.
        (freeWidthMap): Use a loop instead of recursion.
        (freeGlyphMap): Use a loop instead of recursion.
        (freeUnicodeGlyphMap): Added.
        (widthForNextCharacter): Don't use the original characters or cluster length, because the
        character may have been capitalized for use in small caps rendering. So check the character
        for <= 0xFFFF instead of looking at clusterLength, and break the character into a local array
        instead of using the original character pointer.

2003-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3497879: REGRESSION (100-115): all non-BMP characters (including Deseret) are broken

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:]): Bump offset by getting it from
        the iterator; don't assume we can just bump it by one each time. It would be even nicer to have
        a bit more abstraction.
        (initializeCharacterWidthIterator): Remove call to initializeCharacterShapeIterator.
        (widthForNextCharacter): Move handling of surrogate pairs (non-BMP) in here and unify it with
        the handling of BMP characters; this removes the broken code that was returning the wrong font,
        and changes us to use the code that was already doing the right thing for the surrogate pair case.
        Also get rid of the use of 0 width to mean "no glyph", which fixes the doubled glyph problem.
        Also got rid of remnants of use of the shape iterator.

        * Misc.subproj/WebUnicode.h: Remove obsolete shape iterator.
        * Misc.subproj/WebUnicode.m: Ditto.

=== Safari-116 ===

2003-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3498426: assertion failure in tooltip code at macosx.apple.com

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _setToolTip:]): Work around
        the apparent bug in AppKit (3500217) that causes it to return 0 for the tool tip
        tag by using removeAllToolTips and not storing the tag at all. Besides the assertion
        failure there may also be a symptom of a "stuck" tool tip and a small memory
        leak until the window is closed.
        * WebView.subproj/WebHTMLViewPrivate.h: Remove unused toolTipTag.

2003-12-02  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3439222>: always hangs opening plain text file on a particular machine due to missing font, no UI to detect
        <rdar://problem/3492983>: Certain fonts cause Safari to hang on text/plain pages

        Reviewed by rjw.

        * WebView.subproj/WebTextView.m:
        (-[WebTextView setFixedWidthFont]): Use [[WebTextRendererFactory sharedFactory] fontWithFamilies:traits:size:] to get the font since it takes the font family which is what we store in WebPreferences and it does fallback work. Only set the font if 


non-nil is returned.

2003-11-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        <rdar://problem/3487185>: implement security checks for XMLHttpRequest
        
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connection:willSendRequest:redirectResponse:]): Let
        WebCore know about redirects.

2003-12-01  Richard Williamson   <rjw@apple.com>

        Moved grungy polling code from WebKit to the JavaPlugin.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pollForAppletInView:]):

2003-12-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3496873>: Move key event helper functions to WebKit

        * Misc.subproj/WebNSEventExtras.h: Add declarations for new key event
        helpers.
        * Misc.subproj/WebNSEventExtras.m:
        (-[NSEvent _web_isKeyEvent:]): Added.
        (-[NSEvent _web_isDeleteKeyEvent]): Added.
        (-[NSEvent _web_isEscapeKeyEvent]): Added.
        (-[NSEvent _web_isOptionTabKeyEvent]): Added.
        (-[NSEvent _web_isReturnOrEnterKeyEvent]): Added.
        (-[NSEvent _web_isTabKeyEvent]): Added.
        * WebKit.pbproj/project.pbxproj: Made WebNSEventExtras.h a private header
        so WebBrowser can use the new helpers.

=== Safari-115 ===

2003-11-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        WebKit part of fix for:
        <rdar://problem/3487134>: Implement http request/response status and headers for XMLHttpRequest
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:customHeaders:]): Added customHeaders
        parameter.
        (-[WebBridge startLoadingResource:withURL:customHeaders:postData:]): Ditto.
        * WebCoreSupport.subproj/WebSubresourceClient.h:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]): Add the custom headers.
        (+[WebSubresourceClient startLoadingResource:withURL:customHeaders:referrer:forDataSource:]): Pass along the custom headers.
        (+[WebSubresourceClient startLoadingResource:withURL:customHeaders:postData:referrer:forDataSource:]): Pass along the custom headers.

2003-11-21  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for <rdar://problem/3333744>: Safari prints page with 
        very, very long line very, very small

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        renamed PrintingExtraWidthFactor to PrintingMinimumShrinkFactor, added
        PrintingMaximumShrinkFactor of 2.0, which matches IE
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        now takes a min and max page width; passes them along to bridge
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
        now takes a min and max page width; passes them along to layoutTo...
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        now takes PrintingMaximumScaleFactor into account
        (-[WebHTMLView knowsPageRange:]):
        now takes PrintingMaximumScaleFactor into account

        (-[WebHTMLView layout]):
        pass 0 for maximumPageWidth when passing 0 for minimumPageWidth
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        ditto
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        ditto
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        ditto
        (-[WebHTMLView endDocument]):
        ditto

2003-11-20  John Sullivan  <sullivan@apple.com>

        - WebKit part of <rdar://problem/3183124>: Support page-break-before/after with a value of "always"

        Dave and I wrote and reviewed this.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setPrinting:pageWidth:adjustViewSize:]):
        reset page rects when printing status changes
        (-[WebHTMLView _availablePaperWidthForPrintOperation:]):
        new helper method to compute paper width taking margins into account
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        new helper method to compute how much we need to shrink to fit one page across
        (-[WebHTMLView _provideTotalScaleFactorForPrintOperation:]):
        we overrode this secret internal AppKit method to make shrink-to-fit work;
        we wrote bug 3491344 about the need for this to be public.
        (-[WebHTMLView knowsPageRange:]):
        new method, computes rects and returns YES
        (-[WebHTMLView rectForPage:]):
        new method, returns rect computed above
        (-[WebHTMLView _calculatePrintHeight]):
        new method, used by knowsPageRange
        
        * WebView.subproj/WebHTMLViewPrivate.h:
        new pageRects ivar

2003-11-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3490086 - support http post for XMLHttpRequest
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:postData:]):
        * WebCoreSupport.subproj/WebSubresourceClient.h:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withRequest:referrer:forDataSource:]):
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        (+[WebSubresourceClient startLoadingResource:withURL:postData:referrer:forDataSource:]):

2003-11-20  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3491229>: Need UI and localized strings for <KEYGEN> support

        Reviewed by john.

        * ChangeLog:
        * English.lproj/Localizable.strings:
        * WebCoreSupport.subproj/WebLocalizedStringFactory.h: Added.
        * WebCoreSupport.subproj/WebLocalizedStringFactory.m: Added.
        (+[WebLocalizedStringFactory createSharedFactory]): new
        (-[WebLocalizedStringFactory dealloc]): new
        (-[WebLocalizedStringFactory keyGenerationMenuItemTitles]): new
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebFrameView.m: call [WebLocalizedStringFactory createSharedFactory]

2003-11-20  Richard Williamson   <rjw@apple.com>

        Added spin of event loop during applet lookup poll.  This
        is necessary to allow timers and performOnMainThread: methods
        a chance to fire.  The plugin depends on these mechanisms during
        initialization.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pollForAppletInView:]):

2003-11-20  Ken Kocienda  <kocienda@apple.com>

        John and I decided to apply the _web_ prefix to the tab key 
        event method in the extras file, but I neglected to do this
        before checking in. Fixed now.

        * Misc.subproj/WebNSEventExtras.h:
        * Misc.subproj/WebNSEventExtras.m:
        (-[NSEvent _web_isTabKeyEvent])
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView keyDown:])

2003-11-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3482159>: Tabbing to links gets "stuck" in "style switcher" on zeldman.com

        * Misc.subproj/WebNSEventExtras.h: Added.
        * Misc.subproj/WebNSEventExtras.m: Added.
        (-[NSEvent _isTabKeyEvent]): New helper.
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebHTMLView.m: 
        (-[WebHTMLView keyDown:]): Pass the key event to super unconditionally
        if it is a tab key. This fixes the bug.

2003-11-19  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for:
        <rdar://problem/3305671>: Web pages print with 1.25" border without regard to Page 
        Setup margin settings

        Reviewed by Dave.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView beginDocument]):
        Lay out the page into a width 25% wider than there's room for on the printed page.
        This will make pages that can fit into a thin area be scaled down a little when printed,
        which lets them fit on fewer pages. This closely matches what IE and Camino (at least)
        do; I used Google as my test page, and the Google logo is now precisely the same size
        when printed from Safari as when printed from IE. Pages that don't fit into a thin
        area are already causing the printed page to be scaled horizontally to fit, and this
        won't affect them.

2003-11-19  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3489935>: Mentioning "to Disk" in context menus such as "Download Linked File To Disk..." is redundant

        Reviewed by john.

        * English.lproj/Localizable.strings:
        * English.lproj/StringsNotToBeLocalized.txt:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]): use "Download Linked File" and "Download Image"

2003-11-19  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3488783>: Flash at http://www.sjwilson.net/reef/ does not load photos
        Reviewed by rjw.

        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_stringByStrippingReturnCharacters]): new
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView requestWithURLCString:]): call _web_stringByStrippingReturnCharacters on the relative string

2003-11-19  Richard Williamson   <rjw@apple.com>

        More LiveConnect stuff.  Horrible polling hack that
        blocks main thread waiting for applet to fully initialize.

        Reviewed by Ken.

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController addPlugin:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pollForAppletInView:]):

2003-11-19  David Hyatt  <hyatt@apple.com>

        Make updateScrollers guard non-static, so that it applies only to the view whose scrollers are being
        updated.
        Reviewed by darin

        * WebView.subproj/WebDynamicScrollBarsView.h:
        * WebView.subproj/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):

2003-11-18  Richard Williamson   <rjw@apple.com>

        More live connect stubs.  We're getting close.

        Reviewed by Chris.

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController _delayedGetApplet:]):
        * WebView.subproj/WebView.m:
        (-[WebView _goToItem:withLoadType:]):

2003-11-17  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3487335: REGRESSION (112-113): "a:b" error message does not cite the URL properly

        * Misc.subproj/WebKitErrors.m:
        (+[NSError _webKitErrorWithCode:failingURL:]): Call _webKitErrorWithDomain:code:URL:.
        (+[NSError _webKitErrorWithDomain:code:URL:]): Call _web_errorWithDomain:code:URL:, instead of using
        the deprecated failingURL: flavor.
        (-[NSError _initWithPluginErrorCode:contentURLString:pluginPageURLString:pluginName:MIMEType:]):
        Change this method to call the other one.
        (-[NSError _initWithPluginErrorCode:contentURL:pluginPageURL:pluginName:MIMEType:]): Implement this one,
        and put in the NSErrorFailingURLKey, as well as the NSErrorFailingURLStringKey, to match what Foundation
        now does for other errors.

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:]):
        Change to use the non-deprecated flavor of the NSError call above.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for above changes and other recent changes.

2003-11-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

        WebKit part of fix for:

        <rdar://problem/3131664>: add support for the window.print() command used for "print this page" buttons
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge print]): Call delegate.
        * WebView.subproj/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webViewPrint:]): Implemented (do nothing).
        * WebView.subproj/WebUIDelegatePrivate.h: Added. Add extra SPI method webViewPrint:
        for UI delegate.
        * WebKit.pbproj/project.pbxproj: Install WebUIDelegatePrivate.h as private header

2003-11-15  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixes 3457162 -- selecting text during a page load that blows the text field away causes a crash
        - fixes 3160035 -- crash or hang if you hold down a button while "go to about:blank soon" test runs
        - without causing 3484608 -- REGRESSION: Flash broken at http://www.macromedia.com/

        The WebKit part of this fix is making setDefersCallbacks: work. It had succumbed to bit rot.
        This has a side effect of not considering a page load done until all the plug-in streams are loaded.
        If that's not a good idea, we'll have to keep two separate lists in WebDataSource.

        * WebView.subproj/WebBaseResourceHandleDelegate.m: (-[WebBaseResourceHandleDelegate setDataSource:]):
        Set the defersCallbacks state from the WebView here so that clients don't have to do it.

        * WebView.subproj/WebDataSource.m: (-[WebDataSource _addSubresourceClient:]): Remove call to
        set the defersCallbacks state on the subresource client, because the above change obviates it.
        (the client/delegate terminology makes it confusing, but it's a subclass). Also loosen the type
        so we can call this on clients for plug-in streams too.
        (-[WebDataSource _removeSubresourceClient:]): Loosen type here too.
        (-[WebDataSource _defersCallbacksChanged]): And here.
        * WebView.subproj/WebDataSourcePrivate.h: Loosen type of subresource client so we can pass in the
        delegates for plug-in streams too.

        * WebView.subproj/WebMainResourceClient.h: Added an _initialRequest field so we can defer the very
        first callback, which does not rely on NSURLConnection.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient dealloc]): Release the initial request.
        (-[WebMainResourceClient loadWithRequestNow:]): Moved the guts of loadWithRequest in here; to be
        used when the request is no longer deferred. Also removed the code to call setDefersCallbacks:
        on the connection, and assert that we are only called when callbacks are not deferred. Because
        the very first callback was not deferred, we would end up calling setDefersCallbacks:NO on the
        WebView, so nothing would be deferred.
        (-[WebMainResourceClient loadWithRequest:]): If callbacks are not deferred, then call the
        loadWithRequestNow: method, otherwise simply store the request in _initialRequest.
        (-[WebMainResourceClient setDefersCallbacks:]): If there is an _initialRequest and we are
        ceasing deferral of callbacks, then call the loadWithRequestNow: method.

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream start]): Call _addSubresourceClient, and then _removeSubresourceClient
        if the load fails to even start.
        (-[WebNetscapePluginConnectionDelegate connectionDidFinishLoading:]): Call _removeSubresourceClient.
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]): Call _removeSubresourceClient.

        * Plugins.subproj/WebBaseNetscapePluginStream.h: Removed unneeded import.
        * Plugins.subproj/WebPluginDatabase.m: Add import needed now that WebBaseNetscapePluginStream.h
        imports less than before.

2003-11-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3362841 - javascript History Object length property is always 0
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge historyLength]): Add one to the length to match other browsers.

2003-11-14  John Sullivan  <sullivan@apple.com>
        
        - WebKit part of fix for <rdar://problem/3474757>: Safari on-screen text needs review

        Reviewed by Ken.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]):
        change "Download Link to Disk" to "Download Linked File to Disk"

        * English.lproj/Localizable.strings:
        updated for these changes

2003-11-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3481701>: Crashes before loading page/no error msg
        (forums.pelicanparts.com) Works in IE and Netscape

        This fix is really a workaround for this bug:

        <rdar://problem/3484937>: Horribly malformed URL crashes when call
        is made to CFURLCopyHostName

        The fix is to avoid all usages of [NSURL host] by replacing all
        such calls with a private URL method added to WebNSURLExtras.

        I copied a number of URL methods from the private NSURL
        extras file in Foundation to the WebKit URL extras file.

        * Misc.subproj/WebNSDataExtras.h: Added. Helper for new URL extras.
        * Misc.subproj/WebNSDataExtras.m: Ditto.
        (-[NSData _web_isCaseInsensitiveEqualToCString:]): New helper.
        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_hasQuestionMarkOnlyQueryString]): Added.
        (-[NSURL _web_schemeSeparatorWithoutColon]): Added.
        (-[NSURL _web_dataForURLComponentType:]): Added.
        (-[NSURL _web_schemeData]): Added.
        (-[NSURL _web_hostData]): Added.
        (-[NSURL _web_hostString]): Added.
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebView.m:
        (-[WebView userAgentForURL:]): Replace call to [NSURL host] with new
        extras _web_hostString method.

=== Safari-114 ===

2003-11-14  Vicki Murley <vicki@apple.com>

        - rolled out Darin's fixes for 3457162 and 3160035, since these changes broke plugins on macromedia.com and disney.go.com

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate setDataSource:]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _addSubresourceClient:]):
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient dealloc]):
        (-[WebMainResourceClient loadWithRequest:]):
        (-[WebMainResourceClient setDefersCallbacks:]):

2003-11-14  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixes 3457162 -- selecting text during a page load that blows the text field away causes a crash
        - fixes 3160035 -- crash or hang if you hold down a button while "go to about:blank soon" test runs

        The WebKit part of this fix is making setDefersCallbacks: work. It had succumbed to bit rot.

        * WebView.subproj/WebBaseResourceHandleDelegate.m: (-[WebBaseResourceHandleDelegate setDataSource:]):
        Set the defersCallbacks state from the WebView here so that clients don't have to do it.
        * WebView.subproj/WebDataSource.m: (-[WebDataSource _addSubresourceClient:]): Remove call to
        set the defersCallbacks state on the subresource client, because the above change obviates it.
        (the client/delegate terminology makes it confusing, but it's a subclass).

        * WebView.subproj/WebMainResourceClient.h: Added an _initialRequest field so we can defer the very
        first callback, which does not rely on NSURLConnection.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient dealloc]): Release the initial request.
        (-[WebMainResourceClient loadWithRequestNow:]): Moved the guts of loadWithRequest in here; to be
        used when the request is no longer deferred. Also removed the code to call setDefersCallbacks:
        on the connection, and assert that we are only called when callbacks are not deferred. Because
        the very first callback was not deferred, we would end up calling setDefersCallbacks:NO on the
        WebView, so nothing would be deferred.
        (-[WebMainResourceClient loadWithRequest:]): If callbacks are not deferred, then call the
        loadWithRequestNow: method, otherwise simply store the request in _initialRequest.
        (-[WebMainResourceClient setDefersCallbacks:]): If there is an _initialRequest and we are
        ceasing deferral of callbacks, then call the loadWithRequestNow: method.

2003-11-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3483284>: Tabbing to links needs to honor new 
        WebKit tab-to-links preference

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge dealloc]): Remove self from notification center.
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]): Now
        checks for WebCoreKeyboardAccessTabsToLinks preference.
        (-[WebBridge keyboardUIMode]): Adds self to notification center
        to pick up changes to WebPreferences.

2003-11-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3481719>: WebKit needs preference for tabbing to links

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]): Add initialization of new 
        WebKitTabToLinksPreferenceKey.
        (-[WebPreferences setTabsToLinks:]): Added preference setter.
        (-[WebPreferences tabsToLinks]): Added preference getter.
        * WebView.subproj/WebPreferencesPrivate.h: Declared new methods as
        SPI on WebPreferences.

2003-11-12  Richard Williamson   <rjw@apple.com>

        Fixed 3475082.  Remove unnecessary orderKey before showKey.

        Written by Ed Voas.

        Reviewed by Richard.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter makeKeyWindow]):

2003-11-12  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3482147>: replace _releaseFutureIconForURL assertion with a log statement

        Reviewed by rjw.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _releaseFutureIconForURL:]):

2003-11-10  Richard Williamson   <rjw@apple.com>

        Fixed 3478765.  Use ICU to access unicode properties.
        Fixed 3478831.  Unicode property/conversion functions should be 32 bit savvy.
        Fixed 3478885.  Remove dead arabic shaping code

        Reviewed by Darin.

        * Misc.subproj/WebUnicode.h:
        * Misc.subproj/WebUnicode.m:
        (_unicodeDigitValue):
        (_unicodeDirection):
        (_unicodeMirrored):
        (_unicodeMirroredChar):
        (_unicodeLower):
        (_unicodeUpper):
        (WebKitInitializeUnicode):
        (shapeForNextCharacter):
        (initializeCharacterShapeIterator):
        * Misc.subproj/WebUnicodeTables.m:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):
        (fontContainsString):

2003-11-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3478351>: Safari: URL Alias on Dock failed to open the 2byte URL

        Reviewed by dave.

        * Misc.subproj/WebNSURLExtras.m:
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): if the host name is percent-escaped, use CFURLCreateStringByReplacingPercentEscapes

2003-11-10  Richard Williamson   <rjw@apple.com>

        Use ICU for upper/lower conversion.  Fixed 3477157, 3478455, 3478456, 3478457, 3478486.
        Remaining issues with surrogates (3477159) and Turkish I (3478482).

        Reviewed by Ken.

        * Misc.subproj/WebUnicode.m:
        (_unicodeLower):
        (_unicodeUpper):

2003-11-07  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3240778>: add "save" menu item to contextual menu for text pages

        Reviewed by darin.

        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]): Made WebTextView's context menu behavior like WebHTMLView's context menu behavior with regards to selection. If the control-click was on a selection, show menu options for the selection like copy. If it was not on a


 selection, show menu options such as save and print. Don't select anything when control-clicking.

2003-11-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3478022>: assertion failure while loading WMP content

        Reviewed by darin.

        * ChangeLog:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): Don't continue if the stream is cancelled in startStreamWithResponse.

2003-11-07  Richard Williamson   <rjw@apple.com>

        Fixed 3477067.  Use our case unicode conversion routines.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (toUpper):

2003-11-06  Richard Williamson   <rjw@apple.com>

        Fixed 3476393.  Call scrollPoint: recursively up the view hierarchy to ensure point is visible.

        Reviewed by Ken.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_scrollPointToVisible:fromView:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView scrollPoint:]):

=== Safari-113 ===

2003-11-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3473913 -- host names in simple mailto URLs are not getting encoded/decoded correctly yet

        * Misc.subproj/WebNSURLExtras.m:
        (applyHostNameFunctionToMailToURLString): Handle case where host name is at the end of the string.
        (applyHostNameFunctionToURLString): Add the # character to the set of characters that can end
        a domain name.

2003-11-05  Richard Williamson   <rjw@apple.com>

        Fixed 3413067, 3405797, 3456877
        Use ATSUI to render Arabic and Hebrew.

        Reviewed by John.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (shouldUseATSU):

2003-11-05  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3469791>: Bigger/Smaller commands are 
        disabled for HTML Mail in separate window (w/WebKit-111)

        Reviewed by Darin.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView acceptsFirstResponder]):
        always be willing to become first responder, even if no page
        has yet been loaded.
        (-[WebFrameView becomeFirstResponder]):
        if no page has yet been loaded (so our scrollview refuses
        first responder-ness), don't do any special becoming-first-
        responder shenanigans.

        Also removed obsolete overrides for nextKeyView, nextValidKeyView,
        previousKeyView, and previousValidKeyView that are no longer
        required now that we handle the key loop more like NSScrollView.

        * WebView.subproj/WebFrameViewPrivate.h:
        removed now-unused ivar inNextValidKeyView

2003-11-05  Richard Williamson   <rjw@apple.com>

        Fixed 3029966.  Animated backgrounds specified in <BODY> don't animate
        Fixed 3474824.  Tiled animated GIFs don't animate.
        Fixed 3029966.  Animated backgrounds specified with CSS don't animate.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer nextFrame:]):
        (-[WebImageRenderer drawImageInRect:fromRect:]):
        (-[WebImageRenderer startAnimationIfNecessary]):
        (-[WebImageRenderer tileInRect:fromPoint:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView drawRect:]):

2003-11-05  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3201364>: Safari crashes when hosting carbon plug-in using drag and drop

        Reviewed by rjw.

        * WebView.subproj/WebView.m:
        (-[WebView draggingUpdated:]): return NSDragOperationNone if we're over a plug-in view so the plug-in can handle the drag

2003-11-05  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3474360>: should attempt to resolve symbolic links when choosing "Save Link As..."

        Reviewed by kocienda.

        * WebView.subproj/WebView.m:
        (-[WebView _fileWrapperForURL:]): follow sym links

2003-11-05  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3455910>: hitting up or down arrows when focus 
        is on a pop-up menu should pop the menu

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView keyDown:]): Call super with the event if focus 
        is on a pop up button.

2003-11-05  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej

        Fix for these bugs:

        <rdar://problem/3467558>: Cannot tab to form file input widgets
        <rdar://problem/3473631>: WebFileButton sends notifications to communicate with WebCore

        Tabbing now works for these widgets. While I was in the neighborhood,
        I improved the communication mechanism between the WebKit and WebCore
        sides of the file button implementation, replacing notifications
        with a callback object.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge fileButtonWithDelegate:]): Method now takes a 
        delegate object.
        * WebCoreSupport.subproj/WebFileButton.h:
        * WebCoreSupport.subproj/WebFileButton.m:
        (-[WebFileButton initWithBridge:delegate:]):
        (-[WebFileButton initWithFrame:]):
        (-[WebFileButton dealloc]):
        (-[WebFileButton chooseFilename:]): Sends callback rather than posting
        a notification.
        (-[WebFileButton chooseButtonPressed:]): Ditto.
        (-[WebFileButton mouseDown:]):
        (-[WebFileButton acceptsFirstResponder]):
        (-[WebFileButton becomeFirstResponder]): Make the button subview
        first responder.
        (-[WebFileButton nextKeyView]): Hook up to WebBridge key view machinery.
        (-[WebFileButton previousKeyView]): Ditto.
        (-[WebFileButton nextValidKeyView]): Ditto.
        (-[WebFileButton previousValidKeyView]): Ditto.
        (-[WebFileChooserButton initWithDelegate:]):
        (-[WebFileChooserButton nextValidKeyView]): Ditto.
        (-[WebFileChooserButton previousValidKeyView]): Ditto.
        (-[WebFileChooserButton resignFirstResponder]): Sends a focus change 
        callback.

2003-11-04  Darin Adler  <darin@apple.com>

        Reviewed by John, except for one bit reviewed by Maciej.

        - first step for IDNA support; helper functions for Safari

        * Misc.subproj/WebNSURLExtras.h: Add six new methods to manipulate host names directly.
        * Misc.subproj/WebNSURLExtras.m:
        (applyHostNameFunctionToMailToURLString): Added. Finds host names within a mailto URL.
        (applyHostNameFunctionToURLString): Added. Finds host names within a URL.
        (collectRangesThatNeedMapping): Added. Builds a list of host name ranges that need mapping.
        (collectRangesThatNeedEncoding): Added. Calls the above for encoding.
        (collectRangesThatNeedDecoding): Added. Calls the above for decoding.
        (mapHostNames): Added. Helper function that does the entire mapping process for a URL.
        (+[NSURL _web_URLWithUserTypedString:]): Call mapHostNames to encode after trimming whitespace.
        (-[NSURL _web_userVisibleString]): Call mapHostNames to decode after decoding escape sequences.
        (-[NSURL _webkit_URLByRemovingFragment]): Removed unneeded redundant NULL check.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Added. Workhorse function to call
        the IDN functions in the Unicode library.
        (-[NSString _web_hostNameNeedsDecodingWithRange:]): Added.
        (-[NSString _web_hostNameNeedsEncodingWithRange:]): Added.
        (-[NSString _web_decodeHostNameWithRange:]): Added.
        (-[NSString _web_encodeHostNameWithRange:]): Added.
        (-[NSString _web_decodeHostName]): Added.
        (-[NSString _web_encodeHostName]): Added.

        * WebKit.pbproj/project.pbxproj: Added libicucore.dylib.
        * English.lproj/StringsNotToBeLocalized.txt: Updated for above changes.

2003-11-04  John Sullivan  <sullivan@apple.com>

        - a little optimization I noticed when looking at 3125137

        Reviewed by Chris.

        * Misc.subproj/WebStringTruncator.m:
        (truncateString):
        if incoming string has length 0, bail out right away

2003-11-04  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3472403>: RTFD of copied text and images should use original image data not tiffs
        <rdar://problem/3472435>: dragging local image file downloads it instead of copies it
        <rdar://problem/3472450>: copied and dragged local image files are TIFF, not original image data
        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeFileWrapperAsRTFDAttachment:]): new
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:fileWrapper:rect:URL:title:event:]): take a file wrapper instead of data so [NSPasteboard _web_writeFileWrapperAsRTFDAttachment:] can be called
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge fileWrapperForURL:]): call fileWrapperForURL on the WebView
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call [NSPasteboard _web_writeFileWrapperAsRTFDAttachment:]
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): when calling _web_dragImage, pass a file wrapper from fileWrapperForURL
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): call fileWrapperForURL
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation fileWrapper]): new
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:]): call [NSPasteboard _web_writeFileWrapperAsRTFDAttachment:]
        (-[WebImageView mouseDragged:]): pass the file wrapper to _web_dragImage
        * WebView.subproj/WebView.m:
        (-[WebView _fileWrapperForURL:]): new, returns a file wrapper from a local file or from the cache
        * WebView.subproj/WebViewPrivate.h:

2003-11-04  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3472813>: REGRESSION (100-111): Some tabs start 
        out scrolled down to focused text field

        Reviewed by Ken.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView acceptsFirstResponder]):
        The logic to avoid accepting first responder on clicks was too broad;
        it was rejecting first-responder-ness even for clicks outside of this
        view. Clicking a tab item was going through some logic in NSTabView
        looking for the first valid key view starting with the web view, but the
        web view was returning NO due to this faulty click logic. Thus the
        first subview text field was becoming first responder, and causing scroll.

2003-11-03  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3472377>: Provide NSRTFDPboardType on pasteboard when copying or dragging images
        <rdar://problem/3470809>: REGRESSION (111-112): Can't copy & paste image into Photoshop 7

        Reviewed by hyatt.

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeFileDataAsRTFDAttachment:withFilename:]): renamed, now writes file data as an RTF attachment
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:originalData:rect:URL:title:event:]): call renamed _web_writeFileDataAsRTFDAttachment
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call renamed _web_writeFileDataAsRTFDAttachment
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:]): call renamed _web_writeFileDataAsRTFDAttachment

2003-11-03  Vicki Murley <vicki@apple.com>

        Reviewed by kocienda.

        - fixed <rdar://problem/3471096>: non-B&I builds should not use order files, because they cause false "regressions" in perf.

        * WebKit.pbproj/project.pbxproj: added empty SECTORDER_FLAGS variables to the Development and Deployment build styles

2003-11-03  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John
        
        Fix for this bug:
        
        <rdar://problem/3470342>: focus rings are shown for links in         
        web pages even in non-frontmost windows

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusRing]): New method. Uses the "keyness"
        of the view's window to toggle focus ring drawing.
        (-[WebHTMLView windowDidBecomeKey:]): Calls updateFocusRing.
        (-[WebHTMLView windowDidResignKey:]): Ditto.

2003-11-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - remove use of obsolete HTTLCookiePolicyBaseURL SPI
        
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        startLoadingResource:withURL:referrer:forDataSource:]): Use
        setMainDocumentURL, not setHTTPCookiePolicyBaseURL.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]): Likewise.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]): Likewise.

2003-11-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3470882 -- storage leaks in WebDownload code
        - fixed 3470884 -- download is always nil in downloadWindowForAuthenticationSheet: call from WebDownload

        * Misc.subproj/WebDownload.m:
        (-[WebDownloadInternal initWithDownload:]): Removed this method, which was never called.
        (-[WebDownloadInternal dealloc]): Added missing call to [super dealloc] to fix one cause
        of a leak of the WebDownloadInternal object itself. Removed the release of webDownload,
        which was always nil, and if it wasn't would end up causing a leak due to a reference cycle.
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Remove the use of
        webDownload, which was always nil, and instead use the download parameter passed to us,
        casting it to WebDownload, since it's guaranteed to be one.
        (-[WebDownload _setRealDelegate:]): Added. Shared by the methods below to set up the real
        delegate before calling init. The old code called init twice, causing an second call to the
        superclass's init method, which caused it to create an extra copy of its internal structure,
        as well as causing us to create two WebDownloadInternal objects.
        (-[WebDownload init]): Don't allocate a second WebDownloadInternal if _setRealDelegate already
        allocated it for us. Before we would allocate and leak an extra one each time.
        (-[WebDownload dealloc]): Added. Releases the WebDownloadInternal. This is the second cause
        of the leak of the WebDownloadInternal object.
        (-[WebDownload initWithRequest:delegate:]): Call [self _setRealDelegate:] instead of calling
        [self init] and then [_webInternal setRealDelegate:], avoiding the leaks caused by doing it
        the other way.
        (-[WebDownload _initWithLoadingConnection:request:response:delegate:proxy:]): Ditto.
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]): Ditto.
        (-[WebDownload _initWithRequest:delegate:directory:]): Ditto.

2003-10-31  David Hyatt  <hyatt@apple.com>

        Fix for 3466542, add a real minimum font size setting.
        Reviewed by john

        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        (-[WebPreferences setMinimumFontSize:]):
        (-[WebPreferences minimumLogicalFontSize]):
        (-[WebPreferences setMinimumLogicalFontSize:]):
        * WebView.subproj/WebView.m:
        (-[WebView _updateWebCoreSettingsFromPreferences:]):

2003-10-31  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3469088>: focus not removed from text link         
        when user hits cmd-L or clicks in window chrome

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView deselectText]): Added new method just to deselect text.
        (-[WebHTMLView resignFirstResponder]): Just deseclect text if we
        are doing a programmatic setting of focus. Deselect all otherwise.

2003-10-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3458368>: drawing to the screen while window hidden: http://www.bhphotovideo.com/

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]): clip out the plug-in when the window is miniaturized or hidden
        (-[WebBaseNetscapePluginView restartNullEvents]): don't restart null events if the window is miniaturized, this allows restartNullEvents to be called in start and viewDidMoveToWindow without needing to make the check
        (-[WebBaseNetscapePluginView start]): just call restartNullEvents instead of checking if the window is miniaturized

2003-10-30  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Hyatt

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge documentView]): Added.
        * WebCoreSupport.subproj/WebGraphicsBridge.h: Added.
        * WebCoreSupport.subproj/WebGraphicsBridge.m: Added.
        (+[WebGraphicsBridge createSharedBridge]): Added.
        (-[WebGraphicsBridge setFocusRingStyle:radius:color:]): Added.
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebFrameView.m: Create a WebGraphicsBridge
        when creating a WebFrameView.

=== Safari-112 ===

2003-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3467632 - Leak of plugin info visiting http://www.ebay.com
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage dealloc]): Release lastModifiedDate.

2003-10-29  Chris Blumenberg  <cblu@apple.com>

        WebKit part of fix for:
        <rdar://problem/3467744>: Photoshop files (.psd) don't show up in Open dialog in Safari, but can be viewed
        <rdar://problem/3109132>: Can't open movie file via open panel even though it can be dropped in browser window

        Reviewed by john.

        * WebView.subproj/WebView.m:
        (+[WebView _supportedMIMETypes]): new
        (+[WebView _supportedFileExtensions]): new
        * WebView.subproj/WebViewPrivate.h:

2003-10-29  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3438716>: jpg and gif images copied from Safari and placed in mail are sent as tiff

        Reviewed by john.

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeFileContents:withFilename:]): new
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragImage:originalData:rect:URL:title:event:]): now takes originalData and calls _web_fileContents:withFilename:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate copyImageToClipboard:]): call _web_writeFileContents:withFilename:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]): call renamed _web_dragImage and [WebView _cachedResponseForURL:]
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): call [WebView _cachedResponseForURL:]
        * WebView.subproj/WebImageView.m:
        (-[WebImageView writeImageToPasteboard:]): call _web_writeFileContents:withFilename:
        (-[WebImageView mouseDragged:]): call renamed _web_dragImage
        * WebView.subproj/WebView.m:
        (-[WebView _cachedResponseForURL:]): new
        * WebView.subproj/WebViewPrivate.h:

2003-10-28  John Sullivan  <sullivan@apple.com>

        - fixed <rdar://problem/3466082>: 7B85/111: Crash viewing web page ([WebView setNextKeyView:])

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView dealloc]):
        set _private to nil after releasing, because [super dealloc] can dispatch to it
        (-[WebView mainFrame]):
        fixed spelling error in comment

2003-10-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3465383>: REGRESSION: Text field progress bar goes to 100% after error or stop
        Reviewed by john.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _isLoadComplete]): call _progressCompleted after we deliver the didFailLoadWithError or didFinishLoadForFrame message as we do in other places. This allows to be aware of the error (if there is one), when they get the WebViewProgressFi


nishedNotification notification.

2003-10-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3083264 - frame names changed by JavaScript are not reflected in WebFrame at the WebKit level

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge didSetName:]): Tell the WebFrame about its new name.

2003-10-28  John Sullivan  <sullivan@apple.com>

        - fixed 3465613 -- REGRESSION (111): Crash creating nib that 
        contains WebView

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView mainFrame]):
        check for nil _private before dereferencing.

2003-10-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3465591>: Security: Netscape plug-ins can execute JavaScript in other frames

        Reviewed by mjs.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]): renamed, no need to pass the target frame since the target is either the plug-in itself or the frame that contains the plug-in
        (-[WebBaseNetscapePluginView loadPluginRequest:]): call renamed evaluateJavaScriptPluginRequest
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): if this is a JS request that is targeted at a frame, return NPERR_INVALID_PARAM if the frame is not the frame that contains the plugin

2003-10-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3437959>: javascript: URLs don't work from Java (and other Cocoa plugins, if any)

        Reviewed by mjs.

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showURL:inFrame:]): support JS requests targeted only to the plug-in's frame.

2003-10-27  John Sullivan  <sullivan@apple.com>

        - fixed 3441258 -- hysteresis to start dragging a link is too small; too easy to start drag

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _handleMouseDragged:]):
        Split DragHysteresis into two values, one for links and one for images. Make
        the link one much larger than the image one (since dragging an image doesn't
        occur accidentally in the ways that dragging a link does).

2003-10-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3462523>: Safari Sometimes Destroys Applets When Going "Back"

        Reviewed by darin.

        * History.subproj/WebHistoryItem.m:
        (+[WebHistoryItem _destroyAllPluginsInPendingPageCaches]): Don't destroy plug-ins that are currently being viewed.

2003-10-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3463144>: assertion failure when viewing jpeg with SoundPix installed

        Reviewed by john.

        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]): don't allow image types to override types that are already registered as we do in [WebFrameView _viewTypesAllowImageTypeOmission:]

2003-10-24  Chris Blumenberg  <cblu@apple.com>

        Fixed:
        <rdar://problem/3462977>: ER: Nice if images dragged from web pages didn't redownload
        <rdar://problem/3031582>: Dragging an image to the desktop doesn't leave the file where I dropped it
        <rdar://problem/3061371>: "CFURLGetFSRef failed" log when dragging image to Finder

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): attempt to fetch the image data from the cache, if that works, write out the file

2003-10-26  Darin Adler  <darin@apple.com>

        * WebKitPrefix.h: Add a definition of NULL here so we get the stricter type checking
        even on pre-Merlot systems.

=== Safari-111 ===

2003-10-24  Richard Williamson   <rjw@apple.com>

        Fixed 3425358.  Don't try to create page cache for pages that
        have a nil view().

        Reviewed by Hyatt.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _createPageCacheForItem:]):
        (-[WebFrame _setState:]):

2003-10-24  Chris Blumenberg  <cblu@apple.com>
        Fixed: <rdar://problem/3424039>: standalone plug-in content occasionaly redirects to blank page

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): don't honor JS requests from standalone plug-ins to workaround 3462628 which is a deeper issue.

2003-10-24  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3462256>: REGRESSION: Plain text is downloaded

        Reviewed by john.

        * WebView.subproj/WebView.m:
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:]): use _web_objectForMIMEType when getting an object for a MIME. Removed unnecessary code that checked for the document classes after loading the plug-in DB since it is not an optimization because


 the plug-in DB calls _viewTypesAllowImageTypeOmission:NO.

2003-10-23  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3364036>: ER: Allow plug-ins to override built-in types such as image/jpeg

        Reviewed by john.

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase refresh]): Allow plug-ins to override built-in types except for our core HTML types and don't allow the QT plug-in to override any types because it handles many types that we already handle
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:): instead of asserting, handle the case where we ask a plug-in to map from an extension to a MIME type, but nil is returned 
        (-[WebBridge frameRequiredForMIMEType:URL:]): no need to start up the plug-in DB because this is now handled by [WebView _viewClass:andRepresentationClass:forMIMEType:]
        * WebView.subproj/WebDataSource.m:
        (+[WebDataSource _representationClassForMIMEType:]): call [WebView _viewClass:andRepresentationClass:forMIMEType:]
        (-[WebDataSource _makeRepresentation]): call _representationClassForMIMEType
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _makeDocumentViewForDataSource:]): tweak
        (+[WebFrameView _viewClassForMIMEType:]): call [WebView _viewClass:andRepresentationClass:forMIMEType:]
        * WebView.subproj/WebView.m:
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:]): new, central place for mapping from a MIME to the document classes. We now load the plug-in DB when a non-HTML MIME type is encountered instead of loading the plug-in DB when the class for the 


MIME type is not found. This is required to fully fix 3364036.
        (+[WebView canShowMIMEType:]): call [WebView _viewClass:andRepresentationClass:forMIMEType:]
        (+[WebView registerViewClass:representationClass:forMIMEType:]): tweak
        * WebView.subproj/WebViewPrivate.h:

2003-10-23  John Sullivan  <sullivan@apple.com>

        - fixed 3459272 -- Can't set up keyboard loop inside a 
        WebDocumentView without subclassing views
        - fixed 3179062 -- can't tab back to address bar from image-only 
        page
        - fixed 3252009 -- tabbing from address bar to content area does 
        not work with WebTextView
        - fixed 3461398 -- Can't click on a standalone image to focus it 
        (for later keyboard scrolling)

        I redid the way WebView and WebFrameView splice themselves into
        the keyview loop in a way very similar to what NSScrollView and
        NSClipView do. This means that contained and sibling views won't 
        need to do anything special to put themselves into the key loop.

        Reviewed by Chris.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _scrollView]):
        check for nil pointer before dereferencing; this can happen
        during [super dealloc]'s keyview-loop-fixup code
        (-[WebFrameView initWithFrame:]):
        wire our nextKeyView link to the contained scrollview (so
        previousKeyView will work correctly from scrollview)
        (-[WebFrameView acceptsFirstResponder]):
        return what the contained scrollview says
        (-[WebFrameView becomeFirstResponder]):
        in previous direction, use previousValidKeyView (follows normal
        NSView keyview links); in forward direction, hand first
        responder-ness to contained scrollview (which will in turn hand
        it down to clipview, which will in turn hand it down to document)
        (-[WebFrameView setNextKeyView:]):
        wire up scrollview instead of self, if it exists

        * WebView.subproj/WebImageView.m:
        (-[WebImageView acceptsFirstResponder]):
        overridden to return YES; this fixes 3461398 and puts the finishing
        touches on 3179062

        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        wire our nextKeyView link to the contained webframeview (so
        previousKeyView will work correctly from webframeview). Also,
        if there's a nextKeyView already set (in a nib, e.g.), wire
        it to our contained webframeview.
        (-[WebView acceptsFirstResponder]):
        return what the contained webframeview says
        (-[WebView becomeFirstResponder]):
        in previous direction, use previousValidKeyView (follows normal
        NSView keyview links); in forward direction, hand first
        responder-ness to contained webframeview (which will in turn hand
        it down to scrollview, etc.)
        (-[WebView setNextKeyView:]):
        wire up webframeview instead of self, if it exists

2003-10-22  Richard Williamson   <rjw@apple.com>

        Match WebCore's notion of distributing linegap between top and bottom of 
        line.  WebKit used to put it all at the bottom of the line.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):
        (-[WebTextRenderer _CG_drawHighlightForRun:style:atPoint:]):

2003-10-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

        Finished exception blocking changes, so now I can finally say:

        - fixed 3137084 - Many non-reproducible crashers in ContextImp::mark / ScopeChain::mark
        - fixed 3308848 - nil-deref in KHTMLView::topLevelWidget
        - fixed 3311511 - nil deref inside KJS::Screen
        - fixed 3397422 - 7B51: Safari crashed in KJS::ObjectImp::mark()
        - fixed 3408373 - Panther7B58 : Safari Crashed in KJS::ObjectImp::mark
        - fixed 3409307 - 7B55: safari crashed in KJS::Interpreter::globalExec() (idle, nothing particular going on)
        - fixed 3410160 - 7B60 Safari crashed in KHTMLPart::parentPart called from JS while in the background
        - fixed 3413224 - unrepro crash in KJS::Window::mark
        - fixed 3419940 - unrepro crash in KJS::Collector::allocate trying to access http://www.lindyinthepalms.com
        - fixed 3420123 - Panther7B66: Safari crashed while going to http://www.tangents.co.uk/index2.html
        - fixed 3423225 - Safari crash in vtable for KWQMapImpl (vtable for KWQMapImpl + 8).
        - fixed 3437190 - nil-deref on quit in calling marked() from ScopeChain::mark()

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer ascent]):
        (-[WebTextRenderer descent]):
        (-[WebTextRenderer lineSpacing]):
        (-[WebTextRenderer xHeight]):
        (-[WebTextRenderer drawLineForCharacters:yOffset:withWidth:withColor:]):
        (-[WebTextRenderer _smallCapsRenderer]):
        (-[WebTextRenderer _initializeATSUStyle]):
        (-[WebTextRenderer _createATSUTextLayoutForRun:]):
        (-[WebTextRenderer _trapezoidForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_drawRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):

2003-10-22  Richard Williamson   <rjw@apple.com>

        Fixed 3458715.  Reset to 0, not .1 when done.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView _resetProgress]):
        (-[WebView _progressStarted:]):

2003-10-21  Richard Williamson   <rjw@apple.com>

        Don't use small caps font for characters that don't have an
        uppercase counterpart (i.e. punctuation marks).

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForNextCharacter):

2003-10-21  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3176170>: OBJECT tag with no or empty TYPE is mishandled
        Reviewed by rjw.

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForExtension:]): If no plug-in is found from the extension, attempt to map from the extension to a MIME type using our mappings and find a plug-in from the MIME type. This improves our chances of finding a plug-in when n


o MIME type is specified.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:]): If the passed MIME is empty, nil it out so that clients only need to check for nil. This avoids error sheets complaining about "" MIME types.
        (-[WebBridge frameRequiredForMIMEType:URL:]): Renamed to include URL. If no MIME is specified, only create a plug-in view if we can map from the extension.

2003-10-20  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3457627>: empty Flash plugin at tvguide.com
        Fixed issues with plug-in stream error handling.
        Improved plug-in logging.

        Reviewed by kocienda.

        * Misc.subproj/WebKitLogging.h: added WebKitLogPluginEvents
        * Misc.subproj/WebKitLogging.m:
        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]): improved logging
        (-[WebBaseNetscapePluginStream destroyStream]): improved logging
        (-[WebBaseNetscapePluginStream destroyStreamWithFailingReason:]): renamed from cancelWithReason to avoid confusion
        (-[WebBaseNetscapePluginStream receivedError:]): calls destroyStreamWithFailingReason after determining a reason from the NSError
        (-[WebBaseNetscapePluginStream cancelWithReason:]): calls destroyStreamWithFailingReason, this method is overriden by subclasses to cancel the actual load
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): call destroyStreamWithFailingReason, not cancelWithReason because the loaded has already ended here
        (-[WebBaseNetscapePluginStream deliverData]): improved logging
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendActivateEvent:]): use even logging
        (-[WebBaseNetscapePluginView sendUpdateEvent]): ditto
        (-[WebBaseNetscapePluginView becomeFirstResponder]): ditto
        (-[WebBaseNetscapePluginView resignFirstResponder]): ditto
        (-[WebBaseNetscapePluginView mouseDown:]): ditto
        (-[WebBaseNetscapePluginView mouseUp:]): ditto
        (-[WebBaseNetscapePluginView mouseEntered:]): ditto
        (-[WebBaseNetscapePluginView mouseExited:]): ditto
        (TSMEventHandler): ditto
        (-[WebBaseNetscapePluginView destroyStream:reason:]): call cancelWithReason so the reason is passed back to the plug-in
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]): tweak
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]): call receivedError
        (-[WebNetscapePluginRepresentation cancelWithReason:]): override, cancel the load, call super
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream cancelWithReason:]): override, cancel the load, call super
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): be sure to call the stream before calling super because the stream can be cleared out when calling super 
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveData:lengthReceived:]): ditto
        (-[WebNetscapePluginConnectionDelegate connectionDidFinishLoading:]): ditto
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]): ditto

2003-10-20  Richard Williamson   <rjw@apple.com>

        Conditionally excluded fix for 3446192.  We'll enable the fix once 3446669
        has been fixed.  This patch switches to the new UTI typing API for pasteboard types.
 
        Reviewed by Ken.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard initialize]):

2003-10-20  Richard Williamson   <rjw@apple.com>

        Fixed 3456103.  Don't assert, just check for inappropriate state.
        Reviewed by Hyatt

        Add a debug menu item to always use ATSU text drawing.  This will be helpful
        to the ATSU folks in performance tuning there API.  Right now I see approx.
        2X slowdown using ATSU.

        Also did some shuffling around of inline related stuff.

              Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (isControlCharacter):
        (isAlternateSpace):
        (isSpace):
        (getUncachedWidth):
        (widthFromMap):
        (widthForGlyph):
        (+[WebTextRenderer _setAlwaysUseATSU:]):
        (glyphForCharacter):
        (glyphForUnicodeCharacter):
        (shouldUseATSU):
        * WebView.subproj/WebView.m:
        (+[WebView _setAlwaysUseATSU:]):
        (-[WebView _progressCompleted:]):
        * WebView.subproj/WebViewPrivate.h:

2003-10-19  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3442218>: crash due to infinite recursion trying to load standalone plug-in content

        Reviewed by darin.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame stopLoading]): manage the isStoppingLoad ivar, return if isStoppingLoad is YES
        * WebView.subproj/WebFramePrivate.h: added the isStoppingLoad ivar

2003-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Dave and Ken.

        - fixed 3457066 -- REGRESSION (91-92): command-left-arrow causes a scroll to the left before going back

        * WebView.subproj/WebFrameView.m: (-[WebFrameView keyDown:]): Add an else so that we don't fall into the
        scrolling code when the command key is down for right and left arrow.

2003-10-18  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3229530>: Dragging standalone image to desktop should save it, not re-download it

        Reviewed by darin.

        * English.lproj/Localizable.strings:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDocumentPrivate.h: Added.
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation dealloc]): release new filename and data ivars
        (-[WebImageRepresentation doneLoading]): return YES if data is non-nil
        (-[WebImageRepresentation setDataSource:]): store the filename
        (-[WebImageRepresentation receivedError:withDataSource:]): store the data
        (-[WebImageRepresentation finishedLoadingWithDataSource:]): store the data
        (-[WebImageRepresentation data]): new
        (-[WebImageRepresentation filename]): new
        * WebView.subproj/WebImageView.m:
        (-[WebImageView namesOfPromisedFilesDroppedAtDestination:]): just save the image, don't download it
        (-[WebImageView image]): new

2003-10-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3456176>: Assertion failure when loading atomfilms.com

        Reviewed by kocienda.

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveData:lengthReceived:]): call super before calling plug-in code as we do in other callbacks
        (-[WebNetscapePluginConnectionDelegate connectionDidFinishLoading:]): ditto
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]): ditto

2003-10-16  Richard Williamson   <rjw@apple.com>

        Fixed 3455306.  Ensure that progress is correctly ended when a load is interupted (i.e. becomes a download).

        Reviewed by mjs.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame _isLoadComplete]):

2003-10-16  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3455176>: Assertion failure when loading non-existant plug-in content

        Reviewed by rjw.

        * Misc.subproj/WebDownload.m: fixed build failure when using new Foundation. We are overriding and calling a renamed method. Continue to override the old method, override the new method and declare their interfaces to avoid build failures. 
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): cancel the load before telling the plug-in about the error so plug-in code doesn't attempt to cancel the load twice

2003-10-16  Richard Williamson   <rjw@apple.com>

        Fixed 3453991.  We weren't setting the array cursor correctly after changing
        capacity.

        Reviewed by John.

        * ChangeLog:
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList setCapacity:]):

=== Safari-110 ===

2003-10-16  Richard Williamson   <rjw@apple.com>

        Tweaked the progress behavior and factored cleanup of progress
        related ivars.

        Reviewed by Hyatt.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _startLoading:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _isLoadComplete]):
        * WebView.subproj/WebView.m:
        (-[WebView _resetProgress]):
        (-[WebView _progressStarted:]):
        (-[WebView _finalProgressComplete]):
        (-[WebView _progressCompleted:]):
        (-[WebView _incrementProgressForConnection:data:]):
        * WebView.subproj/WebViewPrivate.h:

2003-10-14  Richard Williamson   <rjw@apple.com>

        Added logging for estimated progress.
        
        Added a time delta to the throttler, so we now send notifications
        if a delta amount has been exceeded OR a delta between notifications
        has been exceeded.

        Reviewed by Chris.

        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate init]):
        (-[WebView _progressStarted]):
        (-[WebView _progressCompleted]):
        (-[WebView _incrementProgressForConnection:data:]):
        * WebView.subproj/WebViewPrivate.h:

2003-10-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3450449>: assertion failure in WebBridge 
        _retrieveKeyboardUIModeFromPreferences

        Can't assert that the preference always exists and is valid as I
        thought you could. This could just mean that the a preference for full
        keyboard access has not been specified by the user yet. If this is so,
        just return the default keyboard access mode.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:])

2003-10-13  Richard Williamson  <rjw@apple.com>

        Added support for small-caps.

        Reworked drawing and measuring to use new iterators.  Position checking was already using
        the new iterator code, but I was reluctant to switch the mainline drawing and measuring
        code over to the new approach until now.

        Lots of other code cleanup.

        Reviewed by John.

        * Misc.subproj/WebUnicode.m:
        (initializeCharacterShapeIterator):
        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (+[WebTextRenderer shouldBufferTextDrawing]):
        (+[WebTextRenderer initialize]):
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):
        (-[WebTextRenderer dealloc]):
        (-[WebTextRenderer widthForCharacters:length:]):
        (-[WebTextRenderer widthForString:]):
        (-[WebTextRenderer ascent]):
        (-[WebTextRenderer descent]):
        (-[WebTextRenderer lineSpacing]):
        (-[WebTextRenderer xHeight]):
        (-[WebTextRenderer drawRun:style:atPoint:]):
        (-[WebTextRenderer floatWidthForRun:style:widths:]):
        (-[WebTextRenderer drawLineForCharacters:yOffset:withWidth:withColor:]):
        (-[WebTextRenderer drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer pointToOffset:style:position:reversed:]):
        (-[WebTextRenderer _setIsSmallCapsRenderer:]):
        (-[WebTextRenderer _isSmallCapsRenderer]):
        (-[WebTextRenderer _smallCapsRenderer]):
        (-[WebTextRenderer _smallCapsFont]):
        (-[WebTextRenderer _substituteFontForString:families:]):
        (-[WebTextRenderer _substituteFontForCharacters:length:families:]):
        (-[WebTextRenderer _convertCharacters:length:toGlyphs:skipControlCharacters:]):
        (-[WebTextRenderer _convertUnicodeCharacters:length:toGlyphs:]):
        (-[WebTextRenderer _computeWidthForSpace]):
        (-[WebTextRenderer _setupFont]):
        (_drawGlyphs):
        (-[WebTextRenderer _CG_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _CG_drawRun:style:atPoint:]):
        (-[WebTextRenderer _floatWidthForRun:style:widths:fonts:glyphs:startPosition:numGlyphs:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startPosition:numGlyphs:]):
        (-[WebTextRenderer _extendUnicodeCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer _updateGlyphEntryForCharacter:glyphID:font:]):
        (-[WebTextRenderer _extendCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer _extendGlyphToWidthMapToInclude:font:]):
        (-[WebTextRenderer _trapezoidForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_floatWidthForRun:style:]):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_drawRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:]):
        (freeWidthMap):
        (freeGlyphMap):
        (glyphForCharacter):
        (glyphForUnicodeCharacter):
        (mapForSubstituteFont):
        (widthFromMap):
        (widthForGlyph):
        (initializeCharacterWidthIterator):
        (widthAndGlyphForSurrogate):
        (ceilCurrentWidth):
        (widthForNextCharacter):
        (fillStyleWithAttributes):
        (findLengthOfCharacterCluster):
        (shouldUseATSU):
        (isControlCharacter):
        (isAlternateSpace):
        (isSpace):
        (fontContainsString):
        (GetScratchUniCharString):
        (toUpper):
        (isUpper):

2003-10-10  Maciej Stachowiak  <mjs@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Fixed for Private
        change from a while back.

2003-10-10  David Hyatt  <hyatt@apple.com>

        Patch to move widgets during layout instead of waiting until paint time.
        Reviewed by darin

        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _isLoadComplete]):
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebHTMLViewPrivate.h:

2003-10-09  Richard Williamson   <rjw@apple.com>

        Ensure that the autoscroll timer is always stopped if a mouse up event is lost.

        Reviewed by John.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLViewPrivate dealloc]):
        (-[WebHTMLView _startAutoscrollTimer:]):
        (-[WebHTMLView _stopAutoscrollTimer]):
        (-[WebHTMLView _autoscroll]):
        (-[WebHTMLView mouseDown:]):
        * WebView.subproj/WebHTMLViewPrivate.h:

2003-10-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3333897>: should support navigator.plugins.refresh as a way to add a plugin without restarting Safari

        Reviewed by rjw.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView dealloc]): release the plug-in object
        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage initWithPath:]): store the last mod date
        (-[WebBasePluginPackage dealloc]): release the last mod date
        (-[WebBasePluginPackage lastModifiedDate]): new
        (-[WebBasePluginPackage isEqual:]): new
        (-[WebBasePluginPackage hash]): new
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]): convert the NPP_Shutdown proc pointer so that we can use it later
        (-[WebNetscapePluginPackage unload]): added log message
        * Plugins.subproj/WebPluginDatabase.h:
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]): tweak
        (-[WebPluginDatabase plugins]): tweak
        (-[WebPluginDatabase init]): call refresh
        (-[WebPluginDatabase refresh]): new
        (-[WebPluginDatabase loadPluginIfNeededForMIMEType:]): tweak
        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[WebViewFactory refreshPlugins:]): new
        * WebView.subproj/WebControllerSets.h:
        * WebView.subproj/WebControllerSets.m:
        (+[WebViewSets makeWebViewsPerformSelector:]): new
        * WebView.subproj/WebFrame.m:
        (-[WebFrame _reloadForPluginChanges]): new
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView _reloadForPluginChanges]): new
        * WebView.subproj/WebViewPrivate.h:

=== Safari-109 ===

2003-10-03  Richard Williamson <rjw@apple.com>

        Fix part of 3438071.  Creating an instance of WebPreferences using init
        will do the expected thing:  that is, create a new instance!  We used to
        always return standardPreferences.

        Reviewed by Chris.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences init]):
        (+[WebPreferences standardPreferences]):

2003-10-03  David Hyatt  <hyatt@apple.com>

        Fix for numerous regressions caused by an inadvertent renaming of the recursiveDisplay
        override method.
        Reviewed by darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):

2003-10-03  Richard Williamson (Home0  <rjw@apple.com>

        Fixed some edge case issue (control characters after end of word) with our rounding hack.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):

2003-10-03  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin, with much help from Maciej and Hyatt

        Fix for this bug:

        <rdar://problem/3441321>: Form buttons do not respond to key events when focused

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView _firstResponderIsControl]): Added to tell if the focus
        is on a form control.
        (-[WebFrameView keyDown:]): Call new _firstResponderIsControl method to see
        whether space bar key events should propagate. Adding this check keeps us
        from blocking the event here and allows AppKit to handle it.
        * WebView.subproj/WebFrameViewPrivate.h: Add new _firstResponderIsControl 
        method.

2003-10-02  Maciej Stachowiak  <mjs@apple.com>

        Folded Private implementation files into the regular ones as the
        first step towards pulling in our SPI exposure and other code
        cleanup.

        * History.subproj/WebHistory.m:
        * History.subproj/WebHistoryPrivate.m: Removed.
        * Misc.subproj/WebIconDatabasePrivate.h:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m: Removed.
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m: Removed.
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebFrameViewPrivate.m: Removed.
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebHTMLViewPrivate.m: Removed.
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.m: Removed.

2003-10-02  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3440063>: Safari 1.1 won't load new pages after visiting adultswim.com, assertion failure on debug build

        Reviewed by rjw.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): if not data was received for a stream, create the temp file anyway. Plug-ins expect this.

=== Safari-108 ===

2003-10-02  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-10-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3441466 - REGRESSION: http://www.meyerweb.com/eric/css/edge/complexspiral/glassy.html broken on scroll
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setState:]): Don't turn on scroll-blitting here when the page is done...
        (-[WebFrame _transitionToCommitted:]): Instead do it here, when the page is committed.

2003-10-02  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - in preparation for a WebCore whitespace-handling change, made WebTextRenderer draw and measure
          newline characters as if they are spaces (just as we already do with non-breaking spaces)
        - removed some unused stuff from WebTextRenderer
        - other unimportant tweaks (e.g. unsigned int -> unsigned)

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (kFixedOne), (fixed1), (FixToFloat), (FloatToFixed): Removed these. We can use the standard ones
        from <FixMath.h> instead of defining our own.
        (isControlCharacter): Added. Inline function that we can use instead of the macro we had before.
        (isAlternateSpace): Added. Returns YES for newlines and non-breaking spaces.
        (isSpace): Added. Returns YES for real spaces and the two alternate spaces as well.
        (initializeCharacterWidthIterator): Use isSpace.
        (-[WebTextRenderer convertCharacters:length:toGlyphs:skipControlCharacters:]): Use isAlternateSpace
        and isControlCharacter.
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        Use isControlCharacter, isAlternateSpace, and isSpace. Also fix a small bug where numGlyphs would
        not get set up properly when the run length is 0, and used local variables when possible instead
        of going back at the run structure.
        (-[WebTextRenderer _ATSU_floatWidthForRun:style:]): Use the standard FixedToFloat instead of our
        own FixToFloat.
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:atPoint:]): Ditto.

2003-10-02  David Hyatt  <hyatt@apple.com>

        Work on exposing elements to the Acc API.  This patch gets us to the point where text
        under the mouse is voiced.
        Reviewed by darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView accessibilityAttributeValue:]):
        (-[WebHTMLView accessibilityHitTest:]):

2003-10-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView viewDidMoveToSuperview]):
        skip some work when when we've been removed. This wasn't
        causing any trouble before, but was at least conceptually
        inefficient.

2003-10-01  John Sullivan  <sullivan@apple.com>

        - fixed 3441372: REGRESSION (107+): Plain text document is 
        initially drawn with proportional font

        Reviewed by Hyatt

        * WebView.subproj/WebTextView.m:
        (-[WebTextView setDataSource:]):
        Changed a != to an ==

2003-10-01  Richard Williamson   <rjw@apple.com>

        Fixed 3438441.  If a load is triggered by a onload handling, don't add an entry for it into the b/f or history.  The new Google ads use this technique.

        Reviewed by Ken.

        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:referrer:reload:onLoadEvent:target:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addBackForwardItemClippedAtTarget:]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _isLoadComplete]):
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _itemForRestoringDocState]):

2003-10-01  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebHTMLView _webView]):
        Fixed problem where we'd get a nil WebView and pass crazy values for subframe
        text multipliers.

2003-10-01  David Hyatt  <hyatt@apple.com>

        Fix for 3440804, broken scrollbars in downloads window.  Make Auto be the default
        value in the enum, so that all scrollviews will be automatically initialized to be
        auto.
        Reviewed by cblu

        * WebView.subproj/WebDynamicScrollBarsView.m:

2003-09-30  Richard Williamson   <rjw@apple.com>

        Attempt to find a reasonable font using a simple string matching heuristic if 
        none of the fonts actually specified are found.  In particular we will use
        Geeza Pro if "arabic", "urdu", or "pashto" is contained (case-insensitive) in
        any of the requested font family names.  Geeza Pro is a much better fallback
        font for Arabic (and variant languages) than Helvetica.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamilies:traits:size:]):

2003-09-30  John Sullivan  <sullivan@apple.com>

        - fixed 3045617 -- Make Text Bigger/Smaller doesn't affect non-html documents.
        
        I added an internal protocol inside WebKit to make this work, and implemented
        it for plain text and RTF. I also slightly shuffled the existing code to
        handle this for HTML so that it goes through the new protocol in that case
        also.

        * WebView.subproj/WebDocumentInternal.h: Added.
               New header file, holds definition of 
        _web_WebDocumentTextSizing protocol.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _textSizeMultiplierChanged]):
        if the document view conforms to the new protocol,
        tell it that the multiplier has changed. Also, don't
        tell the bridge here anymore; let WebHTMLView do that.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _updateTextSizeMultiplier]):
        tell the bridge here instead of having WebFrame do so
        (-[WebHTMLView viewDidMoveToSuperview]):
        call _updateTextSizeMultiplier (in case it changed while we were switched out)
        (-[WebHTMLView _web_textSizeMultiplierChanged]):
        call _updateTextSizeMultiplier
        
        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation receivedData:withDataSource:]):
        
        * WebView.subproj/WebTextView.h:
        now implements _web_WebDocumentTextSizing protocol;
        new ivar for holding local copy of text size multiplier;
        new public method appendReceivedData:fromDataSource:
        
        * WebView.subproj/WebTextView.m:
        (-[WebTextView initWithFrame:]):
        set local copy of text size multiplier to 1.0
        (-[WebTextView _textSizeMultiplierFromWebView]):
        new method, asks the webview's opinion of the text size multiplier
        (-[WebTextView setFixedWidthFont]):
        use the text size multiplier when setting font size
        (-[WebTextView _adjustRichTextFontSizeByRatio:]):
        new method, borrowed from Mail and tweaked, that walks through
        the rich text and adjusts the font sizes
        (-[WebTextView _updateTextSizeMultiplier]):
        new method, updates local copy of text size multiplier to
        match webview's opinion
        (-[WebTextView setDataSource:]):
        set the text size multiplier appropriately before setting the
        fixed-width font; this is too early for the RTF case though
        since the fonts are embedded in the data
        (-[WebTextView appendReceivedData:fromDataSource:]):
        new method. Most of this logic was in WebTextRepresentation, but
        it's a little better encapsulated here, plus now it handles the
        text multiplier for RTF.
        (-[WebTextView defaultsChanged:]):
        added comment
        (-[WebTextView _web_textSizeMultiplierChanged]):
        call updateTextSizeMultiplier
        
        * WebView.subproj/WebView.m:
        (-[WebView canMakeTextSmaller]):
        (-[WebView canMakeTextLarger]):
        return NO if the main frame doesn't support the text sizing protocol. This means
        that if the main frame doesn't support it but a subframe does, you can't adjust
        the text size. This seems fine for now since the only case with subframes is
        HTML, where the main frame does support changing text size.
        
        * WebKit.pbproj/project.pbxproj:
        updated for new file

2003-09-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3428262>: Plugin loads for static files, but not PHP scripts

        Reviewed by rjw.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameRequiredForMIMEType:]): load the plug-in DB so this method returns reliable results.

2003-09-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3006869>: show image dimensions in title bar when single image is loaded

        Reviewed by rjw.

        * English.lproj/Localizable.strings:
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation title]): return "foo.jpg 50x50 pixels"

2003-09-30  Richard Williamson   <rjw@apple.com>

        Fixed 3420396.  If a frame targets _top and a URL that contains a fragment (very unusual, it's meaningless for a frameset to contain a named anchor point) the frameset won't be reloaded.  Our normal path is to just scroll to the anchor point.  This is on


ly important because our Help folks oddly depend on the behavior.

        Reviewed by Chris.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):

2003-09-30  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej
        
        Fix for this bug:
        
        <rdar://problem/3439688>: WebKit needs to retrieve full keyboard access preference
        
        * WebCoreSupport.subproj/WebBridge.h: Add two ivars: one to track the keyboard
        UI mode, the other a flag we use to register for notifications.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge dealloc]): Remove the notification observer to keyboard UI mode changes.
        (-[WebBridge _retrieveKeyboardUIModeFromPreferences:]): New method. Accesses the
        preferences to get the current keyboard UI mode.
        (-[WebBridge keyboardUIMode]): Returns the current keyboard UI mode. Registers for
        notifications of keyboard UI mode changes when called the first time.
        
2003-09-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3375281 - Keyboard event handlers not fired if focus not in form field
        - fixed 3242927 - KeyPressed Event in Javascript don't work
        - fixed 3375353 - keyboard event.target not updated when blurring from form items
        - fixed 3183754 - returning false from key press handlers does not prevent typing or form submission

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView keyDown:]): Ask the bridge before passing the event along.
        (-[WebHTMLView keyUp:]): Likewise.
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m: Remove dead code.

2003-09-30  Richard Williamson   <rjw@apple.com>

        Fixed 3422138.  We weren't sending a didChange call for isLoading until the load was complete!  Also [WebView isLoading] wasn't accounting for provisional datasources.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView isLoading]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _didStartProvisionalLoadForFrame:]):
        (-[WebView _didCommitLoadForFrame:]):
        (-[WebView _didFinishLoadForFrame:]):
        (-[WebView _didFailLoadWithError:forFrame:]):
        (-[WebView _didFailProvisionalLoadWithError:forFrame:]):

2003-09-30  David Hyatt  <hyatt@apple.com>

        Improvements to scrolling and layout.  Also fixing 3264346, body overflow should
        apply to document's scrollbars.
        Reviewed by darin

        * WebView.subproj/WebDynamicScrollBarsView.h:
        * WebView.subproj/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView initWithFrame:]):
        (-[WebDynamicScrollBarsView setScrollBarsSuppressed:repaintOnUnsuppress:]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView setAllowsScrolling:]):
        (-[WebDynamicScrollBarsView allowsScrolling]):
        (-[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]):
        (-[WebDynamicScrollBarsView setAllowsVerticalScrolling:]):
        (-[WebDynamicScrollBarsView allowsHorizontalScrolling]):
        (-[WebDynamicScrollBarsView allowsVerticalScrolling]):
        (-[WebDynamicScrollBarsView horizontalScrollingMode]):
        (-[WebDynamicScrollBarsView verticalScrollingMode]):
        (-[WebDynamicScrollBarsView setHorizontalScrollingMode:]):
        (-[WebDynamicScrollBarsView setVerticalScrollingMode:]):
        (-[WebDynamicScrollBarsView setScrollingMode:]):

2003-09-29  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3422739>: Plug-in streams not cancelled when plug-in returns error from NPP_NewStream

        Reviewed by mjs.

        * Plugins.subproj/WebBaseNetscapePluginStream.h: renamed receivedError to cancelWithReason
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]): call cancelWithReason if NPP_NewStream returns an error
        (-[WebBaseNetscapePluginStream cancelWithReason:]): renamed
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): tweak
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]): call renamed cancelWithReason
        (-[WebNetscapePluginRepresentation cancelWithReason:]): new override, stop load then call super
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream cancelWithReason:]): new override, stop load then call super
        (-[WebNetscapePluginStream stop]): call cancelWithReason
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): call renamed cancelWithReason
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]): call renamed cancelWithReason

2003-09-25  Maciej Stachowiak  <mjs@apple.com>

        Roll out build system change since it did not actually work. :-(
        * WebKit.pbproj/project.pbxproj:

2003-09-25  David Hyatt  <hyatt@apple.com>

        Change layout so that it is called from the private _recursive functions instead of
        inside drawRect.
        Reviewed by kocienda

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:adjustingViewSize:]):
        (-[WebHTMLView drawRect:]):
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:testDirtyRect:]):
        (-[WebHTMLView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        (-[WebHTMLView _web_layoutIfNeededRecursive:testDirtyRect:]):
        (-[NSView _web_setPrintingModeRecursive]):
        (-[NSView _web_clearPrintingModeRecursive]):
        (-[NSView _web_layoutIfNeededRecursive:testDirtyRect:]):

2003-09-25  Richard Williamson   <rjw@apple.com>

        Fixed 3433802.  Written by Ed.  Carbon WebView doesn't detach native view when removed.

        Reviewed by Richard.

        * Carbon.subproj/HIWebView.m:
        (OwningWindowChanged):

2003-09-25  Richard Williamson   <rjw@apple.com>

        Fixed 3433488.  Written by Ed.  WebKit doesn't sync window visibility when new webview added to visible window.

        Reviewed by Richard.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:disableOrdering:carbon:]):

2003-09-25  Richard Williamson   <rjw@apple.com>

        Fixed 3434854.  Written by Ed.  Correctly handle window modality in carbon.

        Reviewed by Richard.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:disableOrdering:carbon:]):

2003-09-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Updated setup for engineering builds. Don't embed the framework
        into Safari or hack the install name. However, do copy WebCore and
        JavaScriptCore into the proper sub-umbrella locations.
        * WebKit.pbproj/project.pbxproj:
        * embed-frameworks.sh: Added.

=== Safari-107 ===

2003-09-25  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:
        
        <rdar://problem/3341222>: WebView doesn't follow AppKit default nextKeyView pattern
        
        * WebCoreSupport.subproj/WebBridge.h: Added a variable to guard against recursion
        in -[WebBridge inNextKeyViewOutsideWebFrameViews].
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge inNextKeyViewOutsideWebFrameViews]): Accessor for recursion guard.
        (-[WebBridge nextKeyViewOutsideWebFrameViews]): Do not ask webView for its
        next key view, but rather, ask it for the next key view of the last view in
        its key view loop. This is what will get us to the next view outside of the
        webView.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView nextKeyView]): Ask AppKit, rather than khtml, for the next key
        key view if -[WebBridge inNextKeyViewOutsideWebFrameViews] returns YES. Doing
        so gives us the correct answer as calculated by AppKit, and makes HTML views
        behave like other views. This check also heads off an infinite recursion 
        through -[WebBridge nextKeyViewOutsideWebFrameViews].

        Also did some cleanup of some code that was marked for removal "some day".
        That "some day" is today.
        
2003-09-25  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3176853 -- can't attach files that have no extensions with Yahoo mail (bad Content-Type headers)

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge MIMETypeForPath:]):
        Return @"application/octet-stream" rather than nil or empty string when the type is not known.

2003-09-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        Added one more call to _stopAutoscrollTimer for when drags begin.

2003-09-24  Richard Williamson   <rjw@apple.com>

        Fixed 3420736.  Clear renderer caches when get an ATS font changed notification.  This fix may be moot depending on progress toward fixing 2695906.  Also 3428451 needs to should be resolved.

        Also added code to get and log entry point for the function used to get a Java class from plugins.  That class is used for LiveConnect support.

        Reviewed by John.

        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * Plugins.subproj/WebNetscapePluginPackage.h:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins.subproj/npapi.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (FillStyleWithAttributes):
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory clearCaches]):
        (fontsChanged):
        (+[WebTextRendererFactory createSharedFactory]):
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):
        (-[WebTextRendererFactory cachedFontFromFamily:traits:size:]):

2003-09-23  Darin Adler  <darin@apple.com>

        Reviewed by John and Richard.

        - fixed 3127833 -- autoscroll only works when mouse is moving

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView viewDidMoveToWindow]): Stop the auto-scroll timer. This covers
        the case where a view is removed from the view hierarchy while the mouse is down.
        (-[WebHTMLView mouseDown:]): Start the auto-scroll timer.
        (-[WebHTMLView mouseUp:]): Stop the auto-scroll timer.
        * WebView.subproj/WebHTMLViewPrivate.h: Add an auto-scroll timer, and methods
        to start and stop it.
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _startAutoscrollTimer]): Create and schedule a timer. It uses the
        same 1/10 second interval that NSTextView uses for its scrolling timer.
        (-[WebHTMLView _stopAutoscrollTimer]): Invalidate and release the timer.
        (-[WebHTMLView _autoscroll]): Check for a mouse up event in the queue; if one is
        there, then no autoscrlling. But if not, then create a fake mouse dragged event
        and dispatch it; that will lead to autoscrolling.

2003-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - worked around 3429631 -- window stops getting mouse moved events after first tooltip appears

        * WebView.subproj/WebHTMLViewPrivate.m: (-[NSToolTipPanel setAcceptsMouseMovedEvents:]):
        Do nothing, preventing the real setAcceptsMouseMovedEvents: (in class NSWindow) from being called.

2003-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed 3431033 -- crash in -[NSToolTipManager _shouldInstallToolTip:]

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]):
        Override this alternate version of addTrackingRect. If I don't do this, we might
        create a real tracking rect, which we would then never remove.
        (-[WebHTMLView removeTrackingRect:]): Added assertions.

2003-09-22  Darin Adler  <darin@apple.com>

        * WebKit.pbproj/project.pbxproj: Rename Mixed build style to OptimizedWithSymbols.

2003-09-21  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebHTMLView removeTrackingRect:]): Remove bogus assert.

2003-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed 3106411 -- show title attribute for page elements in tooltip on mouseover (important for PeopleSoft)

        * WebView.subproj/WebHTMLViewPrivate.h: Added fields needed for tool tip implementation.
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLViewPrivate dealloc]): Release the tool tip string.
        (-[WebHTMLView addTrackingRect:owner:userData:assumeInside:]): Override the default NSView
        tracking rectangle implementation so we can trick the tool tip manager into trusting us about
        when you leave and enter the rectangle for each element.
        (-[WebHTMLView removeTrackingRect:]): The other half of the above stuff.
        (-[WebHTMLView _sendToolTipMouseExited]): Added. Makes an event just good enough to fool the tool tip
        manager, and send it on.
        (-[WebHTMLView _sendToolTipMouseEntered]): Ditto.
        (-[WebHTMLView _setToolTip:]): Added. Manages the new and old tool tips in a way that fools the tool
        tip manager into working even though we don't know the rectangles of the tool tips beforehand. The
        advantage of using AppKit tool tips is that they have all sorts of nice little features, like wrapping
        to a nice rectangular shape and fading out when you move away.
        (-[WebHTMLView view:stringForToolTip:point:userData:]): This is how the tool tip manager gets the actual
        tool tip text.
        (-[WebHTMLView _updateMouseoverWithEvent:]): Call _setToolTip method, using the value passed along with the
        WebCoreElementTitleKey in the dictionary.

        - unrelated code cleanup

        * WebView.subproj/WebFramePrivate.h: Don't define WebCorePageCacheStateKey here; instead use
        a definition exported from WebCore.
        * WebView.subproj/WebFramePrivate.m: Ditto.
        * English.lproj/StringsNotToBeLocalized.txt: Update for above changes.

2003-09-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Roll out old fix for 3410980.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge goBackOrForward:]):

2003-09-19  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - do the prep work for the mini controls feature; Dave will finish this

        * WebCoreSupport.subproj/WebFileButton.m:
        (-[WebFileButton isFlipped]): Make this flipped, easier to understand coordinates that way.
        (-[WebFileButton drawRect:]): Update for flipped-ness.
        (-[WebFileButton visualFrame]): Update for flipped-ness.
        (-[WebFileButton setVisualFrame:]): Update for flipped-ness.
        (-[WebFileButton baseline]): Update for flipped-ness.

2003-09-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3410980 - FileMaker: going forward with an empty forward list makes a frame come out blank sometimes

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge backOrForwardItemWithDistance:]): Factored out from goBackOrForward.
        (-[WebBridge canGoBackOrForward:]): Use the new method.
        (-[WebBridge goBackOrForward:]): Likewise.

2003-09-17  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for 3157018 -- Would like option to
        not print backgrounds
        Reviewed by Darin

        * WebView.subproj/WebPreferences.h:
        new accessor methods for new shouldPrintBackgrounds preference
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        set initial value for WebKitShouldPrintBackgroundsPreferenceKey
        to NO
        (-[WebPreferences shouldPrintBackgrounds]):
        new method, read NSUserDefaults value
        (-[WebPreferences setShouldPrintBackgrounds:]):
        new method, write NSUserDefault value

        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _updateWebCoreSettingsFromPreferences:]):
        tell WebCore about value of shouldPrintBackgrounds

        * English.lproj/StringsNotToBeLocalized.txt:
        Updated for these and other recent changes

2003-09-17  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage pathByResolvingSymlinksAndAliasesInPath:]): Pass the
        "no UI" flag, so we don't prompt the user when we're trying to load plug-ins.
        Also use OSStatus rather than OSErr so we don't miss error codes that just
        happen to have zeroes in the low 16 bits.

2003-09-17  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * WebCoreSupport.subproj/WebFileButton.m: (-[WebFileButton setFilename:]):
        Don't call -[NSWorkspace iconForFile:] on a path that does not start with a '/'.
        This can happen if JavaScript or the web page sets the path explicitly, and
        adding this check avoids an unpleasant warning on the console.

=== WebKit-106 ===

2003-09-16  Richard Williamson   <rjw@apple.com>

        Backed out fix to 3412062 to resolve 3424197.

        Many sites use a technique of posting forms the same URL to generate content server side.  The fix to 3412062 broke those sites.

        Reviewed by Darin.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):

=== WebKit-105 ===

=== WebKit-104 ===

2003-09-12  Richard Williamson   <rjw@apple.com>

        Fixed 3420097.  If redirects are cancelled during a pending load don't reset the quickRedirect flag.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge reportClientRedirectCancelled:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _clientRedirectedTo:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        (-[WebFrame _clientRedirectCancelled:]):

=== WebKit-103 ===

2003-09-12  Richard Williamson   <rjw@apple.com>

        Fixed 3412062.  Don't allow pages with the same URL as the current URL to enter b/f or history.

        Reviewed by Maciej.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):

2003-09-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3413463 - QuickTime plug-in content doesn't load in Safari (NPP_Write not called)
        * Plugins.subproj/npapi.h: Fix erroneous function pointer
        declarations that led to an int16/int32 mismatch.

2003-09-12  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3420112>: Reproducible Safari crash in in -[WebBaseNetscapePluginView sendEvent:]

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): temporarily retain self in case the plug-in view is released while sending an event. 
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:targetFrame:]): don't deliver the return value of the JS evaluation if stringByEvaluatingJavaScriptFromString caused the plug-in to stop.

=== WebKit-102 ===

2003-09-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3417486 - after logging off from secure Etrade website, going back returns you to secure page

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:withLoadType:]): Don't request stale data
        for https pages, as this could be a security risk.

2003-09-11  Richard Williamson   <rjw@apple.com>

        Fixed 3406671.  Added a private method for Mail to get selection
        rect.

        Reviewed by Darin Adler.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateTextBackgroundColor]):
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _handleMouseDragged:]):
        (-[WebHTMLView _pluginController]):
        (-[WebHTMLView _selectionRect]):

2003-09-10  Richard Williamson   <rjw@apple.com>

        Fixed 3231031.  Use the normal methodology for displaying each frame of a GIF.  That is,
        just call setNeedsDisplayInRect, rather than drawing directly.  Drawing directly violates
        layering/clipping.

        Reviewed by Dave Hyatt.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer nextFrame:]):

=== Safari-100 ===

2003-09-09  Richard Williamson   <rjw@apple.com>

        Fixed 3414988.  Don't store absolute path to home directory.
        Reviewed by Chris Blumenberg.

        Fixed 3414319.  Send correct WebView back as parameter to webViewShow:
        Review by Darin.

        Fixed 3095029.  Draw a frame's border in WebFrameView, instead of WebHTMLView, and correctly inset the frame's scrollview to account for the border.  Mostly written by Darin.
        Reviewed by Darin (and Richard).

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _createFileDatabase]):
        Store @"~/Library/Icon" instead of absolute path, and always try to tilde expand stored path.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setHasBorder:]):
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView drawRect:]):
        (-[WebFrameView setFrameSize:]):
        * WebView.subproj/WebFrameViewPrivate.h:
        * WebView.subproj/WebFrameViewPrivate.m:
        (-[WebFrameView _isMainFrame]):
        (-[WebFrameView _tile]):
        (-[WebFrameView _drawBorder]):
        (-[WebFrameView _shouldDrawBorder]):
        (-[WebFrameView _setHasBorder:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView drawRect:]):
        Changes to correct draw border in WebFrameView instead of WebHTMLView.

        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _openNewWindowWithRequest:]):
        Send correct parameter (returned from webView:createWebViewWithRequest:), rather than self, to webViewShow:.

2003-09-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3412380>: REGRESSION (85-98): www.minoltan.com is decoded incorrectly on Japanese system

        The default encoding that Safari uses is latin1 regardless of the current system encoding. This is how it's always been. The problem is that the UI is displaying shift JIS for the default text encoding instead of latin1. This is happening because WebKit 


is using "latin1" instead of "ISO-8859-1" for the default text encoding name. "ISO-8859-1" is the IANA character set name for latin1 and this is what the  WebKitDefaultTextEncodingNamePreferenceKey preference expects. This ends up confusing Safari, so Saf


ari just ends up displaying the first item in the pop-up menu which is shift JIS.

        Reviewed by rjw.

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]): The WebKitDefaultTextEncodingNamePreferenceKey should be "ISO-8859-1" not "latin1" since "ISO-8859-1" is the IANA character set name for latin1.

=== Safari-99 ===

2003-09-08  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 3412726 -- some HTML messages in Mail lose a line at page breaks when printed (multipart/alternative)

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        Go into printing mode when asked to adjust page height, if not already in it.
        We already have code in drawRect that does this when actually printing, but it's
        also important to lay out the same way when deciding where to break pages, otherwise
        the difference between printer and screen fonts can lead to page breaks that split a line
        of text across two pages, and that can lead to missing lines of text as well.

2003-09-07  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3410939 -- disabling Geneva and Helvetica (by removing them, or by using Font Book) makes Safari crash

        * WebCoreSupport.subproj/WebTextRendererFactory.m: (-[WebTextRendererFactory fallbackFontWithTraits:size:]):
        Fall back on Lucida Grande (plain, not bothering with traits) if Helvetica is not present.

        * English.lproj/StringsNotToBeLocalized.txt: Update for this and other recent changes.

2003-09-07  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3406660 -- screen fonts are not being used for substitute fonts (Japanese text, Roman font)

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer substituteFontForString:families:]): Get a printer or screen font,
        based on the renderer's mode. The old code didn't do anything explicit.
        (-[WebTextRenderer _setupFont]): Remove ignored parameter for clarity.
        (-[WebTextRenderer initWithFont:usingPrinterFont:]): Fixed code paths that would not
        explicitly get a printer or screen font, and code paths that would get data from the
        original "before mapping to printer or screen font" NSFont object.

=== Safari-98 ===

2003-09-05  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Incorporate releaseGState fix that Darin developed for 
        textareas and list boxes in WebCore. It turns out that 
        we this workaround in WebClipView as well to get proper 
        drawing of subframes.

        In addition, removed some tests that which performed 
        runtime checks for code in AppKit. AppKit will have
        the checked-for code in all versions that will be used
        with the version of WebKit.

        * WebView.subproj/WebClipView.m:
        (-[WebClipView initWithFrame:])
        (-[WebClipView resetAdditionalClip])
        (-[WebClipView setAdditionalClip:])

2003-09-04  John Sullivan  <sullivan@apple.com>

        - fixed 3409011 -- the graphics views palette does not open

        Reviewed by Maciej

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences _removeReferenceForIdentifier:]):
        special-case nil, which is a magic initial identifier already
        special-cased in the other mutator

2003-09-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3406140 - REGRESSION (7B52-7B55): time spent in NSFont makes Safari 50% slower in Five Apps test
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamily:traits:size:]): Make font
        using the font name we found, not the one we were looking
        for. Since the compare is case-insensitive, it makes a
        difference. Also, don't make the font twice.

2003-09-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3316704>: Shockwave: getnetText steam is not functioning correctly

        Reviewed by mjs.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]): if the content length is unknown, use 0 instead of -1

2003-09-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3286922>: Shockwave: Using HTTP to stream .mp3 or .swa files fails at ~50%

        Reviewed by mjs.

        * Plugins.subproj/WebBaseNetscapePluginStream.h: new deliveryData and reason ivars
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream dealloc]): release deliveryData ivar
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]): set new reason ivar
        (-[WebBaseNetscapePluginStream destroyStream]): new, calls NPP_StreamAsFile, NPP_DestroyStream and NPP_URLNotify
        (-[WebBaseNetscapePluginStream destroyStreamWithReason:]): set the reason, call destroyStream
        (-[WebBaseNetscapePluginStream receivedError:]): set deliveryData length to 0 so no more data is streamed, call destroyStreamWithReason
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): don't call NPP_StreamAsFile because this has to be called right before NPP_DestroyStream in destroyStream
        (-[WebBaseNetscapePluginStream deliverData]): new, call NPP_WriteReady and NPP_Write and properly obey their returned values
        (-[WebBaseNetscapePluginStream receivedData:]): call deliverData
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream stop]): call receivedError here
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]): don't call receivedError here because after the load is complete, stream is set to nil and receivedError can be called after the completed load

2003-09-04  Chris Blumenberg  <cblu@apple.com>

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView postURL:target:len:buf:file:]): Fixed typo in newly added comment.

2003-09-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3407328>: request headers at the start of the file passed to NPN_PostURL don't work for Acrobat plug-in?

        Reviewed by john.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView postURL:target:len:buf:file:]): As documented, allow headers to be specified via NPP_PostURL when using a file.

=== Safari-97 ===

2003-09-03  John Sullivan  <sullivan@apple.com>

        - fixed 3406411 -- infoseek.co.jp: many console errors about 
        attempting to set non-screen font (HiraMinPro-W3)

        Reviewed by Ken

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (_drawGlyphs):
        use ERROR instead of NSLog for the printing-font-used-on-screen
        case, so it doesn't flood the world's console logs. We need to
        investigate why this is happening also, but that can probably
        be post-Panther.

2003-09-01  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for 3402489 -- REGRESSION (7B48-7B55): Some         printed web pages are too small (width is half a page)

        This was a regression caused by the fix for 3378810.

        Reviewed by Maciej

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:adjustingViewSize:]):
        now takes adjustViewSize flag, and passes it down to
        one of bridge's forceLayout calls.
        (-[WebHTMLView layout]):
        pass NO for adjustViewSize flag in this case
        (-[WebHTMLView _setPrinting:pageWidth:adjustViewSize:]):
        pass adjustViewSize flag down to layoutToPageWidth instead
        of using it directly here; this is the wrong level to use
        it directly since the bridge is no longer set up for
        printing after the layoutToPageWidth call completes.

2003-08-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3401709 - [WebView searchFor:] with wrap:NO hangs if the search fails
        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]): Fix for
        wrap:NO case as suggested by Darin.

=== Safari-96 ===

2003-08-29  Richard Williamson   <rjw@apple.com>

        Fixed 3401334.  Use IB document key when checking for reference removal on instances of WebPreferences.

        Also removed _userDefaultsKeysForIB, no longer needed by IB.

        Reviewed by John.

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences _removeReferenceForIdentifier:]):
        (-[WebPreferences _postPreferencesChangesNotification]):
        * WebView.subproj/WebPreferencesPrivate.h:

2003-08-29  Richard Williamson   <rjw@apple.com>

        Fixed 3400807.  Don't release state associated with the current b/f item.  We shouldn't normally have page cache state associated with the current item (3401376).  This fix guarantees that we won't prematurely release the page cache state for the current


 item.

        Reviewed byJohn Sullivan.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList _clearPageCache]):

2003-08-28  Richard Williamson   <rjw@apple.com>

        Fixed 3399736.  Fixed several problems with WebView/WebPreferences
        interaction.

        Reviewed by Eric Seymour.

        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        Added debug logging.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (_drawGlyphs): Checkin for 3398229 below.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences initWithCoder:]):
        (-[WebPreferences encodeWithCoder:]):
        (+[WebPreferences standardPreferences]):
        (+[WebPreferences _getInstanceForIdentifier:]):
        (+[WebPreferences _setInstance:forIdentifier:]):
        (+[WebPreferences _concatenateKeyWithIBCreatorID:]):
        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initWithCoder:]):
        (-[WebView encodeWithCoder:]):

2003-08-27  Richard Williamson   <rjw@apple.com>

        Fixed 3398229.  When we request a font from NSFont by name we should use a case specific name.  We do case insensitve comparsion, but once a match is found we should use the actual font name, not the requested name.  Two layout tests are still failing, b


ut I don't think the failures are font related.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):

=== Safari-95 ===

2003-08-27  Richard Williamson   <rjw@apple.com>

        Fixed 3397235.  WebView wasn't archiving useBackForwardList.

        Reviewed by Eric Seymour.

        * WebView.subproj/WebView.m:
        (-[WebView initWithCoder:]):
        (-[WebView encodeWithCoder:]):

2003-08-26  Richard Williamson   <rjw@apple.com>

        Fixed 3385478.  Look for an exact match for font names (using PS names)        before matching on family names.

        Also added logging to help debug now resolved binding problem.

        Reviewed by Maciej.

        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):
        * WebView.subproj/WebView.m:
        (-[WebView addObserver:forKeyPath:options:context:]):
        (-[WebView removeObserver:forKeyPath:]):

2003-08-26  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3310943 -- REGRESSION (Panther): textareas in forms sometimes draw blank (bugreporter)

        There are two fixes here. The more elegant and slightly faster one that requires a new AppKit,
        and the less elegant one that works without AppKit support. By including both we don't have to
        worry about timing of submission of WebKit vs. AppKit but we get the good, elegant fix. Later,
        we can delete the less elegant fix.

        * WebView.subproj/WebClipView.m:
        (+[WebClipView initialize]): Set up a boolean global so we only hav to do the "does AppKit support
        _focusRingVisibleRect" check one time.
        (-[WebClipView resetAdditionalClip]): Only do the renewGState thing if we don't have the
        _focusRingVisibleRect method, but if we do the renewGState thing, do it to self and all descendants
        using _web_renewGStateDeep.
        (-[WebClipView setAdditionalClip:]): Ditto.
        (-[WebClipView visibleRect]): Only limit this based on the additional clip if we don't have the
        _focusRingVisibleRect method.
        (-[WebClipView _focusRingVisibleRect]): Override the new method. Harmless if it's an old AppKit
        that doesn't have the method yet.
        (-[NSView _web_renewGStateDeep]): Implemented this helper method. We can get rid of it once we
        are entirely on the new AppKit.

2003-08-26  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3321247 -- window size box disappears from Help window (caused by WebKit NSView hackery)

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]),
        (-[WebHTMLView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):
        Don't propagate dirty rects at all. This was causing problems because now the AppKit uses
        dirty regions, not dirty rects. In AppKit-722 and newer, _setDrawsDescendants: takes care of this
        for us so we don't have to do anything at all.

2003-08-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3392650 -- REGRESSION?: assertion fails trying Apple-hosted page load test while not on Apple network

        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _isLoadComplete]):
        Stop loading the provisional data source before blowing it away, in case
        there are some callbacks that haven't occurred yet. It's a waste of time to
        try to handle those additional callbacks, and can lead to failed assertions
        since the data source won't be hooked up to any frame any more.

2003-08-25  Richard Williamson   <rjw@apple.com>

        Fix for 3391609.  Our rounding hack wasn't correctly reflected in the selection point
        code.  Piggy-backed on this fix are fixes for selection of letter-spacing, word-spacing
        and justified text.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (initializeCharacterWidthIterator):
        (widthAndGlyphForSurrogate):
        (widthForNextCharacter):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):

2003-08-25  John Sullivan  <sullivan@apple.com>

        - fixed 3391264 -- REGRESSION (Panther): Back/Forward buttons not
         updating immediately after page load

        The buttons are updated in response to window update notifications.
        Jaguar was sending so many extra bogus notifications that it
        masked the fact that we weren't ensuring that these notifications
        were sent at all in the case of non-event-based interesting
        changes that might affect menu items/toolbar items/etc.

        Reviewed by Richard

        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _didStartProvisionalLoadForFrame:]):
        call -[NSApp setWindowsNeedUpdate:YES] so window update notices
        will be sent
        (-[WebView _didCommitLoadForFrame:]):
        ditto
        (-[WebView _didFinishLoadForFrame:]):
        ditto
        (-[WebView _didFailLoadWithError:forFrame:]):
        ditto
        (-[WebView _didFailProvisionalLoadWithError:forFrame:]):
        ditto

2003-08-24  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3382179 -- REGRESSION: many images scroll down while loading (e.g., homepage.mac.com slide show)

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]): While loading, always draw one less line than
        the number NSImage says we have, since that last line is a partial line and draws unwanted white. This
        is not what the bug report complains about, but is a longstanding and very minor issue. Remove the code
        that adjust the Y origin. This is what the bug report is about. That adjustment is incorrect and was
        unknowingly compensating for some kind of NSImage bug that is now fixed.
        (-[WebImageRenderer tileInRect:fromPoint:]): Added an assertion that the WebImageRenderer is flipped.
        The code does assume that it's flipped.

2003-08-22  John Sullivan  <sullivan@apple.com>
        - fixed 3385837 -- REGRESSION: can't paste link from Safari into 
        Keynote (paste at top level, not into text)

        Reviewed by Darin

        The problem was that we were using a single list of pasteboard
        types for both "types we can read" and "types we can write", but
        NSFilenamesPBoardType wasn't being written to, creating a bad
        pasteboard. The fix is to split this list in two. We could do
        this a little more elegantly if we weren't paranoid about 
        last-minute SPI changes breaking compatibility with Sherlock or
        some other internal client.

        * Misc.subproj/WebNSPasteboardExtras.h:
        add new _web_writableDragTypesForURL, commented various methods
        better.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard _web_writableDragTypesForURL]):
        implement _web_writableDragTypesForURL; it's just like
        _web_dragTypesForURL but without the NSFilenamesPBoardType
        (-[NSPasteboard _web_writeURL:andTitle:withOwner:]):
        use _web_writableDragTypesForURL

        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragPromisedImage:rect:URL:title:event:]):
        use _web_writableDragTypesForURL

2003-08-22  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed 3386051 -- REGRESSION: text "too dark" after the page is deactivated and reactivated (bugweb)

        Cached clips were causing us to draw nothing for the top frames of framesets, resulting in darkened
        text because we draw anti-aliased text twice without drawing a background.

        * WebView.subproj/WebClipView.m:
        (-[WebClipView resetAdditionalClip]): Invalidate cached graphics state when changing the visible rect.
        (-[WebClipView setAdditionalClip:]): Ditto.

2003-08-21  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView _setPrinting:pageWidth:adjustViewSize:]):
        Tweak to printing fix: Be sure to call adjustViewSize after applying styles and doing layout.

2003-08-21  Richard Williamson   <rjw@apple.com>

        Fixed 3378810.  Avoid resizing frame from drawRect: when printing.  This will corrupt the graphics context.

        Reviewed by Hyatt.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:]):
        (-[WebHTMLView drawRect:]):
        (-[WebHTMLView _setPrinting:pageWidth:adjustViewSize:]):
        (-[WebHTMLView beginDocument]):
        (-[WebHTMLView endDocument]):

=== Safari-94 ===

2003-08-21  John Sullivan  <sullivan@apple.com>

        - fixed 3387950 -- REGRESSION (85-89): Standalone image in Safari prints much 
        smaller than in Jaguar

        Reviewed by Chris.

        * WebView.subproj/WebImageView.m:
        (-[WebImageView adjustFrameSize]):
        renamed from setFrameSizeUsingImage; now sets the frame size to exactly
        the image size (as it did in Jaguar always) when we're not drawing to
        the screen.
        (-[WebImageView setFrameSize:]):
        updated for name change
        (-[WebImageView layout]):
        ditto
        (-[WebImageView beginDocument]):
        adjust frame size (before printing)
        (-[WebImageView endDocument]):
        adjust frame size (after printing)

2003-08-19  Richard Williamson   <rjw@apple.com>

        Fixed 3383623 (and 3384896).  Remove our unbeknownst work-around for an NSImage bug that incorrectly flipped y coordinate when drawing a partial rect within the image.  This has been fixed in Panther, making our work-around no longer necessary.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer tileInRect:fromPoint:]):
        * WebKit.pbproj/project.pbxproj:

2003-08-18  Richard Williamson  <rjw@apple.com>

        Fixed 3140065.  Bidi neutrals in RTL runs are now handled correctly.  Still have
        problem with bidi neutrals at directional boundaries 3382926.

        Reviewed by Maciej.

        * Misc.subproj/WebUnicode.h:
        * Misc.subproj/WebUnicode.m:
        (shapedString):
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):

2003-08-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3299893 -- oncontextmenu support

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView menuForEvent:]): Call sendContextMenuEvent: on the bridge, and
        don't show a menu if the event is handled over in WebCore.
        (-[WebHTMLView mouseDown:]): Don't send a mouse down event in the case where we
        already sent a context menu event and decided not to put up a real context menu.

2003-08-18  Richard Williamson  <rjw@apple.com>

        Fix build problem from last checkin.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):

2003-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3376522 -- REGRESSION: uncaught exception from bad .ico causes crash (login window at 34sp.com)

        I added exception handling in all the places we load images with NSImage.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _iconsForIconURLString:]): Add exception handler.
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader connectionDidFinishLoading:]): Add exception handler.
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithData:MIMEType:]): Add exception handler.
        (-[WebImageRenderer initWithContentsOfFile:]): Add exception handler.
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]): Add exception handler.

2003-08-15  Richard Williamson  <rjw@apple.com>

        Fixed 3378530.  Ensure that line is always drawn within bounds
        of element.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawLineForCharacters:yOffset:withWidth:withColor:]):

2003-08-15  Richard Williamson  <rjw@apple.com>

        Fixed 3379439.  Remove checks for CG symbols.  No longer needed.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (+[WebTextRendererFactory createSharedFactory]):

=== Safari-93 ===

2003-08-14  Vicki Murley  <vicki@apple.com>

        Reviewed by John. 

        * WebKit.pbproj/project.pbxproj: deleted WebKit.order from the project.

2003-08-14  Vicki Murley  <vicki@apple.com>

        Reviewed by John. 

        * WebKit.order: Removed. We now point to the WebKit order file in /AppleInternal/OrderFiles.
        * WebKit.pbproj/project.pbxproj: set sectorder flag to point to /AppleInternal/OrderFiles/WebKit.order

2003-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 3344259 -- flipped image when copying from Safari in 1000s of colors mode

        The workaround is to turn off the NSImage cache. Andrew says this won't have any
        practical repercussions other than making the bug go away.
        
        Seems to have a side effect of speeding up the cvs-base page load test!

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]): Set mode to NSImageCacheNever.
        (-[WebImageRenderer initWithData:MIMEType:]): Ditto.
        (-[WebImageRenderer initWithContentsOfFile:]): Ditto.
        (-[WebImageRenderer _adjustSizeToPixelDimensions]): Don't set mode to NSImageCacheDefault.

2003-08-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3375042>: Change usages of NSURL absoluteString in WebKit 
        to use improved variants

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem initWithURL:title:]): Use data-as-string.
        (-[WebHistoryItem initWithURL:target:parent:title:]): Use data-as-string.
        (-[WebHistoryItem setURL:]): Use data-as-string.
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate addItem:]): Remove FIX_VISITED ifdef
        (-[WebHistoryPrivate removeItem:]): Ditto
        (-[WebHistoryPrivate containsURL:]): Ditto. Use data-as-string.
        (-[WebHistoryPrivate itemForURL:]): Ditto. Ditto.
        (-[WebHistoryPrivate loadFromURL:error:]): Fix log message to URL.
        (-[WebHistoryPrivate _saveHistoryGuts:URL:error:]): Ditto.
        (-[WebHistoryPrivate saveToURL:error:]): Ditto.
        * History.subproj/WebURLsWithTitles.m:
        (+[WebURLsWithTitles writeURLs:andTitles:toPasteboard:]): Use visible-string.
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader connectionDidFinishLoading:]): Use data-as-string.
        * Misc.subproj/WebKitErrors.m:
        (+[NSError _webKitErrorWithDomain:code:URL:]): Added new convenience that takes
        a URL instead of a URL string.
        (-[NSError _initWithPluginErrorCode:contentURL:pluginPageURL:pluginName:MIMEType:]):
        Added new convenience that takes URLs instead of a URL stringis.
        * Misc.subproj/WebKitErrorsPrivate.h: Declared new conveniences.
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_writeURL:andTitle:withOwner:types:]): Use visible-string.
        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_originalDataAsString]): Added.
        (-[NSURL _webkit_isJavaScriptURL]): Use data-as-string.
        (-[NSURL _webkit_scriptIfJavaScriptURL]): Ditto
        (-[NSURL _webkit_isFTPDirectoryURL]): Ditto
        (-[NSURL _webkit_shouldLoadAsEmptyDocument]): Ditto. Also use _web_isEmpty.
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): Use data-as-string.
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]): Use new error convenience.
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): Ditto.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge requestedURLString]): Use data-as-string.
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]): Use new error convenience.
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate cancelledError]): Ditto.
        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoading]): Ditto.
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _stopLoadingInternal]): Ditto.
        (-[WebDataSource _updateIconDatabaseWithURL:]): Use data-as-string.
        (-[WebDataSource _loadIcon]): Ditto.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem:]): Use data-as-string.
        (-[WebFrame _transitionToCommitted:]): Fix log message to use URL.
        (-[WebFrame _purgePageCache]): Use _web_isEmpty
        (-[WebFrame _setState:]): Fix log message to use URL.
        (-[WebFrame _handleUnimplementablePolicyWithErrorCode:forURL:]): Use new error convenience.
        (-[WebFrame _loadItem:withLoadType:]): Fix log message to use URL.
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): Fix log messages to use URL.
        (-[WebFrame _shouldTreatURLAsSameAsCurrent:]): Use data-as-string.
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _dragImageForLinkElement:]): Use visible-string.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeError]): Use new error convenience.
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences setUserStyleSheetLocation:]): Use data-as-string.
        * WebView.subproj/WebView.m:
        (-[WebView mainFrameURL]): Use data-as-string.
        (-[WebView mainFrameIcon]): Use data-as-string.
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _updateWebCoreSettingsFromPreferences:]): Use data-as-string.

2003-08-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3365242 - non-repro abort in HTMLTokenizer at ajc.com
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _receivedData:]): ref the data source around
        processing the data and afterwards, to avoid crashing if a script
        in this chunk of data made the frame go away.

2003-08-13  Richard Williamson   <rjw@apple.com>

        Fixed 3376077.  Override automaticallyNotifiesObserversForKey: to
        prevent unnecessary additional notifications from being sent.  Also
        added development-only logging (bulk of the change).

        Reviewed by Chris.

        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _didChangeValueForKey:]):
        (-[WebView _willChangeValueForKey:]):
        (-[WebView _progressStarted]):
        (-[WebView _progressCompleted]):
        (-[WebView _incrementProgressForConnection:data:]):
        (+[WebView automaticallyNotifiesObserversForKey:]):
        (-[WebView _willChangeBackForwardKeys]):
        (-[WebView _didChangeBackForwardKeys]):
        (-[WebView _didStartProvisionalLoadForFrame:]):
        (-[WebView _didCommitLoadForFrame:]):
        (-[WebView _didFinishLoadForFrame:]):
        (-[WebView _didFailLoadWithError:forFrame:]):
        (-[WebView _didFailProvisionalLoadWithError:forFrame:]):

2003-08-13  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3347134>: After first successful POST in Flash, Safari does not repeat POST and gives cached reply

        Reviewed by kocienda.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]): call [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]

2003-08-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3366441>: URL strings with UTF-8 characters 
        processed improperly for display by WebKit

        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (isHexDigit): Added
        (hexDigitValue): Added
        (-[NSURL _web_userVisibleString]): Added. Produces a string that
        is suitable for display to a user in the UI.
        (-[NSURL _web_isEmpty]): Convenience to check for an empty URL
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge requestedURLString]): Now calls _web_userVisibleString

2003-08-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3374458>: Choose UTF-8 for encoding when calling 
        CFURLCreateAbsoluteURLWithBytes in WebKit

        Calling CFURLCreateAbsoluteURLWithBytes with ISO Latin 1 string
        encoding results in some issues when trying to decode a URL path in
        preparation for doing file I/O. Instead of doing a redecoding step
        whenever a path is needed to perform I/O, use UTF-8 as the encoding
        right from the start. This will mean that illegal UTF-8 sequences will
        be rejected by CFURLCreateAbsoluteURLWithBytes. However, we can work
        around this by falling back on ISO Latin1 in this case. The end result
        is that existing code throughout the URL loading system can remain
        unchanged and simply call the path method on NSURL as it does now and
        get the right result for its I/O requirements.

        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithData:relativeToURL:])

2003-08-13  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3374487>: URLs with UTF-8 escape sequences can't be accessed         
        when typed in the Safari location bar

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_bestURL]): Call _web_URLWithUserTypedString: to make a
        URL from this type of string.
        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (hexDigit): Added.
        (+[NSURL _web_URLWithUserTypedString:]): Added. Creates a URL from a string
        that is typed in a user, for example, in the Safari location bar.

2003-08-12  John Sullivan  <sullivan@apple.com>

        - fixed 3369505 -- leaks of NSCFTimer after running through the 
        cvs-base test suite

        Reviewed by Richard

        * WebView.subproj/WebFrame.m:
        (-[WebFrame stopLoading]):
        release timer before nil'ing it out

2003-08-12  Ed Voas  <voas@apple.com>

        Reviewed by Richard.

                Make sure to override the standard behavior for ordering windows to do nothing for Carbon stuff.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:]):

2003-08-11  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3163589>: Macromedia Flash 6 cannot take Asian text entry in Safari

        Revidewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView installKeyEventHandler]): new
        (-[WebBaseNetscapePluginView removeKeyEventHandler]): new
        (-[WebBaseNetscapePluginView becomeFirstResponder]): call installKeyEventHandler
        (-[WebBaseNetscapePluginView resignFirstResponder]): call removeKeyEventHandler
        (-[WebBaseNetscapePluginView keyUp:]): call TSMProcessRawKeyEvent so key events go through the machinery and UI that plug-ins expect
        (-[WebBaseNetscapePluginView keyDown:]): call TSMProcessRawKeyEvent so key events go through the machinery and UI that plug-ins expect
        (TSMEventHandler): turn the TSM event into a series of EventRecords and pass them to the plug-in
        (-[WebBaseNetscapePluginView stop]): call removeKeyEventHandler because resignFirstResponder may not get called

2003-08-08  Richard Williamson  <rjw@apple.com>
        Lots of healthy cleanup.  Introduced width and shaping iterators
        to simplify code and remove allocations for large text runs.  Should
        go further and make more use of these in the future (post panther).

        Fixed 3369608.  Crash in -[WebTextRenderer _CG_drawRun:style:atPoint:] at lovepucca.net
        Fixed 3118050.  Crash selecting text at http://www.faqs.org/rfcs/rfc2849.html (SELECTION)
        Fixed 3371115.  Can't correctly select text that contains surrogate pairs

        Reviewed by darin.

        * Misc.subproj/WebUnicode.h:
        * Misc.subproj/WebUnicode.m:
        (prevChar):
        (nextChar):
        (prevLogicalCharJoins):
        (nextLogicalCharJoins):
        (glyphVariantLogical):
        (hasShapeForNextCharacter):
        (shapeForNextCharacter):
        (initializeCharacterShapeIterator):
        (shapedString):
        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (initializeCharacterWidthIterator):
        (widthAndGlyphForSurrogate):
        (widthForNextCharacter):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:]):

        Just formatting changed here
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _dragImageForLinkElement:]):

2003-08-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3368236 -- NSURL exception going back at http://derstandard.at/

        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _createItem:]): Put "about:blank" in
        the back/forward item if there is no URL (which happens because there is no data source
        because the frame has never successfully loaded anything). Perhaps we can do better
        some day, but this avoids all the major bad effects in a safe way.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

=== Safari-92 ===

2003-08-07  Richard Williamson   <rjw@apple.com>

        Fixed 3362939.  Checked flippyness of view and adjust y coord accordingly.

        Reviewed by John.

        * Misc.subproj/WebKitNSStringExtras.m:

2003-08-07  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3330742>: 1.0 Safari fails to send NPP_URLNotify with the error of NPRES_NETWORK_ERR to Flash

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream destroyStreamWithReason:]): call NPP_URLNotify so we cover both the failure and successful cases
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): have destroyStreamWithReason call NPP_URLNotify

2003-08-07  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin
        Fix for this bug:

        <rdar://problem/3368552>: Fix inappropriate use of NSURL creation methods in WebKit

        Change calls to URLWithString: or URLWithString:relativeToURL to
        _web_URLWithDataAsString: and _web_URLWithDataAsString:relativeToURL,
        respectively.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _loadURL:intoChild:]):
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences userStyleSheetLocation]):
        * WebView.subproj/WebView.m:
        (-[WebView takeStringURLFrom:]):
        (-[WebView setMainFrameURL:]):

2003-08-06  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3347114 -- remove vestiges of posing, including init routine, from WebKit

        * WebView.subproj/WebHTMLViewPrivate.m: Removed WebNSTextView, WebNSView, and WebNSWindow,
        removed the code to have them pose as NSTextView, NSView, and NSWindow, and removed excess
        imports that are no longer needed.

2003-08-06  Richard Williamson   <rjw@apple.com>

        Fixed 3365378.  Edge case text run > 1024 hit by JS generated string.  We weren't correctly checking size of string length.  Used /2 instead of *2.

        Reviewed by Vicki (and Dan!).

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _CG_drawRun:style:atPoint:]):

2003-08-06  Richard Williamson   <rjw@apple.com>

        Fixed 3348630.  Pick up about 1% by moving implementation of _unicodeDirection to WebCore and inlining.

        Reviewed by Ken.

        * Misc.subproj/WebUnicode.h:
        * Misc.subproj/WebUnicode.m:
        (_unicodeDirection):
        (_unicodeJoining):
        (_unicodeMirrored):
        (WebKitInitializeUnicode):
        * Misc.subproj/WebUnicodeTables.m:

2003-08-06  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3161102>: Avoid retain cycles by destroying plug-ins in the page cache before dealloc

        Reviewed by rjw.

        * History.subproj/WebHistoryItemPrivate.h: added declaration for [WebBackForwardList _clearPageCache]
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _close]): clear the page cache when we are closing the web view so we call destroy on all the plug-ins on the page cache to break any retain cycles.

2003-08-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3106525>: Results of JavaScript requests are not returned to plug-ins

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setNotifyData:]): new
        (-[WebBaseNetscapePluginStream startStreamWithURL:expectedContentLength:lastModifiedDate:MIMEType:]): renamed from setResponse
        (-[WebBaseNetscapePluginStream startStreamWithResponse:]): new
        (-[WebBaseNetscapePluginStream receivedData:]): tweak
        (-[WebBaseNetscapePluginStream destroyStreamWithReason:]): tweak
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): tweak
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:targetFrame:]): new
        (-[WebBaseNetscapePluginView loadPluginRequest:]): call evaluateJavaScriptPluginRequest::
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): call loadPluginRequest for JS requests
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedData:withDataSource:]): call renamed startStreamWithResponse
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]): call setNotifyData
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): call renamed startStreamWithResponse

2003-08-05  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Plugins in WebKit need to store URLs in the form of "C-style" strings. 
        Create and use a new, improved method to make these strings, and do 
        not traverse through the NSURL absoluteString method, since that can i
        introduce errors.

        * Misc.subproj/WebNSURLExtras.h: Added _web_URLCString method.
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_URLCString]): Added.
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]): Call new _web_URLCString method.
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): Ditto.
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView frameStateChanged:]): Ditto.
        (-[WebBaseNetscapePluginView loadPluginRequest:]): Ditto.

2003-08-05  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3365035>: Modify WebNSURLExtras to call improved NSURL creation API

        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithDataAsString:]): Call through to _web_URLWithDataAsString:relativeToURL:.
        (+[NSURL _web_URLWithDataAsString:relativeToURL:]): Call through to _web_URLWithData:relativeToURL:.
        (+[NSURL _web_URLWithData:]): Ditto.
        (+[NSURL _web_URLWithData:relativeToURL:]): Call CFURLCreateAbsoluteURLWithBytes API in
        CoreFoundation.
        (-[NSURL _web_originalData]): Use CFURLGetBytes API in CoreFoundation. Also make sure
        that a relative URL is resolved against its base.
        (-[NSURL _web_displayableString]): Call _web_originalData to get bytes to use
        to create the string.
        (-[NSURL _web_URLStringLength]): Use CFURLGetBytes API in CoreFoundation.

2003-08-04  Richard Williamson  <rjw@apple.com>

        Fixed 3363011.  Pass b/f related key down events to super if b/f is disabled.

        Reviewed by Chris.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView keyDown:]):


        Fixed 3363345.  Retain static array used by IB to present WebView's bindable keys.

        Review by Maciej

        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _declaredKeys]):

2003-08-04  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fix for this bug:

        <rdar://problem/3363318>: REGRESSION: Plug-in content doesn't show up, animate etc

        WebNetscapePluginConnectionDelegate must implement this method:

        - (void)connection:(NSURLConnection *)con didReceiveData:(NSData *)data lengthReceived:(long long)lengthReceived

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveData:lengthReceived:])

2003-08-04  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3298153 -- get "screen font while printing" error, bad stuff happens after that (Sherlock, Safari)

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView drawRect:]):
        If we find ourselves in drawRect with the wrong printing mode, that usually
        means we're being printed as part of some larger print process, so do the
        layout in printing mode.

2003-08-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3360977>: REGRESSION (7B28-7B29): main webview rejects drop of doc icon from BBEdit

        Reviewed by darin.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard _web_dragTypesForURL]): we handle NSFilenamesPboardType
        * WebKit.pbproj/project.pbxproj:

2003-08-04  Richard Williamson   <rjw@apple.com>

        Fixed 3223989.  Pass key down events to super if scrolling is disabled.

        Reviewed by Chris (Welcome back!).

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView keyDown:]):

2003-08-01  Richard Williamson   <rjw@apple.com>

        Fixed 3095376.  Implemented correct selection behavior for rtl scripts.
        We still use our Arabic and Hebrew layout scheme.

        Fixed 3360487.  Implemented selection of ATSU rendered code.

        Fixed 3360242.        Return nil from _bodyBackgroundColor when no 
        background color specified.  This was requested by Doug D.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _CG_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer drawRun:style:atPoint:]):
        (-[WebTextRenderer _CG_drawRun:style:atPoint:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        (-[WebTextRenderer _ATSU_drawHighlightForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_drawRun:style:atPoint:]):
        (-[WebTextRenderer pointToOffset:style:position:reversed:]):
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):
        (-[WebTextRenderer _CG_pointToOffset:style:position:reversed:]):

2003-08-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3339255 - REGRESSION (73-85): javascript failure at gia.apple.com

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setState:]): When going to provisional state, tell the bridge that
        a provisional load started, so it can cancel any pending redirects.

=== Safari-91 ===

2003-07-31  Richard Williamson   <rjw@apple.com>

        Make sure width is initialized for monospace optimizations.
        Reviewed by Vicki.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer checkSelectionPoint:style:position:reversed:]):

2003-07-31  Richard Williamson   <rjw@apple.com>

        Fixed 3359152.  SPI to get the background color for a frame.

        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer checkSelectionPoint:style:position:reversed:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _bodyBackgroundColor]):

2003-07-31  Richard Williamson   <rjw@apple.com>

        Fixed 3358870.  Fall back on 'user defaults' values when a value
        in a custom instance of WebPreferences hasn't been overriden.

        Reviewed by Eric Seymour.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _stringValueForKey:]):
        (-[WebPreferences _integerValueForKey:]):
        (-[WebPreferences _boolValueForKey:]):

2003-07-30  Richard Williamson   <rjw@apple.com>

        Preparation for 3095376.

        Reviewed by Maciej.

        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_widthWithFont:]):
        * Misc.subproj/WebStringTruncator.m:
        (stringWidth):
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (shouldUseATSU):
        (-[WebTextRenderer widthForCharacters:length:]):
        (-[WebTextRenderer drawRun:style:atPoint:]):
        (-[WebTextRenderer _CG_drawRun:style:atPoint:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:characterPosition:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:widths:letterSpacing:wordSpacing:smallCaps:fontFamilies:]):
        (-[WebTextRenderer floatWidthForRun:style:widths:]):
        (-[WebTextRenderer _floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        (-[WebTextRenderer _createATSUTextLayoutForRun:]):
        (-[WebTextRenderer _trapezoidForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_floatWidthForRun:style:]):
        (-[WebTextRenderer _ATSU_drawRun:style:atPoint:]):
        (-[WebTextRenderer checkSelectionPoint:style:position:reversed:]):

2003-07-30  Richard Williamson   <rjw@apple.com>

        Fixed 3356518.  Added private method called by IB to ensure
        that autoresizeSubviews flag is turned on correctly.

        Reviewed by mjs.

        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _finishedMakingConnections]):

2003-07-28  Richard Williamson   <rjw@apple.com>

        Fixed 3323866.  Provide SPI to IB to enable scoping of preferences
        values on a document-by-document basis.

        Reviewed by Maciej.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferencesPrivate dealloc]):
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences initWithCoder:]):
        (+[WebPreferences _userDefaultsKeysForIB]):
        (+[WebPreferences _setIBCreatorID:]):
        (+[WebPreferences _IBCreatorID]):
        (-[WebPreferences _concatenateKeyWithIBCreatorID:]):
        * WebView.subproj/WebPreferencesPrivate.h:

2003-07-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3344647 -- reachedTerminalState assertion in WebBaseResourceHandleDelegate.m

        * WebView.subproj/WebMainResourceClient.m: (-[WebMainResourceClient cancelWithError:]):
        Use [super cancelWithError:] rather than [self receivedError:]. I checked carefully to
        see that this code now does everything the old code did (and a bit more).

2003-07-28  Richard Williamson   <rjw@apple.com>

        Fixed 3341859. 
            Check that the WebHTMLView is initialized in viewWillMoveToWindow: and
        viewDidMoveToWindow.  Don't do anything if we aren't initialized.  This
        happens when decoding a WebView.  When WebViews are decoded their subviews
            are created by initWithCoder: and so won't be normally initialized.  The 
        stub views are discarded by WebView.

        Reviewed by John.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView viewWillMoveToWindow:]):
        (-[WebHTMLView viewDidMoveToWindow]):

2003-07-28  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3279864 -- remove class_poseAs calls from WebKit

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView initWithFrame:]):
        Call _setDrawsOwnDescendants, if we have a new enough AppKit.
        * WebView.subproj/WebHTMLViewPrivate.m: (+[WebHTMLView load]):
        Don't pose as NSView, if we have a new enough AppKit.

2003-07-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Fix for this bug:

        <rdar://problem/3336933>: REGRESSION (Panther): Mozilla build downloaded
        with wrong extension, bad file size (gzip)

        Use new delegate methods that allow for the correct reporting
        of progress in cases where Foundation-level content decoding         has been performed on data received

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connection:didReceiveData:lengthReceived:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:lengthReceived:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:didReceiveData:lengthReceived:]):

2003-07-28  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed leak of WebDataRequestParameters objects

        * WebView.subproj/WebDataProtocol.m:
        (-[NSMutableURLRequest _webDataRequestParametersForWriting]):
        Release the WebDataRequestParameters object after putting it in the dictionary.

2003-07-28  John Sullivan  <sullivan@apple.com>

        - fixed 3236815 -- bitmap TIFFs at > 72 dpi are scaled incorrectly 
        in Safari when viewed standalone (uspto.gov)

        Reviewed by Darin

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer _adjustSizeToPixelDimensions]):
        call setScalesWhenResized:YES

2003-07-25  Richard Williamson   <rjw@apple.com>

        Fixed 3344519.  Prevent infinite recursion attempting font substitution.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _floatWidthForRun:style:applyRounding:attemptFontSubstitution:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):

2003-07-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3280582 - REGRESSION (74-85): authentication sheet doesn't state that previous login was incorrect

        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]): Use chall, the
        parameter, not challenge, the not-yet-set ivar so we get the right
        failure count &c.

2003-07-25  Richard Williamson   <rjw@apple.com>

        Use 11 point bold, instead of 12 point bold to draw dragged link
        labels.  This matches the text drawn in the bookmarks bar.

        Reviewed by John.

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _dragImageForLinkElement:]):

2003-07-24  Richard Williamson   <rjw@apple.com>

        Fixed 3279910.  Change the way we draw dragged link to use
        WebKit's measurement and drawing.  Also made the look match
        the bookmarks bar text.

        Reviewed by Maciej.

        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_drawDoubledAtPoint:withTopColor:bottomColor:font:]):
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _dragImageForLinkElement:]):
        (-[WebHTMLView _handleMouseDragged:]):

2003-07-24  Richard Williamson   <rjw@apple.com>

        Removed unnecessary log.

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithData:MIMEType:]):
        Add another check to use ATSU for Limbu (Unicode 4.0) script.
        Also made shouldUseATSU inline.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (shouldUseATSU):

=== Safari-90 ===

2003-07-23  Maciej Stachowiak  <mjs@apple.com>

        Build breakage fix:
        Fix WebKit to build with the latest Foundation.
        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _webkit_isJavaScriptURL]):
        (-[NSURL _webkit_scriptIfJavaScriptURL]):
        (-[NSURL _webkit_isFTPDirectoryURL]):
        (-[NSString _webkit_isFTPDirectoryURL]):

2003-07-23  Richard Williamson   <rjw@apple.com>

        Fixed 3311725:  Added support for key/value binding. 
        (As a side effect also made icon loading work!  In 1.0
        it doesn't work unless a secret preference value is set.)

        Reviewed by Ken.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _createFileDatabase]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _isLoadComplete]):
        * WebView.subproj/WebView.m:
        (-[WebView setMainFrameURL:]):
        (-[WebView mainFrameURL]):
        (-[WebView isLoading]):
        (-[WebView mainFrameTitle]):
        (-[WebView mainFrameIcon]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _progressStarted]):
        (-[WebView _progressCompleted]):
        (-[WebView _incrementProgressForConnection:data:]):
        (-[WebView _completeProgressForConnection:]):
        (-[WebView _declaredKeys]):
        (-[WebView setObservationInfo:]):
        (-[WebView observationInfo]):
        (-[WebView _willChangeBackForwardKeys]):
        (-[WebView _didChangeBackForwardKeys]):
        (-[WebView _didStartProvisionalLoadForFrame:]):
        (-[WebView _didCommitLoadForFrame:]):
        (-[WebView _didFinishLoadForFrame:]):
        (-[WebView _didFailLoadWithError:forFrame:]):
        (-[WebView _didFailProvisionalLoadWithError:forFrame:]):

2003-07-23  Richard Williamson   <rjw@apple.com>

        Fixed 3341119:  Crash when content contains nil (0x0) characters.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _CG_drawRun:style:atPoint:]):

2003-07-23  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 2/3 of 3279864 -- remove class_poseAs calls from WebKit (will also remove init routine)

        * WebView.subproj/WebHTMLViewPrivate.m: (+[WebHTMLView load]):
        Only pose as NSTextView and NSWindow if we have an older AppKit.
        If we have a new enough AppKit, the code in WebCore now takes care of things.

2003-07-23  Richard Williamson   <rjw@apple.com>

        Fixed for 3259840.  Use ATSU for scripts we don't handle internally,
        i.e.:  Syriac, Thaana, Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, Sinhala, Thai, Lao, Tibetan, Myanmar, Hangul Jamo, Khmer, Mongolian

        Also fixed issues with our rendering of Arabic.

        Changed the internal API to take WebCoreTextRun and WebCoreTextStyle
        parameters instead of scads on individual parameters.  Much cleaner.

        Reviewed by Maciej.

        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_widthWithFont:]):
        * Misc.subproj/WebStringTruncator.m:
        (stringWidth):
        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (shouldUseATSU):
        (-[WebTextRenderer _setupFont:]):
        (-[WebTextRenderer dealloc]):
        (-[WebTextRenderer widthForCharacters:length:]):
        (-[WebTextRenderer drawRun:style:atPoint:]):
        (-[WebTextRenderer _CG_drawRun:style:atPoint:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:characterPosition:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding:attemptFontSubstitution:widths:letterSpacing:wordSpacing:smallCaps:fontFamilies:]):
        (-[WebTextRenderer floatWidthForRun:style:applyRounding:attemptFontSubstitution:widths:]):
        (-[WebTextRenderer _floatWidthForRun:style:applyRounding:attemptFontSubstitution:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        (-[WebTextRenderer _CG_floatWidthForRun:style:applyRounding:attemptFontSubstitution:widths:fonts:glyphs:startGlyph:endGlyph:numGlyphs:]):
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer _initializeATSUStyle]):
        (-[WebTextRenderer _createATSUTextLayoutForRun:]):
        (-[WebTextRenderer _trapezoidForRun:style:atPoint:]):
        (-[WebTextRenderer _ATSU_floatWidthForRun:style:]):
        (-[WebTextRenderer _ATSU_drawRun:style:atPoint:]):

2003-07-23  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin
        Removed dependency on Foundation NSURL_NSURLExtras file.
        Copied the required methods from that file to WebNSURLExtras,
        temporarily renaming the methods that are now in both
        places to have a _webkit_ prefix. The names will be changed
        back once every one is living on a Foundation version that
        no longer contains these methods.

        The files below were changed in one of three ways:
        1. Rename _web_URLWithString: to _web_URLWithDataAsString:
        2. Tweak headers to depend on WebNSURLExtras instead of NSURL_NSURLExtras.
        3. At call sites, tweak names of methods that moved to WebKit (_web_ -> _webkit_).

        * History.subproj/WebHistory.m:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem URL]):
        * History.subproj/WebHistoryPrivate.m:
        * History.subproj/WebURLsWithTitles.m:
        (+[WebURLsWithTitles URLsFromPasteboard:]):
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _iconForFileURL:withSize:]):
        * Misc.subproj/WebIconLoader.m:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_bestURL]):
        * Misc.subproj/WebNSURLExtras.h:
        * Misc.subproj/WebNSURLExtras.m:
        (ReleaseIfNotNULL):
        (+[NSURL _web_URLWithDataAsString:]):
        (+[NSURL _web_URLWithDataAsString:relativeToURL:]):
        (+[NSURL _web_URLWithData:]):
        (+[NSURL _web_URLWithData:relativeToURL:]):
        (-[NSURL _web_originalData]):
        (-[NSURL _web_displayableString]):
        (-[NSURL _web_URLStringLength]):
        (-[NSURL _webkit_canonicalize]):
        (-[NSURL _webkit_URLByRemovingFragment]):
        (-[NSURL _webkit_isJavaScriptURL]):
        (-[NSURL _webkit_scriptIfJavaScriptURL]):
        (-[NSURL _webkit_isFTPDirectoryURL]):
        (-[NSURL _webkit_shouldLoadAsEmptyDocument]):
        (isHexDigit):
        (hexDigitValue):
        (-[NSString _webkit_isJavaScriptURL]):
        (-[NSString _webkit_stringByReplacingValidPercentEscapes]):
        (-[NSString _webkit_scriptIfJavaScriptURL]):
        * Misc.subproj/WebNSViewExtras.m:
        * Panels.subproj/WebAuthenticationPanel.m:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        * Plugins.subproj/WebNullPluginView.m:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge requestedURLString]):
        * WebCoreSupport.subproj/WebCookieAdapter.m:
        (-[WebCookieAdapter cookiesForURL:]):
        (-[WebCookieAdapter setCookies:forURL:policyBaseURL:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _loadIcon]):
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _shouldReloadForCurrent:andDestination:]):
        (-[WebFrame _URLsMatchItem:]):
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _elementAtPoint:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient loadWithRequest:]):
        (-[WebMainResourceClient setDefersCallbacks:]):

2003-07-22  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-07-21  Ken Kocienda  <kocienda@apple.com>

        Fixed build breaker.

        Removed glyphCountFromFont function. It was used only in an
        ERROR function, which does not compile in on deployment
        builds, causing a "defined, but not used warning".

        As this function is only a one-liner call into ATS, I 
        replaced the usage in the ERROR call with a call to the 
        ATS function directly.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:])

2003-07-18  Richard Williamson   <rjw@apple.com>

        Fixed 3283594.  "Times RO" appears to have a corrupt regular variant.  Added
        additional bullet proofing to catch corrupt fonts.  Also added a special case
        hack to map "Times RO" to "Time New Roman" if the variant doesn't have valid
        glyphs.

        Fixed 3319846.  The page mentioned in this bug required > 10 substitute fonts for
        the same base font.  This triggered some buggy code that hasn't been exercise before.
        Specifically the code that resizes the substitute fonts array was incorrect.

        Reviewed by mjs.

        * Misc.subproj/WebAssertions.h:  Added FATAL_ALWAYS macro that logs and CRASHES
        even in deployment builds.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (mapForSubstituteFont):
        (widthFromMap):
        (FillStyleWithAttributes):
        (-[WebTextRenderer convertCharacters:length:toGlyphs:skipControlCharacters:]):
        (-[WebTextRenderer convertUnicodeCharacters:length:toGlyphs:]):
        (-[WebTextRenderer _computeWidthForSpace]):
        (-[WebTextRenderer _setupFont:]):
        (pathFromFont):
        (glyphCountFromFont):
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):
        (-[WebTextRenderer extendUnicodeCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]):

2003-07-17  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3250608 -- REGRESSION (74-85): reproducible Safari crash in blinkCaretTimerAction

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebNSTextView drawInsertionPointInRect:color:turnedOn:]):
        Use NSView's setNeedsDisplayInRect: instead of the one in NSTextView.
        This avoids the layout that the NSTextView version of the call might do.
        By definition, we don't need layout to draw the insertion point, because we did
        the layout to find where the insertion point should display. If we do the layout
        we can end up recursing into the insertion point drawing code, which wreaks major
        havoc. Still no idea why this happened less in version 74.

2003-07-17  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:]): Now uses NSURL instead of NSString
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]): Ditto
        (-[WebBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        Ditto
        (-[WebBridge setIconURL:]): Ditto
        (-[WebBridge setIconURL:withType:]): Ditto
        (-[WebBridge createChildFrameNamed:withURL:renderPart:allowsScrolling:marginWidth:marginHeight:]): Ditto
        (-[WebBridge userAgentForURL:]): Ditto
        (-[WebBridge requestedURL]): Now returns string using _web_absoluteString
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _receivedError:complete:]): Now uses NSURL instead of NSString
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _opened]): Ditto
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]): Ditto
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]): Ditto

2003-07-17  Ken Kocienda  <kocienda@apple.com>

        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_URLStringLength]): Fix premature use of new CFURL API.
        New code is ifdef'ed out for now until everyone has revved.

2003-07-17  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]): Now uses NSURL in API instead of NSString
        (-[WebBridge loadURL:referrer:reload:target:triggeringEvent:form:formValues:]): Ditto
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): Ditto
        * WebKit.pbproj/project.pbxproj: Added WebNSURLExtras file
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _commitIfReady:]): Now uses NSURL in API instead of NSString

2003-07-15  Richard Williamson   <rjw@apple.com>

        Fixed 3315952:  Add support for <IMG> in attributed string conversion.
        Added RTFD pasteboard type.

        Reviewed by John.

        * WebView.subproj/WebHTMLViewPrivate.m:
        (+[WebHTMLView _pasteboardTypes]):
        (-[WebHTMLView _writeSelectionToPasteboard:]):

2003-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - make some improvements to handling of the timer, inspired by some bug reports

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFramePrivate dealloc]): Instead of releasing the timer, assert it is nil.
        (-[WebFrame _detachFromParent]): Invalidate and release the timer after finishing
        dealing with self, in case the reference from the timer is the last one.
        (-[WebFrame _timedLayout:]): Release the timer after doing all the other work,
        in case the reference from the timer is the last one.
        (-[WebFrame _setState:]): Release the timer after doing all the other work,
        in case the reference from the timer is the last one.

2003-07-14  Darin Adler  <darin@apple.com>

        Rolled out workaround to bug 3298153 -- get "screen font while printing"
        error, bad stuff happens after that (Sherlock, Safari). It turns out the
        real fix was on the WebCore side. Now that we have that fix we don't need
        these extra calls to printerFont, which is a relatively slow call that
        may need to look up a font by name each time it's called.

        * WebCoreSupport.subproj/WebTextRenderer.m: (_drawGlyphs):
        Remove code to look up the printer font.

2003-07-14  Maciej Stachowiak  <mjs@apple.com>

        Rolled in fix from Safari-89-branch
    2003-07-12  Maciej Stachowiak  <mjs@apple.com>

        Try to fix OS build by making the Frameworks link in both SYMROOT
        and DSTROOT, and at both build time and install time.

        * WebKit.pbproj/project.pbxproj:

2003-07-14  Dave Hyatt  <hyatt@apple.com>

        Roll this change out.  It was a bad change that I only made
        because I was using the opacity APIs wrong.
        Reviewed by (nobody, just a straight backout of a previous checkin)

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):

2003-07-13  Darin Adler  <darin@apple.com>

        * WebKit.pbproj/project.pbxproj: Add command to prevent build from failing if symlink
        creation fails.

2003-07-13  Darin Adler  <darin@apple.com>

        Fixed symbolic link path as Matt Reda suggested.

        * WebKit.pbproj/project.pbxproj: Changed paths in both of Maciej's new build phases
        to use Versions/Current instead of Versions/A.

2003-07-13  Darin Adler  <darin@apple.com>

        Fixed DSTROOT path as Eric Weiss suggested.

        * WebKit.pbproj/project.pbxproj: Changed paths in both of Maciej's new build phases.

2003-07-12  Maciej Stachowiak  <mjs@apple.com>

        Try to fix OS build by making the Frameworks link in both SYMROOT
        and DSTROOT, and at both build time and install time.

        * WebKit.pbproj/project.pbxproj:

2003-07-11  Dave Hyatt  <hyatt@apple.com>

        Make sure image compositing obeys the current global alpha that
        is in effect, e.g., if someone has set an opacity within the
        current layer.

        It's worth noting that I'm not even sure *why* this patch works,
        but it does, even with nested opacity layers.
        Reviewed by darin

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):

=== Safari-89 ===

2003-07-10  Richard Williamson   <rjw@apple.com>

        Fixed 3298153.  Force use of printer font when printing.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (_drawGlyphs):

2003-07-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3161102>: Avoid retain cycles by destroying plug-ins in the page cache before dealloc
        Fixed: <rdar://problem/3320624>: WebElementImageAltStringKey is not exported :-(
        Unspoof freebsd since we now handle gzip'd content.

        Reviewed by rjw.

        * History.subproj/WebHistoryItem.m:
        (+[WebHistoryItem _destroyAllPluginsInPendingPageCaches]): new, destroys all plug-ins
        (+[WebHistoryItem _releaseAllPendingPageCaches]): call _destroyAllPluginsInPendingPageCaches
        * WebKit.exp: export WebElementImageAltStringKey
        * WebView.subproj/WebUserAgentSpoofTable.c: unspoof freebsd
        (hash):
        (_web_findSpoofTableEntry):
        * WebView.subproj/WebUserAgentSpoofTable.gperf: unspoof freebsd

2003-07-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Chris

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        fixed copy/paste error in comment that I stumbled across

2003-07-09  Richard Williamson   <rjw@apple.com>

        Fixed 3141257.  Animate multiple copies of the same
        image on the same page.

        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (+[WebImageRenderer stopAnimationsInView:]):
        (-[WebImageRenderer retainOrCopyIfNeeded]):
        (-[WebImageRenderer copyWithZone:]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer dealloc]):
        (-[WebImageRenderer repetitionCount]):
        (-[WebImageRenderer scheduleFrame]):
        (-[WebImageRenderer beginAnimationInRect:fromRect:]):
        * WebCoreSupport.subproj/WebImageRendererFactory.h:
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]):
        (-[WebImageRendererFactory imageRendererWithData:MIMEType:]):
        (-[WebImageRendererFactory imageRendererWithBytes:length:MIMEType:]):

2003-07-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3229364>: user stylesheet path should be stored relative to home directory

        Reviewed by john.

        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_stringByAbbreviatingWithTildeInPath]): new, handles home directories that have symlinks in path
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences userStyleSheetLocation]): converts path string or URL string to URL
        (-[WebPreferences setUserStyleSheetLocation:]): converts URL to path string or URL string

2003-07-08  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3125264 -- nuke NSImage workaround when we drop Jaguar support

        * Misc.subproj/WebNSImageExtras.m: Removed the workaround.

        - removed other Jaguar-specific code

        * WebCoreSupport.subproj/WebImageRenderer.m: Remove workaround for improper
        handling of GIF animation loops with no loop counting, bug 3090341.

        * WebView.subproj/WebHTMLViewPrivate.m: Remove workaround for problem extracting
        scroll wheel events without also getting all others, which caused jumping around
        if you used the scroll wheel while moving the mouse, bug 3245425.

        * Misc.subproj/WebKitErrorsPrivate.h: Remove Jaguar-only import of <NSError.h>.
        * Plugins.subproj/WebNetscapePluginPackage.m: Remove Jaguar-only side of #if.
        * Plugins.subproj/WebNetscapePluginRepresentation.m: Remove Jaguar-only import
        of <NSError.h>.
        * WebKit/Plugins.subproj/WebPluginPackage.m: Remove unnecessary import of <NSError.h>.
        * Plugins.subproj/WebPluginPackage.m: Remove Jaguar-only side of #if.
        * WebCoreSupport.subproj/WebSubresourceClient.m: Remove Jaguar-only import
        of <NSError.h>.
        * WebView.subproj/WebDefaultFrameLoadDelegate.m: Remove Jaguar-only import
        of <NSError.h>.
        * WebView.subproj/WebImageRepresentation.m: Remove Jaguar-only import
        of <NSError.h>.

        * WebKit/English.lproj/StringsNotToBeLocalized.txt: Updated for this and other recent changes.

2003-07-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3134494>: no progressive loading for standalone images
        Fixed: <rdar://problem/3280633>: exception raised (attempt to create array with nil element) when dragging image out of HTML

        Reviewed by rjw.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragPromisedImage:rect:URL:title:event:]): don't take a file type since this can now be gotten from the image
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer _adjustSizeToPixelDimensions]): new method that rjw factored from incrementalLoadWithBytes::: 
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]): call _adjustSizeToPixelDimensions so we have the correct image size as the image loads
        (-[WebImageRenderer MIMEType]): new accessor
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _handleMouseDragged:]): use renamed _web_dragPromisedImage
        * WebView.subproj/WebImageRepresentation.h:
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation doneLoading]): new
        (-[WebImageRepresentation setDataSource:]): create the image here
        (-[WebImageRepresentation receivedData:withDataSource:]): pass data to image
        (-[WebImageRepresentation receivedError:withDataSource:]): complete image loading
        (-[WebImageRepresentation finishedLoadingWithDataSource:]): complete image loading
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView initWithFrame:]): call setAutoresizingMask so setFrameSize is called often enough
        (-[WebImageView dealloc]): tweak
        (-[WebImageView haveCompleteImage]): new
        (-[WebImageView drawingRect]): new
        (-[WebImageView drawRect:]): fill white then draw the image so we never show the previous page
        (-[WebImageView setFrameSizeUsingImage]): new, ensures that the view always fills the content area (so we draw over the previous page) and that the view is at least as large as the image.
        (-[WebImageView setFrameSize:]): call setFrameSizeUsingImage
        (-[WebImageView layout]): call setFrameSizeUsingImage
        (-[WebImageView setDataSource:]): store the rep
        (-[WebImageView dataSourceUpdated:]): call setNeedsLayout and setNeedsDisplay
        (-[WebImageView viewDidMoveToWindow]): tweak
        (-[WebImageView validateUserInterfaceItem:]): only allow copy if haveCompleteImage
        (-[WebImageView writeImageToPasteboard:]): only writeImageToPasteboard if haveCompleteImage
        (-[WebImageView writeSelectionToPasteboard:types:]): tweak
        (-[WebImageView menuForEvent:]): tweak
        (-[WebImageView mouseDragged:]): only allow drag if haveCompleteImage
        (-[WebImageView namesOfPromisedFilesDroppedAtDestination:]): tweak

2003-07-08  Dave Hyatt  <hyatt@apple.com>

        Change minimum font size pref value back to 9. This change
        has been made in conjunction with associated WebCore changes
        that allow us to institute a minimum font size safely without
        the need for a visible GUI pref.
        Reviewed by darin

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):

2003-07-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3295916 - b/c JavaScriptCore and WebCore are installing in wrong location, private headers are public

        * WebKit.pbproj/project.pbxproj: Make a link from Frameworks to Versions/A/Frameworks.

=== Safari-88 ===

2003-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fix compile error from B&I Panther build; really, this time

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer extendUnicodeCharacterToGlyphMapToInclude:]): Use unsigned, not int.
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]): Ditto.

2003-07-06  Darin Adler  <darin@apple.com>

        - fix compile error from B&I Panther build

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer extendUnicodeCharacterToGlyphMapToInclude:]): Rearrange code so that we won't get
        a warning if numGlyphs type is either signed or unsigned. We don't want to depend on the new ATS
        headers or the old ones; this is compatible with both.
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]): Ditto.

2003-07-03  Darin Adler  <darin@apple.com>

        * WebCoreSupport.subproj/WebImageRenderer.m: Remove obsolete comment.

2003-07-03  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3206011>: Don't accepts drags when showing dialogs or sheets

        Reviewed by john.

        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragOperationForDraggingInfo:]):

2003-07-03  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3291566>: Aborting standalone image load makes image directory page unusable

        Reviewed by john.

        * WebKit.pbproj/project.pbxproj: Xcode-ified WebKit.pbproj
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView drawRect:]): layout if we need to, fill with white if we don't have an image yet
        (-[WebImageView setNeedsLayout:]): set the bit
        (-[WebImageView layout]): if we don't have an image, the frame size is the visible area so we draw white over the previous web page

2003-07-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3304992 - REGRESSION: Every GET on an authenticated site requires a login (genentech)

        I fixed this by adding a per-window queue of waiting
        authentication requests. Before going to a later item in the
        queue, the auth handler checks if there's already a credential
        available to handle it, and if so uses that as the answer instead of
        prompting.

        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        (-[NSMutableDictionary _web_setObject:forUncopiedKey:]):
        (-[WebPanelAuthenticationHandler init]):
        (-[WebPanelAuthenticationHandler dealloc]):
        (-[WebPanelAuthenticationHandler enqueueChallenge:forWindow:]):
        (-[WebPanelAuthenticationHandler tryNextChallengeForWindow:]):
        (-[WebPanelAuthenticationHandler startAuthentication:window:]):
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]):

2003-06-30  John Sullivan  <sullivan@apple.com>

        - fixed 3310716 -- Authentication dialog could be tweaked to 
        better match guidelines

        Reviewed by Chris

        * Panels.subproj/English.lproj/WebAuthenticationPanel.nib:
        left-aligned "Name:" and "Password:" labels; slightly tweaked
        layout at right edge of sheet

2003-06-26  Chris Blumenberg  <cblu@apple.com>

        Changes to make WebKit compile with gcc 3.3.

        Reviewed by darin.

        * Carbon.subproj/HIWebView.m:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setScrollbarsVisible:]):
        (-[WebBridge loadURL:referrer:reload:target:triggeringEvent:form:formValues:]):
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences setDefaultFontSize:]):
        (-[WebPreferences setDefaultFixedFontSize:]):
        (-[WebPreferences setMinimumFontSize:]):
        * WebView.subproj/WebView.m:
        (-[WebView searchFor:direction:caseSensitive:wrap:]):

2003-06-24  Chris Blumenberg  <cblu@apple.com>

        Renamed the context menu item Download Image To Disk" to "Download Image to Disk".

        Reviewed by john.

        * English.lproj/Localizable.strings:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate menuItemWithTag:]):

2003-06-19  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3294803>: HTTP error sent as content instead of error to plug-ins


        Reviewed by john.

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]): if the response is an error, cancel the load, return a network error

=== Safari-85.1 ===

2003-06-15  Vicki Murley  <vicki@apple.com>

        Reviewed by darin.

        * WebKit.pbproj/project.pbxproj: remove SECTORDER_FLAGS variable, so that we don't use order file for our Panther submission

=== Safari-85 ===

2003-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Darin (Richard wrote the first cut), then Don and Dave.

        - fixed 3291467 -- CARBON: context menus are broken when using WebKit from Carbon

        * Carbon.subproj/HIWebView.m: (ContextMenuClick): Rewrite method to create a fake
        right mouse up event, and pass that to menuForEvent: and _popUpMenuWithEvent.

2003-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 3291778 -- REGRESSION (51-52): QT controller never shows up for mp3 in frame

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):
        Handle the "invisible" plug-in cases in a more complete way.
        Detect the various ways of being invisible (big negative X value, 0 size,
        not really in a window) and in all those cases, use a clip rect to guarantee
        we won't be seen, and make sure the size passed to the plug-in is *not* 0.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2003-06-13  David Hyatt  <hyatt@apple.com>

        Fix for 3291319, scrolling is much worse since 79.  The problem
        was a fix for resize events that needed to use the scrollview size
        and not the document view size inside the scrollview.
        Reviewed by darin

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:]):
        * WebView.subproj/WebHTMLViewPrivate.h:

2003-06-13  Chris Blumenberg  <cblu@apple.com>

        Fixed previous " Reviewed by" string.

        * ChangeLog:

2003-06-13  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3291502>: REGRESSION (80-81): freebsd.org is giving us gzipped content (because we stopped spoofing)

        Reviewed by john.

        * WebView.subproj/WebUserAgentSpoofTable.c:
        (hash):
        (_web_findSpoofTableEntry):
        * WebView.subproj/WebUserAgentSpoofTable.gperf:

2003-06-12  Richard Williamson  <rjw@apple.com>

        Restoring fix for 3221078 that I earlier backed out in a
        panic about performance.  In careful performance testing
        I now see no performance regression, and maybe a tiny improvement.
        The earlier performance regression Vicki saw was entirely
        due to the incorrect checkin for the fix to 3288532.

        Reviewed by Chris & Gramps.

        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:

2003-06-12  Richard Williamson  <rjw@apple.com>

        Correct fix for 3288532 again.  This time will feeling!

        Reviewed by Gramps.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList setCapacity:]):

2003-06-12  Don Melton  <gramps@apple.com>

        Since Richard didn't actually correct the fix for 3288532 in
        WebBackForwardList.m, I've backed out out his original fix entirely.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList setCapacity:]):

2003-06-12  Richard Williamson   <rjw@apple.com>

        Correct fix for 3288532.

        * History.subproj/WebBackForwardList.m:

2003-06-12  Richard Williamson   <rjw@apple.com>

        Fixed 3288532.  When setCapacity: shrinks capacity, trim
        the back/forward list.  Setting to zero will effectively
        flush the list.

        Reviewed by John.

        * History.subproj/WebBackForwardList.m:

2003-06-12  Richard Williamson   <rjw@apple.com>

        Fixed 3221078.  Maintain a seperate width map
        for substitute fonts to avoid collision of glyph
        codes.

        Reviewed by Chris & Gramps.

        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:

=== Safari-84 ===

2003-06-12  Darin Adler  <darin@apple.com>

        Fixed by Richard, reviewed by me.

        - fixed 3289047 -- REGRESSION: can't go back after using form at attwireless.com

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        Added isJavaScriptFormAction parameter, passed on to frame.

        * WebView.subproj/WebFramePrivate.h: Added isJavaScriptFormAction parameter.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _clientRedirectedTo:delay:fireDate:lockHistory:isJavaScriptFormAction:]):
        If isJavaScriptFormAction is YES, then don't treat this is a "quick redirect" which is
        merged with the previous page for purposes of back/forward.

2003-06-11  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3289577>: Reenable Carbon Java plug-ins when in Carbon app

        Reviewed by gramps.

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]): only call canUsePlugin: for web plug-ins

2003-06-11  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3289380>: REGRESSION: policyDataSource == nil assertion failure after closing particular window


        Reviewed by john.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueAfterNavigationPolicy:]): don't clear policyDataSource here because this method may not be called during navigation
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): clear policyDataSource here 

2003-06-11  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3288097>: REGRESSION: assertion failure after hitting back while loading page after fragment scroll

        Fixed by darin, reviewed by me.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _URLsMatchItem:]): ignore the URL fragment so we scroll back at the current page instead of attempt to load the current page 
        
2003-06-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3285808 -- repro world leak when replacing div that contains iframe (at www.kbs.co.kr)

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge frameDetached]):
        Add a call to _detachFromParent.
        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _removeChild:]):
        Nil out the parent pointer in the removed child.

2003-06-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3288076>: REGRESSION: Fragment scroll stops page load

        We do policy navigation checks for the regular load case, fragment scroll and redirects.
        We only want to stop the load, change the provisional data source etc in the regular load case. 

        Reviewed by darin.

        * WebView.subproj/WebFramePrivate.m: got rid of _prepareForProvisionalLoadWithDataSource:: since the work done in this method only needs to be done in _continueLoadRequestAfterNavigationPolicy:: (which covers the regular load case).
        (-[WebFrame _invalidatePendingPolicyDecisionCallingDefaultAction:]): don't clear policyDataSource because it needs to be called in _continueLoadRequestAfterNavigationPolicy::
        (-[WebFrame _setPolicyDataSource:]): new
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]): don't call _prepareForProvisionalLoadWithDataSource::, don't muck with policyDataSource because it is only needed in the regular load case
        (-[WebFrame _continueAfterNavigationPolicy:]): don't call _prepareForProvisionalLoadWithDataSource::, call _setPolicyDataSource:nil after _continueLoadRequestAfterNavigationPolicy:: has used policyDataSource
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): this method covers the regular load case. This is where we need to stop the load, set the load type and the provisional data source. Code was in _prepareForProvisionalLoadWithData




Source::
        (-[WebFrame _loadDataSource:withLoadType:formState:]): set the policyLoadType and policyDataSource (the beginning of the regular load case)

2003-06-10  Richard Williamson   <rjw@apple.com>

        Back out incorrect fix to 3287862.

2003-06-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3156169>: cmd-click opens new win but stops loading in prev win

        Reviewed by rjw.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame stopLoading]): set the provisional data source to nil to avoid a newly added assert in [WebFramePrivate setProvisionalDataSource:] 
        and since it is wasteful to retain it in this case
        * WebView.subproj/WebFramePrivate.h: added policyDataSource and policyLoadType ivars
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFramePrivate dealloc]): added an assert
        (-[WebFramePrivate setProvisionalDataSource:]): added an assert
        (-[WebFrame _isLoadComplete]): formatting tweak
        (-[WebFrame _invalidatePendingPolicyDecisionCallingDefaultAction:]): reset policyDataSource
        (-[WebFrame _checkNewWindowPolicyForRequest:action:frameName:formState:andCall:withSelector:]): formatting tweak
        (-[WebFrame _prepareForProvisionalLoadWithDataSource:loadType:]): new, calls stopLoading, _setLoadType and _setProvisionalDataSource
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]): call _prepareForProvisionalLoadWithDataSource:loadType: only in the "use" policy case
        (-[WebFrame _continueAfterNavigationPolicy:]): call _setProvisionalDataSource:andLoadType:
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]): formatting tweak
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]): formatting tweak
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): if there is no request to continue with, don't reset things like the provisional data source since it was never unset in this case
        (-[WebFrame _loadDataSource:withLoadType:formState:]): don't call stopLoading, _setLoadType and _setProvisionalDataSource, since that stops the frame even for command-click and option-click. Do this work in _prepareForProvisionalLoadWithDataSource




:loadType: instead.

2003-06-10  Richard Williamson   <rjw@apple.com>

        Fixed 3287862.  Don't override resize flags
        when decoding WebView.

        Reviewed by Chris.

        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationFrameName:groupName:]):

2003-06-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3286006>: Carbon Java plug-in problems may require workaround in WebKit

        Reviewed by john.

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase canUsePlugin:]): if in a carbon app, only use the mach-o java plug-in when its version is anything but 1.0.0
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]): call canUsePlugin on all the plug-ins


2003-06-10  Vicki Murley  <vicki@apple.com>

        Reviewed by john. 

        * WebKit.order: new order file for 1.0

2003-06-09  Chris Blumenberg  <cblu@apple.com>

        * WebView.subproj/WebDataSource.h: Removed FIXME related to pageTitle.

2003-06-09  Chris Blumenberg  <cblu@apple.com>

        <rdar://problem/3283359>: don't load Cocoa Java plug-in if in Carbon app


        Reviewed by darin.

        * Plugins.subproj/WebPluginDatabase.h: removed pluginForFilename, wasn't being used
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]): don't use the plug-in if ![self isCocoa] && [[[webPlugin bundle] bundleIdentifier] isEqualToString:JavaCocoaPluginIdentifier]

2003-06-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3284848>: REGRESSION: repro crash in Flash handling null event, going back to Japanese Disney page

        When restarting plug-ins from the BF cache, we were not calling NPP_SetWindow.

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView stop]): set the window type to 0 to force the calling of NPP_SetWindow 

=== Safari-83 ===

2003-06-07  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2003-06-07  Darin Adler  <darin@apple.com>

        Rolled out Chris's fix for 3156169 because it was causing a lot of crashes
        and problems with basic behavior. We can try again later.
        
        One of the problems was that Back wasn't working. Another was that you could
        not follow the link at the top of the page at kbb.com. More testing seemed to
        reveal still more problems.
        
        * WebView.subproj/WebFramePrivate.h: Rolled back to previous version.
        * WebView.subproj/WebFramePrivate.m: Ditto.

2003-06-06  Richard Williamson  <rjw@apple.com>

        Fixed 3283236.  Remove use of forward declarations in public header because
        CodeWarrior pukes on 'em.

        Reviewed by Chris.

        * WebView.subproj/WebDataSource.h:

2003-06-06  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3156169>: cmd-click opens new win but stops loading in prev win

        Reviewed by darin.

        * WebView.subproj/WebFramePrivate.h: added policyDataSource and policyLoadType as ivars
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFramePrivate dealloc]): added ASSERT
        (-[WebFramePrivate setProvisionalDataSource:]): added ASSERT
        (-[WebFrame _isLoadComplete]): formatting tweak
        (-[WebFrame _invalidatePendingPolicyDecisionCallingDefaultAction:]): clear policyDataSource
        (-[WebFrame _checkNewWindowPolicyForRequest:action:frameName:formState:andCall:withSelector:]): formatting tweak
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]): retain policyDataSource
        (-[WebFrame _continueAfterNavigationPolicy:]): stop the load, set the load type, set the provisional data source in the "use" case
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]): formatting tweak
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): don't reset things if something other than "use" has been chosen
        (-[WebFrame _loadDataSource:withLoadType:formState:]): DON'T stop the load, set the load type, set the provisional data source

2003-06-06  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3282881>: Java plugin fails in carbon WebKit apps

        Fixed by Mike Hay, reviewed by me.

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase initIsCocoa]):
        (-[WebPluginDatabase isCocoa]):
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]): don't load cocoa plug-ins if isCocoa.

2003-06-05  John Sullivan  <sullivan@apple.com>

        - fixed 3266216 -- repro crash in 
        -[WebBaseResourceHandleDelegate connection:didReceiveData:] 
        in GIA Application

        The problem was that an NSURLConnection delegate object (in this 
        case a WebMainResourceClient) was being dealloc'ed during one of
        its connection delegate methods. To prevent this kind of problem,
        I added [self retain]/[self release] guards around the meat of
        all of the connection delegate methods in which arbitrary code
        could be run. Another approach would be to do this retain/release
        pair in NSURLConnection, but Darin deemed it wiser not to muck with
        Foundation at this point for this issue.

        Reviewed by Darin

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]):
        guard with [self retain]/[self release]
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveData:]):
        ditto
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]):
        ditto

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connection:didReceiveResponse:]):
        ditto
        (-[WebSubresourceClient connection:didReceiveData:]):
        ditto

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        ditto
        (-[WebBaseResourceHandleDelegate connection:didReceiveAuthenticationChallenge:]):
        ditto
        (-[WebBaseResourceHandleDelegate connection:didCancelAuthenticationChallenge:]):
        ditto
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        ditto
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:]):
        ditto. Also, commented out two assertions that fire illegitimately in the steps in
        this bug report.
        (-[WebBaseResourceHandleDelegate connection:didFailWithError:]):
        ditto

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        ditto
        (-[WebMainResourceClient connection:didReceiveResponse:]):
        ditto
        (-[WebMainResourceClient connection:didReceiveData:]):
        ditto

2003-06-04  Richard Williamson   <rjw@apple.com>

        Fixed 3277775.  Send less notifications.  Notifcations suck!

        Reviewed by David.

        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate init]):
        (-[WebView _progressStarted]):
        (-[WebView _progressCompleted]):
        (-[WebView _incrementProgressForConnection:data:]):

2003-06-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3277675 -- REGRESSION: mouse wheel events not coalesced

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebNSWindow nextEventMatchingMask:untilDate:inMode:dequeue:]):
        When the mask is scroll wheel mask, instead of getting no events, do some tricks to get the next
        event if it is a scroll wheel event, and nothing otherwise. Also ifdef the fix so we don't compile
        it on Panther, since the underlying bug was fixed on Panther.
    
        - other changes

        * WebCoreSupport.subproj/WebImageRenderer.m: (-[WebImageRenderer copyWithZone:]):
        Remove unneeded line of code. The super function copies all simple fields for us.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView setMIMEType:]): Use copy instead of retain, do it in the right order
        to avoid "same object release/retain" disease.
        (-[WebBaseNetscapePluginView setBaseURL:]): Do retain before release (same reason as above).

2003-06-03  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3278496 - <rdar://problem/3278496>:        NSURLDownload: initWithSource and source should be renamed to initWithRequest and request

        Reviewed by rjw.

        * Misc.subproj/WebDownload.m:
        (-[WebDownload initWithRequest:delegate:]):
        (-[WebDownload _initWithRequest:delegate:directory:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView setNeedsDisplay:]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _downloadURL:toDirectory:]):

2003-06-03  Richard Williamson   <rjw@apple.com>
        Fixed 3263188, 3274636.
        Written by Ed Voas.  Reviewed by Richard.

        * Carbon.subproj/CarbonUtils.m:
        (WebInitForCarbon):
        Ensure the process info is correctly initialized so the correct
        "flavour" (carbon) is detected.

        * Carbon.subproj/HIWebView.m:
        (Draw):
        Always draw the growbox after drawing the web view,
        assuming overlap.

=== Safari-82 ===

2003-06-03  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3167792>: hang in _web_dragPromisedImage dragging 4 MB image

        Reviewed by john.

        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragPromisedImage:rect:URL:fileType:title:event:]): if the original image is greater than 1500x1500, use a file icon for the drag image to avoid hanging

2003-06-02  Richard Williamson  <rjw@apple.com>

        Fix for 3250352.

        Reviewed by Chris.

        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        Check respondsToSelector: before calling.

        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebUIDelegate.h:
        Headerdoc tweaks.

=== Safari-81 ===

2003-06-02  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3154910>: No video when viewing QT plug-in content at some pages but audio works

        This fix works around QT plug-in bug 3275755, but I think the fix is logical and worth keeping even after 3275755 is fixed.


        Eric Carlson:
        The problem happens when you call NPP_SetWindow with a 0 width or height more than once. The first call to NPP_SetWindow always seems to have width and height set to 0, but the next call sometimes has it set to the correct values (those in the EMBED tag)




. This is when it draws successfully. It seems to me that the fix is to always pass the correct width and height to NPP_SetWindow. You always position the plug-in far offscreen (1000000, -52) and set the clip region to an empty rect (48576, 52, 48576, 52)




 so there isn't really any danger of the plug-in drawing anyway. Additionally, you pass the correct width and height in the call to NPP_New before the first call to NPP_SetWindow.

        Reviewed by john, darin.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]): use the NSView width and height if greater than 0, else use the tag specified width and height
        (-[WebBaseNetscapePluginView isNewWindowEqualToOldWindow]): new
        (-[WebBaseNetscapePluginView setWindow]): NPP_SetWindow may be expensive, only call it if it has changed
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage launchRealPlayer]): tweak, no need to store error code since it is ignored

2003-05-30  Richard Williamson  <rjw@apple.com>

        Fixed 3272516.  Items are now expired from the
        b/f cache if they are older than 30 minutes.  This
        number was pulled out of our #!$es.  Also did
        some cleanup of the b/f cache code.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge saveDocumentToPageCache:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _createPageCacheForItem:]):
        (-[WebFrame _setState:]):
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        (-[WebPreferences _resourceTimedLayoutEnabled]):
        (-[WebPreferences _backForwardCacheExpirationInterval]):
        * WebView.subproj/WebPreferencesPrivate.h:
        * WebView.subproj/WebView.h:

        * WebView.subproj/WebPreferences.h: Cleaned up some headerdoc
        comments.
2003-05-29  Richard Williamson   <rjw@apple.com>

        Implemented 'estimatedProgress' method on WebView.  This should
        eventually replace the broken algorithm on WebBrowser.  Maybe
        for panther.

        Reviewed by Chris.

        * WebKit.exp:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate connection:didFailWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _isLoadComplete]):
        (-[WebFrame _numPendingOrLoadingRequests:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView estimatedProgress]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate dealloc]):
        (-[WebView _isPerformingProgrammaticFocus]):
        (-[WebView _progressStarted]):
        (-[WebView _progressCompleted]):
        (-[WebView _incrementProgressForConnection:data:]):
        (-[WebView _completeProgressForConnection:]):

        Code cleanup.  Moved variable initialization into block that
        check for non-nil self.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]):
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):

2003-05-29  Richard Williamson   <rjw@apple.com>

        Fixed 3272226.  The shared image factory was being released
        when any renderer had 0 reps!

        Reviewed by John.

        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]):

2003-05-29  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3151216 - Safari crashes on Drag&Drop if plugin dialog is open
        Reviewed by rjw.

        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragOperationForDraggingInfo:]): return NSDragOperationNone is the app has a modal window so the current page can't be changed with a drag
        * WebView.subproj/WebView.m:
        (-[WebView draggingEntered:]): return _web_dragOperationForDraggingInfo

2003-05-29  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3273109 - leak from functionPointerForTVector in -[WebNetscapePluginPackage load]

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]): free the main function after using it

2003-05-29  Richard Williamson   <rjw@apple.com>
        Fixed 3273115.  Always use pixel dimensions,
        not absolute dimensions.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):

2003-05-29  Richard Williamson   <rjw@apple.com>

        Fix 3272292.  Ensure that loadStatus is always
        initialized to NSImageRepLoadStatusUnknownType.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]):
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):

2003-05-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Fix for this bug:

        Radar 3260323 (Some links at nike.com cause assertion failure 
        (connectionDidFinishLoading sent after cancel))

        Added a flag which is set when a load is cancelled. This flag prevents
        bad behvior when loads that finish cause the load itself to be
        cancelled (which could happen with a javascript that changes the
        window location). This is used to prevent both the body of
        cancelWithError: and the body of connectionDidFinishLoading: running
        for a single delegate. Cancelling wins.

        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):

2003-05-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3270576 - RealPlayer plug-in fails to load

        Reviewed by darin.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage launchRealPlayer]): new
        (-[WebNetscapePluginPackage load]): call launchRealPlayer to regenerate its broken plist file

2003-05-28  Richard Williamson   <rjw@apple.com>

        Fixed 3165631 (and other similar).
        Fixed 3262592.

        We now set NSImage's cache mode to NSImageCacheNever during
        progressive loads.  It gets reset to NSImageCacheDefault when
        loads complete.

        If an image is scaled, NSImage appears to create a NSCacheImageRep
        with the wrong size during progessive image loading.  Specifically
        it appears to create a cached rep with the original size.

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithMIMEType:]):

        * WebView.subproj/WebPreferences.h:
        Updated headerdoc comments.

2003-05-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3233442 - Crash in -[WebNetscapePluginPackage load] at http://www.adultswim.com/

        Reviewed by mjs.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]): don't call NPP_Shutdown if the plug-in fails to load

2003-05-27  Chris Blumenberg  <cblu@apple.com>

                Don't load and save icons if the icon DB directory default is not set.

        Reviewed by darin.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _createFileDatabase]): don't create the DB if the default is not set
        (-[WebIconDatabase _loadIconDictionaries]): don't load the dictionaries if the DB doesn't exist
        (-[WebIconDatabase _updateFileDatabase]): don't update the DB if it doesn't exist
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _loadIcon]): don't load icons if the icon DB directory default is not set

2003-05-27  Maciej Stachowiak  <mjs@apple.com>

        Rolled in fix from Safari-80~1-branch
    2003-05-27  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Darin.

        * WebKit.pbproj/project.pbxproj: Removed no longer needed and harmful flag.

2003-05-27  Richard Williamson   <rjw@apple.com>

        Fix for IB.

        Reviewed by Eric Seymour.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences initWithIdentifier:]):
        Added retain to uniqued instance.  (As we did recently
        for initWithCoder:). 

2003-05-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3270013 - Exception raised when visiting http://www.shutterfly.com/favicon.ico

        Reviewed by john.

        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithBytes:length:MIMEType:]): return nil if the image has no representations

2003-05-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3242864 - repro assertion failure in WebIconDatabase.m for www.shutterfly.com

        Reviewed by john.

        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader connectionDidFinishLoading:]): don't set the icon on the DB if it has no representations

2003-05-27  Richard Williamson   <rjw@apple.com>

        Fixes for IB.

        Reviewed by Eric Seymour.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences initWithCoder:]):
        Added retain to uniqued instance 

        * WebView.subproj/WebView.m:
        (-[WebView initWithCoder:]):
        (-[WebView setPreferences:]):
        Added release check to global uniquing dictionary.

2003-05-23  Richard Williamson   <rjw@apple.com>

        Tweaks for IB.
        Updated WebView and WebPreferences to use
        keyed archiving.
        Added private method to export settable user
        defaults keys.

        Reviewed by Ken.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences initWithCoder:]):
        (+[WebPreferences _userDefaultsKeysForIB]):
        * WebView.subproj/WebPreferencesPrivate.h:
        * WebView.subproj/WebView.m:
        (-[WebView initWithCoder:]):

2003-05-23  Richard Williamson   <rjw@apple.com>

        Added export of _WebHistoryItemChangedNotification.

        * WebKit.exp:

2003-05-23  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3259426 - Can't copy mailto links to clipboard

        Reviewed by john.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): offer "Copy Link to Clipboard" for all links

2003-05-22  Richard Williamson   <rjw@apple.com>

        *** Public API change ***
        100% compatible.  Added notification when history items
        change values.

        Fixed 3265672
        Reviewed by John.

        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setAlternateTitle:]):
        (-[WebHistoryItem setURL:]):
        (-[WebHistoryItem setOriginalURLString:]):
        (-[WebHistoryItem setTitle:]):
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):

2003-05-22  Richard Williamson   <rjw@apple.com>

        Fixed 3266464.  Build problem on panther caused by overly
        pedantic gcc.

        Reviewed by John.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences initWithCoder:]):
        * WebView.subproj/WebView.m:
        (-[WebView initWithCoder:]):

2003-05-22  Richard Williamson   <rjw@apple.com>

        Add _web to method in category name.

        Fixed 3266102.  @selector missing ":".

        Reviewed by Darin.

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences _removeReferenceForIdentifier:]):
        (-[NSMutableDictionary _web_checkLastReferenceForIdentifier:]):

2003-05-22  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - removed all entries except for jaguar.com because:
            a) most of these sites now work fine without the spoofing or have gone away
            b) nj.com and oregonlive.com do not work, but the spoofing committee (Mark,
               Don, Dave, and me) decided we should stop spoofing and get them to fix
               the sites instead
          If we can resolve jaguar.com in a similar way, we can remove the spoofing
          feature altogether.

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Removed all but jaguar.com.
        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.

2003-05-21  Richard Williamson   <rjw@apple.com>

        *** Public API Change ***
        The fix for 3265442 requires new API.  This API is an addition
        that is 100% compatible with the existing API.
        
        Provide support for IB to palettize WebView.
        
        Fixed 3265442.
        Fixed 3263106.
        
        Reviewed by Chris.

        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferencesPrivate dealloc]):
        (-[WebPreferences init]):
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences initWithCoder:]):
        (-[WebPreferences encodeWithCoder:]):
        (+[WebPreferences standardPreferences]):
        (-[WebPreferences dealloc]):
        (-[WebPreferences identifier]):
        (-[WebPreferences _stringValueForKey:]):
        (-[WebPreferences _setStringValue:forKey:]):
        (-[WebPreferences _integerValueForKey:]):
        (-[WebPreferences _setIntegerValue:forKey:]):
        (-[WebPreferences _boolValueForKey:]):
        (-[WebPreferences _setBoolValue:forKey:]):
        (-[WebPreferences autosaves]):
        (+[WebPreferences _getInstanceForIdentifier:]):
        (+[WebPreferences _setInstance:forIdentifier:]):
        (+[WebPreferences _removeReferenceForIdentifier:]):
        (-[WebPreferences _postPreferencesChangesNotification]):
        (-[NSMutableDictionary _checkLastReferenceForIdentifier:]):
        * WebView.subproj/WebPreferencesPrivate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView _commonInitializationFrameName:groupName:]):
        (-[WebView initWithCoder:]):
        (-[WebView encodeWithCoder:]):
        (-[WebView dealloc]):
        (-[WebView setPreferencesIdentifier:]):
        (-[WebView preferencesIdentifier]):

2003-05-21  Chris Blumenberg  <cblu@apple.com>

        Fixed data source leak when viewing standalone plug-in content.

        Reviewed by rjw.

        * Plugins.subproj/WebBaseNetscapePluginStream.h: don't inherit from WebBaseResourceHandleDelegate
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream transferMode]): new
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation dealloc]): don't release the data source
        (-[WebNetscapePluginRepresentation setDataSource:]): don't retain the data source
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]): create a WebNetscapePluginConnectionDelegate
        (-[WebNetscapePluginStream dealloc]): release the WebNetscapePluginConnectionDelegate
        (-[WebNetscapePluginStream start]): start the load on the WebNetscapePluginConnectionDelegate
        (-[WebNetscapePluginStream stop]): start the load on the WebNetscapePluginConnectionDelegate
        (-[WebNetscapePluginConnectionDelegate initWithStream:view:]): new class, inherits from WebBaseResourceHandleDelegate
        (-[WebNetscapePluginConnectionDelegate _releaseResources]):
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveResponse:]):
        (-[WebNetscapePluginConnectionDelegate connection:didReceiveData:]):
        (-[WebNetscapePluginConnectionDelegate connectionDidFinishLoading:]):
        (-[WebNetscapePluginConnectionDelegate connection:didFailWithError:]):
        (-[WebNetscapePluginConnectionDelegate cancel]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate response]): new

2003-05-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3254473 - REGRESSION: nike help page reloads on mouseovers, triggered by onresize function

        REGRESSION: reload loop due to onresize handler (fortune.com, flipdog.com, stanford.edu)

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:]): Go back to checking for at least one
        layout instead of last layout event time. Measure size in a way that ignores
        whether the scrollbares are there or not.
        * WebView.subproj/WebHTMLViewPrivate.h: Remove last layout event time and
        add back laid out at least once boolean.

2003-05-21  Chris Blumenberg  <cblu@apple.com>

        These problems:
        3184359 - icon exception closing window while typing
        3245476 - Safari-78 crashes or hangs after IMDB Find and using the history menu to go back ...
        are not or are no longer reproducible. They were caused by an exception raised in WebKit.
        Since we don't use exceptions in WebKit, I've replaced the exception with an assert.
                Reviewed by john.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _releaseFutureIconForURL:]): assert instead of exception if failure

2003-05-21  Ed Voas <voas@apple.com> 

        - fixed 3262868: Update Carbon WebKit API prefixes
        - fixed 3264980: Carbon support in WebKit needs to route mouse events properly
        Reviewed by Richard.

        * Carbon.subproj/CarbonUtils.h:
        * Carbon.subproj/CarbonUtils.m:
        (WebInitForCarbon):
        (WebConvertNSImageToCGImageRef):
        * Carbon.subproj/HIWebView.h:
        * Carbon.subproj/HIWebView.m:
        (HIWebViewGetWebView):
        (OwningWindowChanged):
        (WindowHandler):
        (HIWebViewEventHandler):
        * WebKit.exp:

2003-05-21  Vicki Murley  <vicki@apple.com>

        Reviewed by john 
        - fixed 3234553: Safari and its frameworks should link using order files

        * WebKit.order: Added.
        * WebKit.pbproj/project.pbxproj: set SECTORDER_FLAGS = -sectorder __TEXT __text WebKit.order;

2003-05-20  Richard Williamson   <rjw@apple.com>

        Fixed 3262825.
        Fixed 3245625.
        Fixed 3262547.

        Recursively check items when going back/forward to ensure all
        frame URLs are correct.

        Added some logging to help diagnose back/forward problems.

        Reviewed by John.

        * History.subproj/WebHistory.m:
        (-[WebHistory addItem:]):
        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource initWithRequest:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem:]):
        (-[WebFrame _createItemTreeWithTargetFrame:clippedAtTarget:]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _URLsMatchItem:]):
        (-[WebFrame _loadItem:withLoadType:]):

=== Safari-80 ===

2003-05-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Due to some header file changes in Foundation on Panther, 
        Tweaked some includes so that WebKit builds on Jaguar 
        and Panther.

        * Carbon.subproj/CarbonWindowFrame.m:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        * Plugins.subproj/WebPluginPackage.m:

2003-05-19  Maciej Stachowiak  <mjs@apple.com>

        - fixed 3261096 - Make WebKit an umbrella framework

        * WebKit.pbproj/project.pbxproj: Build WebKit as a public umbrella
        framework when doing a B&I build.

2003-05-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        * Panels.subproj/WebAuthenticationPanel.m: Now imports Foundation/NSURLCredential.h
        * WebCoreSupport.subproj/WebCookieAdapter.m: Now imports Foundation/NSHTTPCookie.h

2003-05-19  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed imports to include headers from Foundation                   
        instead of WebFoundation. 

        Removed WebFoundation.framework as a dependency in
        the project file.

        * History.subproj/WebHistory.m:
        * History.subproj/WebHistoryItem.m:
        * History.subproj/WebHistoryPrivate.m:
        * History.subproj/WebURLsWithTitles.m:
        * Misc.subproj/WebDownload.h:
        * Misc.subproj/WebDownload.m:
        * Misc.subproj/WebFileDatabase.m:
        * Misc.subproj/WebIconDatabase.m:
        * Misc.subproj/WebIconLoader.m:
        * Misc.subproj/WebKitErrors.m:
        * Misc.subproj/WebKitErrorsPrivate.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        * Misc.subproj/WebNSViewExtras.m:
        * Panels.subproj/WebAuthenticationPanel.h:
        * Panels.subproj/WebAuthenticationPanel.m:
        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * Plugins.subproj/WebNetscapePluginStream.m:
        * Plugins.subproj/WebNullPluginView.m:
        * Plugins.subproj/WebPluginController.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebCookieAdapter.m:
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebDefaultFrameLoadDelegate.m:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        * WebView.subproj/WebDefaultUIDelegate.m:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLRepresentation.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebImageRepresentation.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebPreferences.m:
        * WebView.subproj/WebTextRepresentation.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.m:

2003-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3255088 - repro crash in WebCredentialStorage remembering password from onlinetrafficsafety.com

        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate frame:sourceFrame:willSubmitForm:withValues:submissionListener:]): Expect sourceFrame
        argument.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]): Include
        source frame in form state.
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        Include source frame in form state. Post directly to the target
        frame if it exists, since we want the form state to contain the
        right source frame.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]): Pass source frame to form
        delegate.
        (-[WebFormState initWithForm:values:sourceFrame:]): New sourceFrame argument.
        (-[WebFormState dealloc]): release sourceFrame.
        (-[WebFormState sourceFrame]): New method.

2003-05-16  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Gramps

        Moved in WebDatabase and WebFileDatabase files from WebFoundation.

        Copied NSLRUFileList from WebFoundation and renamed to WebLRUFileList.

        Updated StringsNotToBeLocalized.txt.

        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebDatabase.h:
        * Misc.subproj/WebDatabase.m:
        * Misc.subproj/WebFileDatabase.h:
        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabaseOp initWithCode:key:object:]):
        (-[WebFileDatabaseOp perform:]):
        (SetThreadPriority):
        (-[WebFileDatabase _createLRUList:]):
        (-[WebFileDatabase _truncateToSizeLimit:]):
        (+[WebFileDatabase _syncLoop:]):
        (-[WebFileDatabase setObject:forKey:]):
        (-[WebFileDatabase removeObjectForKey:]):
        (-[WebFileDatabase removeAllObjects]):
        (-[WebFileDatabase objectForKey:]):
        (-[WebFileDatabase performSetObject:forKey:]):
        (-[WebFileDatabase performRemoveObjectForKey:]):
        (-[WebFileDatabase close]):
        (-[WebFileDatabase lazySync:]):
        (-[WebFileDatabase sync]):
        (-[WebFileDatabase count]):
        (-[WebFileDatabase usage]):
        * Misc.subproj/WebIconDatabase.m:
        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * Misc.subproj/WebLRUFileList.h: Added.
        * Misc.subproj/WebLRUFileList.m: Added.
        (WebLRUFileListCreate):
        (WebLRUFileListRelease):
        (WebLRUFileListRebuildFileDataUsingRootDirectory):
        (WebLRUFileListRemoveFileWithPath):
        (WebLRUFileListTouchFileWithPath):
        (WebLRUFileListSetFileData):
        (WebLRUFileListGetPathOfOldestFile):
        (WebLRUFileListRemoveOldestFileFromList):
        (WebLRUFileListContainsItem):
        (WebLRUFileListGetFileSize):
        (WebLRUFileListCountItems):
        (WebLRUFileListGetTotalSize):
        (WebLRUFileListRemoveAllFilesFromList):
        (compareTimes):
        (cStringEqual):
        (cStringHash):
        (NSLRUFileDataEqual):
        (WebLRUFileListGetOldestFileData):
        (NSLRUFileDataReleaseApplierFunction):
        (NSLRUFileDataRelease):
        (NSLRUFileDataBinaryHeapDumpApplierFunction):
        (NSLRUFileDataDictDumpApplierFunction):
        (WebLRUFileListDescription):
        * WebKit.pbproj/project.pbxproj:

2003-05-15  Chris Blumenberg  <cblu@apple.com>

                Fixed: 3199310 - No user agent included in favicon.ico requests

        Reviewed by kocienda.

        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoaderPrivate dealloc]): use the request ivar
        (-[WebIconLoader URL]): ditto
        (-[WebIconLoader startLoading]): ditto
        (-[WebIconLoader connection:didReceiveData:]): ditto
        (-[WebIconLoader connectionDidFinishLoading:]): ditto
        * WebView.subproj/WebDataSourcePrivate.m: 
        (-[WebDataSource _loadIcon]): create a icon loader with a request with the extra fields set

2003-05-15  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3155760 - Plug-in MIME and extension mapping should be case-insensitive

        Reviewed by john.

        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage getPluginInfoFromBundleAndMIMEDictionary:]): store the extensions and MIMEs as lowercase strings
        (-[NSArray _web_lowercaseStrings]): new, returns array of lowercase strings
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]): store the extensions and MIMEs as lowercase strings
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForMIMEType:]): lowercase the passed MIME type
        (-[WebPluginDatabase pluginForExtension:]): lowercase the passed extension

=== Safari-79 ===

2003-05-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Updated for recent changes.

        * English.lproj/StringsNotToBeLocalized.txt:

2003-05-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Changed the names of some extras files in WebFoundation:
        Updated imports and usages in this project.

        WebNSCalendarDateExtras -> NSCalendarDate_NSURLExtras
        WebNSDataExtras -> NSData_NSURLExtras
        WebNSDictionaryExtras -> NSDictionary_NSURLExtras
        WebNSErrorExtras -> NSError_NSURLExtras
        WebNSFileManagerExtras -> NSFileManager_NSURLExtras
        WebNSObjectExtras -> NSObject_NSURLExtras
        WebNSStringExtras -> NSString_NSURLExtras
        WebNSURLExtras -> NSURL_NSURLExtras
        WebNSUserDefaultsExtras -> NSUserDefaults_NSURLExtras

        * History.subproj/WebHistory.m:
        * History.subproj/WebHistoryItem.m:
        * History.subproj/WebHistoryPrivate.m:
        * History.subproj/WebURLsWithTitles.m:
        * Misc.subproj/WebIconDatabase.m:
        * Misc.subproj/WebIconLoader.m:
        * Misc.subproj/WebKitErrors.m:
        * Misc.subproj/WebNSPasteboardExtras.m:
        * Misc.subproj/WebNSViewExtras.m:
        * Panels.subproj/WebAuthenticationPanel.m:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * Plugins.subproj/WebNullPluginView.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebCookieAdapter.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        * WebView.subproj/WebDataProtocol.m:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebPreferences.m:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.m:

2003-05-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        WebKitSystemBits files that contain a system memory size
        getter. This function is used in a few of places in WebKit.

        * History.subproj/WebBackForwardList.m:
        * Misc.subproj/WebKitSystemBits.h: Added.
        * Misc.subproj/WebKitSystemBits.m: Added.
        (initCapabilities):
        (WebSystemMainMemory):
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        * WebKit.pbproj/project.pbxproj:

2003-05-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by David

        File and class renaming in WebFoundation:

        WebFileTypeMappings -> NSURLFileTypeMappings

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge MIMETypeForPath:]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory supportedMIMETypes]):
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebViewPrivate.m:
        (+[WebView suggestedFileExtensionForMIMEType:]):
        (+[WebView _MIMETypeForFile:]):

2003-05-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej

        Copied WebLocalizableStrings.[hm] from WebFoundation to WebKit

        Updated all imports.

        Added logging exported symbols to exports file.

        * Misc.subproj/WebKitErrors.m:
        * Misc.subproj/WebLocalizableStrings.h: Added.
        * Misc.subproj/WebLocalizableStrings.m: Added.
        * Panels.subproj/WebAuthenticationPanel.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebFileButton.m:
        * WebCoreSupport.subproj/WebViewFactory.m:
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:

2003-05-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Don.

        - fixed 3257307 - REGRESSION: crash using onFocus="this.blur()"
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge makeFirstResponder:]): Let the WebView know that
        this is a programmatic focus.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView becomeFirstResponder]): Check if this is a programmatic
        focus from WebCore - if so, treat it like a direct focus, even if there
        is a selection direction set.
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _pushPerformingProgrammaticFocus]): New method to indicate
        upcoming programmatic focus.
        (-[WebView _popPerformingProgrammaticFocus]): New method to indicate
        end of programmatic focus. Needs to nest with the previous.
        (-[WebView _isPerformingProgrammaticFocus]): Check if we are handling
        a programmatic focus from WebCore. 

2003-05-14  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Copied WebAssertions.[hm] from WebFoundation to WebKit

        Updated all imports.

        Added logging exported symbols to exports file.

        * History.subproj/WebBackForwardList.m:
        * History.subproj/WebHistory.m:
        * History.subproj/WebHistoryItem.m:
        * Misc.subproj/WebAssertions.h: Added.
        * Misc.subproj/WebAssertions.m: Added.
        (vprintf_stderr_objc):
        (WebReportAssertionFailure):
        (WebReportAssertionFailureWithMessage):
        (WebReportArgumentAssertionFailure):
        (WebReportFatalError):
        (WebReportError):
        (WebLog):
        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        * Misc.subproj/WebStringTruncator.m:
        * Panels.subproj/WebAuthenticationPanel.m:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebCookieAdapter.m:
        * WebCoreSupport.subproj/WebFileButton.m:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        * WebCoreSupport.subproj/WebJavaScriptTextInputPanel.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        * WebCoreSupport.subproj/WebViewFactory.m:
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        * WebView.subproj/WebClipView.m:
        * WebView.subproj/WebDataProtocol.m:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebImageView.m:
        * WebView.subproj/WebTextRepresentation.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.m:

2003-05-13  Richard Williamson   <rjw@apple.com>

        Fixed 3014661.  We now display (a lame Lemay) image
        when an image fails to load.  We also display the 
        alt text if it fits within the image container
        above the missing image icon.  Alt text is also
        now shown if image loading is disabled.

        Reviewed by John.

        * Resources/missing_image.tiff: Added.
        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]):
        (-[WebImageRenderer initWithData:MIMEType:]):
        (-[WebImageRenderer initWithContentsOfFile:]):
        (-[WebImageRenderer copyWithZone:]):
        (-[WebImageRenderer isNull]):
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory imageRendererWithName:]):
        * WebKit.pbproj/project.pbxproj:

2003-05-13  Darin Adler  <darin@apple.com>

        Reviewed by Chris and Richard.

        - fixed 3257296 -- REGRESSION: crash in WebImageRendererFactory (movietickets.com)

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithMIMEType:]): Check for nil.
        (-[WebImageRenderer initWithData:MIMEType:]): Check for nil, also don't check for GIF signature
        until after the object is allocated.

2003-05-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3254484 - Add a way to print JavaScript exceptions to the console via the debug menu

        * Misc.subproj/WebCoreStatistics.h:
        * Misc.subproj/WebCoreStatistics.m:
        (+[WebCoreStatistics shouldPrintExceptions]): Call through to WebCore.
        (+[WebCoreStatistics setShouldPrintExceptions:]): Call through to WebCore.

2003-05-13  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3120355 -- importing IE favorites garbles non-ASCII characters (esp. bad for non-Roman languages)

        * WebView.subproj/WebViewPrivate.h: Added _decodeData:.
        * WebView.subproj/WebViewPrivate.m: (+[WebView _decodeData:]): Added. Calls through to WebCore.

2003-05-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - renamed NSErrorFailingURLKey to NSErrorFailingURLStringKey

        * Misc.subproj/WebKitErrors.m:
        (-[NSError _initWithPluginErrorCode:contentURLString:pluginPageURLString:pluginName:MIMEType:]):

2003-05-13  John Sullivan  <sullivan@apple.com>

        fixed build break

        Reviewed by Darin

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer initWithData:MIMEType:]):
        move #ifdefs; two required methods were being #ifdeffed
        out on Panther

2003-05-12  Richard Williamson  <rjw@apple.com>

        Fixed 3251316.  *** Public API Change ***

        Added -(void)setGroupName:(NSString *) and -(NSString *)groupName;
        
        Reviewed by mjs.

        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:

2003-05-12  Richard Williamson  <rjw@apple.com>

        Fixed 3194614 and 3194751.  Add SPI to set 'renderless' mode
        for a frame.
        
        Reviewed by darin.  

        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        
        WebImageRenderers now get a MIME type that can be used to faciliate
        selection of an appropriate decoder.
        
        Reviewed by darin.

        * WebCoreSupport.subproj/WebImageRenderer.h:
        * WebCoreSupport.subproj/WebImageRenderer.m:
        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        * WebKit.pbproj/project.pbxproj:

2003-05-12  John Sullivan  <sullivan@apple.com>

        - addition to Darin's previous patch; when checking whether a request can
        be handled, take into account the schemes that were registered without
        an NSURLProtocol getting involved.

        Reviewed by Darin

        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (+[WebView _canHandleRequest:]):
        like NSURLConnection canHandleRequest, but also takes into account the
        schemes that were registered without an NSURLProtocol
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]):
        use +[WebView _canHandleRequest] instead of +[NSURLConnection canHandleRequest]
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        ditto
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        ditto
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueAfterNavigationPolicy:]):
        ditto

2003-05-12  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3254576 -- REGRESSION: visiting bookmarks view sometimes waits for other tabs to load first

        * WebView.subproj/WebViewPrivate.h: Added new SPI for registering view and represenation classes by
        scheme rather than MIME type.
        * WebView.subproj/WebViewPrivate.m:
        (+[WebView _registerViewClass:representationClass:forURLScheme:]]): Added.
        (+[WebView _generatedMIMETypeForURLScheme:]): Added. Makes a special MIME type for us only by the
        special "register scheme" mechanism.
        (+[WebView _representationExistsForURLScheme:]): Added.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Check for schemes that have their
        own representation, and handle them just like empty documents, loading no data, and doing it synchronously.
        (-[WebMainResourceClient loadWithRequest:]): Same thing here, only also arrange to get the appropriate
        MIME type.
        (-[WebMainResourceClient setDefersCallbacks:]): Same check here.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-05-11  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView layoutToPageWidth:]): Added a check for nil that I forgot.

2003-05-10  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3254473 - REGRESSION: reload loop due to onresize handler (fortune.com, flipdog.com, stanford.edu)

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView layoutToPageWidth:]): Don't send out a resize event any
        time during the first event that results in a layout. The old check was merely for the first layout,
        but we need to ignore any number of layouts that are all part of handling a first event. Some day we
        may need to refine this rule even further, but this fixes the present bug.
        
        * WebView.subproj/WebHTMLViewPrivate.h: Goodbye laidOutAtLeastOnce, hello firstLayoutEventTime.

2003-05-10  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3250119 -- REGRESSION: WebFrame leaked after showing pop-up menu

        The leak was caused by various code storing the "element" dictionary that describes where
        a click took place.

        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        Don't store the element in a retained global. Instead attach it as the represented
        object to each menu item.
        (-[WebDefaultUIDelegate openNewWindowWithURL:element:]): Pass in an element.
        (-[WebDefaultUIDelegate downloadURL:element:]): Ditto.
        (-[WebDefaultUIDelegate openLinkInNewWindow:]): Get element from represented object.
        (-[WebDefaultUIDelegate downloadLinkToDisk:]): Ditto.
        (-[WebDefaultUIDelegate copyLinkToClipboard:]): Ditto.
        (-[WebDefaultUIDelegate openImageInNewWindow:]): Ditto.
        (-[WebDefaultUIDelegate downloadImageToDisk:]): Ditto.
        (-[WebDefaultUIDelegate copyImageToClipboard:]): Ditto.
        (-[WebDefaultUIDelegate openFrameInNewWindow:]): Ditto.

        * WebView.subproj/WebDefaultUIDelegate.h: Remove element field.
        * WebView.subproj/WebDefaultUIDelegate.m: (-[WebDefaultUIDelegate dealloc]): No need
        to release element any more.

        * WebView.subproj/WebHTMLViewPrivate.h: Remove dragElement instance variable.
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLViewPrivate dealloc]): No need to release dragElement any more. 
        (-[WebHTMLView _handleMouseDragged:]): Get element again here. The old code used to
        get it from an instance variable, but that is unnecessary.
        (-[WebHTMLView _mayStartDragWithMouseDragged:]): Don't store the element.

2003-05-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Updated for NSURLResponse API changes.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoading]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient loadWithRequest:]):

2003-05-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - removed WebAuthenticationChallenge
        - adjusted everything for removal of NSURLAuthenticationChallenge subclasses.
        * Misc.subproj/WebDownload.m:
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]):
        (-[WebDownloadInternal download:didCancelAuthenticationChallenge:]):
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler startAuthentication:window:]):
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]):
        * WebView.subproj/WebAuthenticationChallenge.h: Removed.
        * WebView.subproj/WebAuthenticationChallenge.m: Removed.
        * WebView.subproj/WebAuthenticationChallengeInternal.h: Removed.
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate cancelAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate setIdentifier:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:didCancelAuthenticationChallenge:fromDataSource:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * Misc.subproj/WebKit.h: Remove headers that are gone.
        * WebKit.exp: Remove classes that are gone.
        * WebKit.pbproj/project.pbxproj: Remove files that are gone.

2003-05-09  David Hyatt  <hyatt@apple.com>

        Change the minfontsize to 1, i.e., to have no minimum.  This
        matches other browsers while still retaining the pref control
        in WebKit.

        Fixes www.gamespot.com.  The bug is 3254489.
        Reviewed by darin

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):

2003-05-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        Rename connection:didFailLoadingWithError: to
        connection:didFailWithError: to match NSURLDownload and
        NSURLProtocol.

        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader connection:didFailWithError:]):
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream connection:didFailWithError:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connection:didFailWithError:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didFailWithError:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]):
        (-[WebMainResourceClient connection:didFailWithError:]):

2003-05-09  Richard Williamson  <rjw@apple.com>

        Apply the same check used to by-pass fast rendering
        in the fix to 3146161 to measurement.
        
        Reviewed by Ken.

        * Misc.subproj/WebKitNSStringExtras.m:

2003-05-09  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Removed unneeded import of WebFoundation/WebQueue.h.

        * WebCoreSupport.subproj/WebTextRendererFactory.h

2003-05-08  Richard Williamson  <rjw@apple.com>

        Fixed 3146161.  Use the AppKit to render complex
        text in the simple string drawing method.

        Reviewed by John.

        * Misc.subproj/WebKitNSStringExtras.m:

2003-05-08  Richard Williamson  <rjw@apple.com>

        Make representations without intrinsic titles return nil.
        
        Reviewed by John.

        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebImageRepresentation.m:
        * WebView.subproj/WebTextRepresentation.m:

2003-05-08  Richard Williamson   <rjw@apple.com>

        Fixed 3252460.  *** Public API Change ***
        Added title method to WebDocumentRepresentation.
        
        Fixed 3250352.  Check that delegate implements method.
        
        Reviewed by hyatt.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource pageTitle]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _title]):
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation title]):
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation title]):
        * WebView.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation title]):
        * WebView.subproj/WebTextRepresentation.h:
        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation dealloc]):
        (-[WebTextRepresentation setDataSource:]):
        (-[WebTextRepresentation title]):

2003-05-08  Darin Adler  <darin@apple.com>

        * WebKit.pbproj/project.pbxproj: Fixed paths for non-Panther builds.

2003-05-08  John Sullivan  <sullivan@apple.com>

        Closed up all gaps in WebKit between "ASSERT" and "(" to
        make Darin's day a little brighter.

        Reviewed by Darin

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]):
        (-[WebBridge handleMouseDragged:]):
        (-[WebBridge mayStartDragWithMouseDragged:]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate _releaseResources]):
        (-[WebBaseResourceHandleDelegate dealloc]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _preferencesChangedNotification:]):

2003-05-08  John Sullivan  <sullivan@apple.com>

        - fixed 3252632 -- Registering a WebDocumentView too 
        early breaks built-in image viewing

        A startup-performance optimization was breaking the case
        where clients registered WebDocumentView types before the
        first WebFrameView had been created. The fix is to allow
        registering WebDocumentView types without retrieving the
        built-in image types.

        Reviewed by Darin

        * WebView.subproj/WebFrameViewPrivate.h:
        remove _viewTypes; expose _viewTypesAllowImageTypeOmission.
        All callers have to specify the boolean now.

        * WebView.subproj/WebFrameViewPrivate.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        assert that the list of image types isn't nil before inserting
        them; insert each image type only if not already present.
        (+[WebFrameView _viewClassForMIMEType:]):
        replace _viewTypes with _viewTypesAllowImageTypeOmission

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase init]):
        replace _viewTypes with _viewTypesAllowImageTypeOmission

        * WebView.subproj/WebDataSourcePrivate.h:
        remove _repTypes; expose _repTypesAllowImageTypeOmission.
        All callers have to specify the boolean now.
        * WebView.subproj/WebDataSourcePrivate.m:
        (+[WebDataSource _representationClassForMIMEType:]):
        replace _repTypes with _repTypesAllowImageTypeOmission

        * WebView.subproj/WebView.m:
        (+[WebView registerViewClass:representationClass:forMIMEType:]):
        replace _viewTypes with _viewTypesAllowImageTypeOmission, and
        replace _repTypes with _repTypesAllowImageTypeOmission

2003-05-08  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3242414 -- REGRESSION: PLT times reported 10% slower after emptying cache with B/F cache enabled
        - made it only compute the page cache size once

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList init]): Set initial page cache size to special value, COMPUTE_DEFAULT_PAGE_CACHE_SIZE.
        (-[WebBackForwardList setPageCacheSize:]): Remove code to set pageCacheSizeModified and call to
        _setUsesPageCache:, not needed any more.
        (-[WebBackForwardList pageCacheSize]): If cache size is COMPUTE_DEFAULT_PAGE_CACHE_SIZE, then compute it.
        The old code would compute the cache size each time this method was called until pageCacheSizeModified was set.
        (-[WebBackForwardList _usesPageCache]): Just check pageCacheSize for 0 to see if we use a page cache.
        No need for a separate boolean any more.
        
        * History.subproj/WebHistoryItemPrivate.h: Remove _setUsesPageCache (gone altogether) and _clearPageCache
        (now only used internally).

=== Safari-78 ===

2003-05-07  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3127927 -- web view should not use primary selection color when it's not first responder

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateTextBackgroundColor]): Added. Sets the usesInactiveTextBackgroundColor flag
        on the bridge, and does setNeedsDisplayInRect: of the selectionRect if the state changes.
        (-[WebHTMLView viewDidMoveToWindow]): Call updateTextBackgroundColor.
        (-[WebHTMLView windowDidBecomeKey:]): Call updateTextBackgroundColor.
        (-[WebHTMLView windowDidResignKey:]): Call updateTextBackgroundColor.
        (-[WebHTMLView becomeFirstResponder]): Call updateTextBackgroundColor.
        (-[WebHTMLView resignFirstResponder]): Call updateTextBackgroundColor.

        - fixed up WebHistoryItem initializers so there is a designated initializer

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem init]): Call initWithURLString:title:lastVisitedTimeInterval:,
        which is the designated initializer.
        (-[WebHistoryItem initWithURL:title:]): Ditto.
        (-[WebHistoryItem initWithURL:target:parent:title:]): Ditto.

        - other changes

        * History.subproj/WebHistoryPrivate.m: (-[WebHistoryPrivate addItem:]): Fixed assertion
        to not use _lastVisitedDate; we're trying to get rid of calls to that method.

2003-05-07  Vicki Murley  <vicki@apple.com>

        Reviewed by darin.

        - modify the Mixed build style to build optimized with symbols

        * WebKit.pbproj/project.pbxproj: removed OPTIMIZATION_CGLAGS

2003-05-06  Richard Williamson   <rjw@apple.com>

        Fixed problem for HelpViewer.  HV calls stopLoading in 
        a webView:resource:didReceiveResponse.  This causes
        the premature release of the connection delegate.
        
        Reviewed by Ken.

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connectionDidFinishLoading:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate _releaseResources]):
        (-[WebBaseResourceHandleDelegate dealloc]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient stopLoadingForPolicyChange]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient continueAfterContentPolicy:]):
        (-[WebMainResourceClient connection:didReceiveResponse:]):
        (-[WebMainResourceClient connectionDidFinishLoading:]):

2003-05-06  Darin Adler  <darin@apple.com>

        - removed obsolete file that's still around for some reason

        * Downloads.subproj/WebDownload.m: Removed.

2003-05-06  Darin Adler  <darin@apple.com>

        - fixed crash on startup

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem initWithURLString:title:lastVisitedTimeInterval:]):
        Allocate WebHistoryItemPrivate.

2003-05-06  Darin Adler  <darin@apple.com>

        - fixed 3249211 -- WebTextRenderer.h should not use "AttributeGroup" type for styleGroup

        * WebCoreSupport.subproj/WebTextRenderer.h: Update to use ATSStyleGroupPtr.

2003-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - used ObjectAlloc to find large numbers of allocations on startup and get rid of some

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        Use the init method that takes a URL string so we don't have to create and then
        destroy a URL for each item we decode.
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate addItem:]): Use URLString instead of making and destroying
        a URL each time this is called.
        (-[WebHistoryPrivate removeItem:]): Ditto.
        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]): Check URLString for nil; no reason
        to construct and then destroy a URL just to check validity.
        
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (FontCacheKeyCopy): Added.
        (FontCacheKeyFree): Added.
        (FontCacheKeyEqual): Added.
        (FontCacheKeyHash): Added.
        (FontCacheValueRetain): Added.
        (FontCacheValueRelease): Added.
        (-[WebTextRendererFactory cachedFontFromFamily:traits:size:]): Use a C struct for the
        font cache key instead of using an Objective-C object. This saves us an object
        allocation and deallocation when doing a lookup. Also took advantage of the CFDictionary
        ability to store NULL and distinguish it from "not found" so we don't need a separate set
        for cache misses.

2003-05-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        Fix build by separating mutating data protocol methods into
        category on NSMutableURLRequest. Also, formatting fixes.

        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (+[NSURLRequest _webDataRequestURLForData:]):
        (-[NSURLRequest _webDataRequestData]):
        (-[NSURLRequest _webDataRequestEncoding]):
        (-[NSURLRequest _webDataRequestMIMEType]):
        (-[NSURLRequest _webDataRequestBaseURL]):
        (-[NSURLRequest _webDataRequestExternalRequest]):
        (-[NSMutableURLRequest _webDataRequestSetData:]):
        * WebView.subproj/WebFrame.m:

2003-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed a storage leak

        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _setState:]): Release the timer before setting to nil.

2003-05-03  David Hyatt  <hyatt@apple.com>

        Add smallCaps boolean to the string measuring and drawing
        methods.  Not actually supported yet.
        Reviewed by darin

        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_widthWithFont:]):
        * Misc.subproj/WebStringTruncator.m:
        (stringWidth):
        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer widthForCharacters:length:]):
        (-[WebTextRenderer drawCharacters:stringLength:fromCharacterPosition:toCharacterPosition:atPoint:withPadding:withTextColor:backgroundColor:rightToLeft:letterSpacing:wordSpacing:smallCaps:fontFamilies:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:characterPosition:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:]):
        (-[WebTextRenderer floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding:attemptFontSubstitution:widths:letterSpacing:wordSpacing:smallCaps:fontFamilies:]):
        (-[WebTextRenderer _floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding:attemptFontSubstitution:widths:fonts:glyphs:numGlyphs:letterSpacing:wordSpacing:smallCaps:fontFamilies:]):

2003-05-04  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - added validation to "Interface Builder" methods on WebView

        * WebView.subproj/WebView.h: Add NSUserInterfaceValidations protocol so that subclassers
        know that they can call [super validateUserInterfaceItem:].
        * WebView.subproj/WebView.m:
        (-[WebView canMakeTextSmaller]): Simplify.
        (-[WebView canMakeTextLarger]): Simplify.
        (-[WebView _isLoading]): Added.
        (-[WebView validateUserInterfaceItem:]): Added. Checks for the six actions we implement,
        and returns NO if they are not valid.

2003-05-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        - reformatted method prototypes to match AppKit style
        - remove "Public header file" from headers that are not public
        - fix header doc @method names to match actual method names

        * Carbon.subproj/CarbonWindowAdapter.h:
        * Carbon.subproj/HIViewAdapter.h:
        * DOM.subproj/WebDOMDocument.h:
        * DOM.subproj/WebDOMNode.h:
        * History.subproj/WebBackForwardList.h:
        * History.subproj/WebHistoryItemPrivate.h:
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebURLsWithTitles.h:
        * Misc.subproj/WebIconDatabase.h:
        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebUnicode.h:
        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNullPluginView.h:
        * Plugins.subproj/WebPluginViewFactory.h:
        * WebCoreSupport.subproj/WebGlyphBuffer.h:
        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRendererFactory.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebControllerSets.h:
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDebugDOMNode.h:
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFrameView.h:
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebPolicyDelegatePrivate.h:
        * WebView.subproj/WebPreferencesPrivate.h:
        * WebView.subproj/WebRenderNode.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebViewPrivate.h:

2003-05-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 2936175 - MALLORY: please implement onResize

        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:]): If we just resized and we're
        not printing, make sure to send a resize event after the layout.

2003-05-02  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3236383 -- http://www.xy.com/ exception, crash loading main page

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge closeWindowSoon]): Replaces
        closeWindow. Schedule a closeWindow operation in the WebView. Important to not have
        the call's execution depend on whether this WebBridge or WebFrame is still around
        after the delay.
        
        * WebView.subproj/WebViewPrivate.h: Added _closeWindow.
        * WebView.subproj/WebViewPrivate.m: (-[WebView _closeWindow]): Make a webViewClose:
        call on the UI delegate.

2003-05-02  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - first step in fixing 3236383 -- http://www.xy.com/ exception, crash loading main page
        
        Changed WebFrame to explicitly detach from the bridge so we don't have a stale pointer;
        also cleaned up WebBridge initialization.

        * WebCoreSupport.subproj/WebBridge.h: Added initWithWebFrame: and close methods, removed
        setWebFrame: method.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame initWithName:webFrameView:webView:]): Use the new initWithWebFrame:.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _detachFromParent]): Call close on the bridge.

        - fixed many places that call a WebView a "controller"

        * Misc.subproj/WebKitStatistics.h:
        * Misc.subproj/WebKitStatistics.m:
        * Misc.subproj/WebKitStatisticsPrivate.h:
        * Misc.subproj/WebNSViewExtras.m:
        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginStream.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        * WebView.subproj/WebControllerSets.h:
        * WebView.subproj/WebControllerSets.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebFrameViewPrivate.h:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebImageView.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:

2003-05-01  John Sullivan  <sullivan@apple.com>

        - fixed 3246045 -- History items without a valid date in 
        History.plist show up with unexpected dates in UI

        Reviewed by Darin.

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        don't set lastVisitedTimeInterval to [nil doubleValue],
        since this is random

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-05-01  Richard Williamson   <rjw@apple.com>

        Added missing header and alphabetized.
        
        Reviewed by Ken.

        * Misc.subproj/WebKit.h:

2003-05-01  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3234888 - REGRESSION: "can't add a plug-in to a defunct WebPluginController" error, then crash
        Fixed: 3226392 - REGRESSION: Safari crashed while loading Java applet at PopCap.com
        
        Reviewed by darin.

        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame setController:]): fixed comment
        * WebView.subproj/WebView.m:
        (-[WebView dealloc]): call [self _close]
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate dealloc]): let the WebView class clear the frames
        (-[WebView _close]): remove self from controller set and detach and release frame

=== Safari-77 ===

2003-05-01  John Sullivan  <sullivan@apple.com>

        - fixed 3245793 -- Launching Safari-75 after tip of tree 
        erases all history

        Reviewed by Chris, Don

        * History.subproj/WebHistoryItem.m:
        keep using "lastVisitedDate" as the dictionary key, since old
        Safaris otherwise can't read the History file.
        (-[WebHistoryItem dictionaryRepresentation]):
        keep storing the time interval as a string, since old Safaris
        otherwise can't read the History file
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        read the stored date as a string and convert to a double,
        as we did before.

2003-05-01  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3169117 -- dragging while using a scroll wheel affects scroll movement

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebNSWindow nextEventMatchingMask:untilDate:inMode:dequeue:]):
        Just return nil when called with NSScrollWheelMask to work around the bug where any
        kind of event can be returned when this mask is passed. This will prevent scroll wheel
        events from being coalesced, but it's better than extracting events of all different
        types. Mouse moved events are particularly bad because they have deltaX/Y/Z and the
        scroll wheel code in NSScrollView treats them as if they were scroll wheel events.

2003-05-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Updated to use approved NSHTTPCookieStorage API.

        +sharedCookieManager -> +sharedHTTPCookieStorage
        -acceptPolicy -> -cookieAcceptPolicy
        -cookieRequestHeaderFieldsForURL: -> -cookiesForURL:
        -setCookiesFromResponseHeader:forURL:policyBaseURL: -> -setCookies:forURL:mainDocumentURL:

        * WebCoreSupport.subproj/WebCookieAdapter.m:
        (-[WebCookieAdapter cookiesEnabled]):
        (-[WebCookieAdapter cookiesForURL:]):
        (-[WebCookieAdapter setCookies:forURL:policyBaseURL:]):

2003-05-01  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-04-30  Kenneth Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Modified WebFoundation error constant names. Names
        now begin with NSURLError prefix.

        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate cancelledError]):
        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoading]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _stopLoadingInternal]):

2003-04-30  Kenneth Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Use NSURLResponse new SPI methods to set instance variables.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoading]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient loadWithRequest:]):

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        Moved NSURLProtectionSpace over to officially blessed API.
        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):

2003-04-30  Richard Williamson   <rjw@apple.com>

        Copy MIME type when copying WebDataProtocol's parameters.
        
        Reviewed by Ken.

        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataRequestParameters copyWithZone:]):

2003-04-30  Richard Williamson   <rjw@apple.com>

        Documentation fixes.
        Added "ADVISORY NOTE" about possible API change after beta SDK.
        
        * History.subproj/WebHistory.h:
        * WebView.subproj/WebUIDelegate.h:

2003-04-30  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej

        Tweaked some HTTP-specific NSURLRequest method names as specified
        in the API errata list.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]):
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultUIDelegate openNewWindowWithURL:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        Minor header tweaks.

        * Misc.subproj/WebDownload.h: Fix copyright notice.
        * Panels.subproj/WebAuthenticationPanel.h: Added 2003 to copyright.
        * WebView.subproj/WebAuthenticationChallenge.h: Fix copyright notice, add docs.
        * WebView.subproj/WebAuthenticationChallengeInternal.h: Fix copyright notice.

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        Minor header tweaks.

        * Misc.subproj/WebDownload.h: Fix copyright notice.
        * Panels.subproj/WebAuthenticationPanel.h: Added 2003 to copyright.
        * WebView.subproj/WebAuthenticationChallenge.h: Fix copyright notice, add docs.
        * WebView.subproj/WebAuthenticationChallengeInternal.h: Fix copyright notice.

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Fixed imports and @class directives for WebFoundation changes.

        * Panels.subproj/WebAuthenticationPanel.h:
        * Panels.subproj/WebAuthenticationPanel.m:

2003-04-30  Richard Williamson   <rjw@apple.com>

        Fixed doc errors.
        
        * History.subproj/WebHistory.h:

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Some simple renames:

        sharedURLCredentialStorage --> sharedCredentialStorage
        URLCredentialWithUser:password:persistence: --> credentialWithUser:password:persistence:

        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel runAsModalDialogWithChallenge:]):
        (-[WebAuthenticationPanel sheetDidEnd:returnCode:contextInfo:]):

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Changed things to use WebAuthenticationChallenge for
        WebResoureceLoadDelegate auth callbacks.

        * Panels.subproj/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler startAuthentication:window:]):
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebAuthenticationChallenge.h: Added.
        * WebView.subproj/WebAuthenticationChallenge.m: Added.
        (-[WebAuthenticationChallengeInternal initWithDelegate:]):
        (-[WebAuthenticationChallengeInternal dealloc]):
        (-[WebAuthenticationChallenge _initWithAuthenticationChallenge:delegate:]):
        (-[WebAuthenticationChallenge dealloc]):
        (-[WebAuthenticationChallenge useCredential:]):
        (-[WebAuthenticationChallenge cancel]):
        (-[WebAuthenticationChallenge continueWithoutCredential]):
        * WebView.subproj/WebAuthenticationChallengeInternal.h: Added.
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate useCredential:forAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate continueWithoutCredentialForAuthenticationChallenge:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:didCancelAuthenticationChallenge:fromDataSource:]):
        * WebView.subproj/WebResourceLoadDelegate.h:

2003-04-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        Converted download code to use an
        NSURLDownloadAuthenticationChallenge rather than a vanilla
        NSURLAuthenticationChallenge.

        * Misc.subproj/WebDownload.m:
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]):
        (-[WebDownloadInternal download:didCancelAuthenticationChallenge:]):
        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler startAuthentication:window:]):
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]):

2003-04-30  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Changed cookie-related constants and enums to 
        the API-approved names. Also did some text
        search and replace in comments to catch usages
        of now-obsolete names.

        * WebCoreSupport.subproj/WebCookieAdapter.m:
        (-[WebCookieAdapter cookiesEnabled]):

2003-04-30  Chris Blumenberg  <cblu@apple.com>

        FIXED: Clients of WebKit should have separate icon DB's

        Reviewed by rjw.

        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebIconDatabase.h:
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _createFileDatabase]): If the icon db hasn't been set using the defaults, create o directory using the bundle id. 
        * WebKit.exp:

2003-04-30  Richard Williamson   <rjw@apple.com>

        API changes from final review meeting.
        
        Moved view registry to WebView.
        Changed WebHistoryItem to use NSTimeInterval (at least for public API).
        Still creates a NSCalendarDate for compatibility.  We should wean Safari
        off it's use of NSCalendarDate.
        Added public init method for WebHistoryItem.
        Removed anchor from WebHistoryItem.
        Added WebHistorySavedNotification.
        
        Reviewed by Darin.

        * History.subproj/WebHistory.m:
        (-[WebHistory addItemForURL:]):
        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem initWithURLString:title:lastVisitedTimeInterval:]):
        (-[WebHistoryItem copyWithZone:]):
        (-[WebHistoryItem lastVisitedTimeInterval]):
        (-[WebHistoryItem anchor]):
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
        (-[WebHistoryItem _lastVisitedDate]):
        (-[WebHistoryItem dictionaryRepresentation]):
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * History.subproj/WebHistoryItemPrivate.h:
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate insertItem:atDateIndex:]):
        (-[WebHistoryPrivate removeItemForURLString:]):
        (-[WebHistoryPrivate addItem:]):
        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]):
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase init]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (+[WebView registerViewClass:representationClass:forMIMEType:]):

2003-04-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Adjusted for authentication API change - now we expect
        authentication via the connection delegate, not a separate global
        authentication handler

        * Misc.subproj/WebKit.h: Include WebDownload.h
        * Misc.subproj/WebDownload.h: Added.
        * Misc.subproj/WebDownload.m: Added - this new class is just like NSURLDownload
        but if the standard auth delegate methods are not implemented, it prompts using
        the standard AppKit sheet.
        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        (+[WebPanelAuthenticationHandler sharedHandler]): New method to get a shared
        handler, since we no logner register an instance with WebFoundation.
        (-[WebPanelAuthenticationHandler startAuthentication:window:]): Do things
        using the new API.
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]):
        Likewise.
        * WebKit.exp: Export WebDownload.
        * WebKit.pbproj/project.pbxproj: Add new files to  build.

        - Removed WebStandardPanels - this is removed from the API.
        
        * Panels.subproj/WebStandardPanels.h: Removed.
        * Panels.subproj/WebStandardPanels.m: Removed.
        * Panels.subproj/WebStandardPanelsPrivate.h: Removed.
        * Panels.subproj/WebAuthenticationPanel.m: Remove WebStandardPanels.h import.

        - Added new resource load delegate auth methods:
        * WebView.subproj/WebResourceLoadDelegate.h:

        - Use WebDownload where appropriate, and remove use of WebStandardPanels:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveAuthenticationChallenge:]):
        Pass to resource load delegate.
        (-[WebBaseResourceHandleDelegate connection:didCancelAuthenticationChallenge:]):
        Likewise.
        (-[WebBaseResourceHandleDelegate dealloc]): Don't track currentURL any more.
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]): Likewise.
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]): Likewise.
        (-[WebBaseResourceHandleDelegate connection:didFailLoadingWithError:]): Likewise.
        (-[WebBaseResourceHandleDelegate cancelWithError:]): Likewise.
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]): 
        Prompt using the standard panel.

        (-[WebDefaultResourceLoadDelegate webView:resource:didCancelAuthenticationChallenge:fromDataSource:]):
        Cancel prompting using the standard panel.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Use WebDownload instead
        of NSURLDownload.
        * WebView.subproj/WebView.h: Remove unneeded @class directives,
        and mention WebDownload instead of NSURLDownload.
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _downloadURL:toDirectory:]): Use WebDownload instead of NSURLDownload.
        (-[WebView _cacheResourceLoadDelegateImplementations]): Track auth methods too.

2003-04-30  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed cookie-related class names:

        WebCookie -> NSHTTPCookie
        WebCookiePrivate -> NSHTTPCookieInternal     
        WebCookieManager -> NSHTTPCookieStorage      
        WebCookieManagerPrivate -> NSHTTPCookieStorageInternal     

        * WebCoreSupport.subproj/WebCookieAdapter.m:
        (-[WebCookieAdapter cookiesEnabled]):
        (-[WebCookieAdapter cookiesForURL:]):
        (-[WebCookieAdapter setCookies:forURL:policyBaseURL:]):

2003-04-30  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed file names for these classes. The contents
        of the files themselves remain unchanged.

        WebCookie -> NSHTTPCookie.
        WebCookieManager -> NSHTTPCookieStorage.

        * WebCoreSupport.subproj/WebCookieAdapter.m:
        * WebView.subproj/WebMainResourceClient.m:

2003-04-30  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - make change to avoid misunderstanding that led to bug report 3179394
          "Safari: Request that temp files use actual file extensions"

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]):
        Don't put a dot between "SafariPlugInStream" and the the 6-digit unique number, so the number
        does not look like an extension. Also make it "WebKitPlugInStream" since this is used for
        other WebKit clients, and not just Safari.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-04-29  Richard Williamson   <rjw@apple.com>

        API changes from final review meeting.
        Added textEncodingName method to WebDataSource.
        
        Reviewed by Chris.

        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource textEncodingName]):

2003-04-29  Chris Blumenberg  <cblu@apple.com>

        Updated to use the new NSURLDownload API.
        Reviewed by rjw.

        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _downloadURL:toDirectory:]):

2003-04-29  Richard Williamson   <rjw@apple.com>

        Added "Copyright (C) 2003 Apple Computer, Inc. All rights reserved."
        to all public headers.  Also made formatting consistent.
    
        Reviewed by darin.

        * Carbon.subproj/CarbonUtils.h:
        * Carbon.subproj/HIWebView.h:
        * History.subproj/WebBackForwardList.h:
        * History.subproj/WebHistory.h:
        * History.subproj/WebHistoryItem.h:
        * Misc.subproj/WebKit.h:
        * Misc.subproj/WebKitErrors.h:
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrameLoadDelegate.h:
        * WebView.subproj/WebFrameView.h:
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebView.h:

2003-04-28  Don Melton  <gramps@apple.com>

        Fixed 3225050 -- Default font size should be 16px
        Fixed 3241813 -- No longer spoof as WinIE for abcnews.go.com when
        default font size becomes 16px

        Reviewed by Darin and Maciej.

        * English.lproj/StringsNotToBeLocalized.txt:

        Updated.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

        We need to adjust Times, Helvetica, and Courier to closely match the
        vertical metrics of their Microsoft counterparts that are the de facto
        web standard.  The AppKit adjustment of 20% is too big and is
        incorrectly added to line spacing, so we use a 15% adjustment instead
        and add it to the ascent.

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):

        Changed default font size from 14 to 16 pixels and default fixed font
        size from 14 to 13 pixels.  Changed standard font from Lucida Grande to
        Times, serif font from Times New Roman to Times, and sans serif font
        from Lucida Grande to Helvetica.  Also replaced some stray tabs with
        spaces and made a few other anal-retentive formatting changes.

        * WebView.subproj/WebUserAgentSpoofTable.c:
        (hash):
        (_web_findSpoofTableEntry):
        * WebView.subproj/WebUserAgentSpoofTable.gperf:

        No longer spoof as Windows MSIE for abcnews.go.com since we've also
        changed the default font size.

2003-04-28  Richard Williamson  <rjw@apple.com>

        API changes from final review meeting.
        
        goBackOrForwardToItem: -> goToBackForwardItem:
        drop "Window" from WebUIDelegate method names.
        WebElementIsSelectedTextKey -> WebElementIsSelectedKey
        Cross-frame searchFor on WebView now public.
        
        Reviewed by Chris.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebKit.exp:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebDefaultUIDelegate.m:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebImageView.m:
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:

2003-04-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Chris

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]): _lastModifiedDate on
        NSURLResponse is now SPI.
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _commitIfReady:]): Ditto.

2003-04-27  Chris Blumenberg  <cblu@apple.com>

        Improved headerdoc comments.
        * Misc.subproj/WebKitErrors.h:
        * WebView.subproj/WebFrameLoadDelegate.h:

2003-04-25  Don Melton  <gramps@apple.com>

        Backed out Richard's (hopefully) accidental checkin of our experiments
        from earlier today.  Otherwise many layout tests are hosed.  But this
        change, or something like it, will arrive soon.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

2003-04-25  Richard Williamson   <rjw@apple.com>

        API changes from final review meeting.
        
        WebView:
        Added canShowMIMETypeAsHTML:

        WebFrameView:
        Removed scrollView
        Removed isDocumentHTML
        
        WebDataSource:
        Removed isDocumentHTML
        
        Reviewed by Chris.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _layoutChildren]):
        (-[WebDataSource _mainDocumentError]):
        (-[WebDataSource _isDocumentHTML]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _makeDocumentView]):
        (-[WebFrame _setState:]):
        (-[WebFrame _isLoadComplete]):
        * WebView.subproj/WebFrameView.h:
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView setAllowsScrolling:]):
        (-[WebFrameView allowsScrolling]):
        (-[WebFrameView documentView]):
        (-[WebFrameView drawRect:]):
        (-[WebFrameView setFrameSize:]):
        * WebView.subproj/WebFrameViewPrivate.h:
        * WebView.subproj/WebFrameViewPrivate.m:
        (-[WebFrameView _setDocumentView:]):
        (-[WebFrameView _scrollView]):
        (-[WebFrameView _contentView]):
        (-[WebFrameView _verticalKeyboardScrollAmount]):
        (-[WebFrameView _horizontalKeyboardScrollAmount]):
        (-[WebFrameView _scrollToBottomLeft]):
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        (+[WebFrameView _canShowMIMETypeAsHTML:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setPrinting:pageWidth:]):
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _updateMouseoverWithEvent:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (+[WebView canShowMIMETypeAsHTML:]):

2003-04-25  Chris Blumenberg  <cblu@apple.com>

        Renamed WebDownload to NSURLDownload and moved it to WebFoundation.

        Reviewed by rjw.

        * Downloads.subproj/WebBinHexDecoder.h: Removed.
        * Downloads.subproj/WebBinHexDecoder.m: Removed.
        * Downloads.subproj/WebDownload.h: Removed.
        * Downloads.subproj/WebDownload.m: Removed.
        * Downloads.subproj/WebDownloadDecoder.h: Removed.
        * Downloads.subproj/WebDownloadPrivate.h: Removed.
        * Downloads.subproj/WebGZipDecoder.h: Removed.
        * Downloads.subproj/WebGZipDecoder.m: Removed.
        * Downloads.subproj/WebMacBinaryDecoder.h: Removed.
        * Downloads.subproj/WebMacBinaryDecoder.m: Removed.
        * Downloads.subproj/crc16.h: Removed.
        * Downloads.subproj/crc16.m: Removed.
        * English.lproj/Localizable.strings:
        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebKit.h:
        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (-[NSError _initWithPluginErrorCode:contentURLString:pluginPageURLString:pluginName:MIMEType:]):
        (registerErrors):
        * Misc.subproj/WebNSWorkspaceExtras.h: Removed.
        * Misc.subproj/WebNSWorkspaceExtras.m: Removed.
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient initWithDataSource:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _downloadURL:toDirectory:]):

2003-04-25  Richard Williamson   <rjw@apple.com>

        Final API review changes.

        parent -> parentFrame
        children -> childFrames

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setPrinting:pageWidth:]):

2003-04-25  Richard Williamson   <rjw@apple.com>

        Final API review changes.

        parent -> parentFrame
        children -> childFrames

        Reviewed by Chris.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge childFrames]):
        (-[WebBridge frameDetached]):

2003-04-25  Richard Williamson   <rjw@apple.com>

        Final API review changes.
        
        WebFrame:
        parent -> parentFrame
        children -> childFrames
        loadString:baseURL: -> loadHTMLString:baseURL:
        laodData:encodingName:baseURL: -> loadData:MIMEType:textEncodingName:baseURL:
        
        Reviewed by Chris.

        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataRequestParameters dealloc]):
        (-[NSURLRequest _webDataRequestMIMEType]):
        (-[NSURLRequest _webDataRequestSetMIMEType:]):
        (-[WebDataProtocol startLoading]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource isLoading]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _recursiveStopLoading]):
        (-[WebDataSource _layoutChildren]):
        (-[WebDataSource _defersCallbacksChanged]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadHTMLString:baseURL:]):
        (-[WebFrame findFrameNamed:]):
        (-[WebFrame parentFrame]):
        (-[WebFrame childFrames]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem]):
        (-[WebFrame _descendantFrameNamed:]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _isLoadComplete]):
        (+[WebFrame _recursiveCheckCompleteFromFrame:]):
        (-[WebFrame _textSizeMultiplierChanged]):
        (-[WebFrame _viewWillMoveToHostWindow:]):
        (-[WebFrame _viewDidMoveToHostWindow]):
        (-[WebFrame _saveDocumentAndScrollState]):
        (-[WebFrame _loadDataSource:withLoadType:formState:]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate _clearControllerReferences:]):
        (-[WebView _frameForDataSource:fromFrame:]):
        (-[WebView _frameForView:fromFrame:]):

2003-04-25  Chris Blumenberg  <cblu@apple.com>

        Don't do "@class WebDataSource" as that class isn't mentioned in this file.

        * WebView.subproj/WebFrameLoadDelegate.h:

2003-04-25  Chris Blumenberg  <cblu@apple.com>

        Turned WebLocationChangeDelegate into WebFrameLoadDelegate. Renamed WebFrameLoadDelegate all methods to pass a frame instead of the data source.

        Reviewed by rjw.

        * English.lproj/Localizable.strings:
        * Misc.subproj/WebKit.h:
        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (registerErrors):
        * WebCoreSupport.subproj/WebBridge.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        * WebView.subproj/WebDefaultFrameLoadDelegate.h: Added.
        * WebView.subproj/WebDefaultFrameLoadDelegate.m: Added.
        (+[WebDefaultFrameLoadDelegate sharedFrameLoadDelegate]):
        (-[WebDefaultFrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didReceiveServerRedirectForProvisionalLoadForFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didReceiveTitle:forFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didFailLoadWithError:forFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didChangeLocationWithinPageForFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        (-[WebDefaultFrameLoadDelegate webView:willCloseFrame:]):
        * WebView.subproj/WebDefaultLocationChangeDelegate.h: Removed.
        * WebView.subproj/WebDefaultLocationChangeDelegate.m: Removed.
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFrameLoadDelegate.h: Added.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _closeOldDataSources]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _isLoadComplete]):
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]):
        (-[WebFrame _clientRedirectedTo:delay:fireDate:lockHistory:]):
        (-[WebFrame _clientRedirectCancelled]):
        * WebView.subproj/WebLocationChangeDelegate.h: Removed.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeError]):
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView setFrameLoadDelegate:]):
        (-[WebView frameLoadDelegate]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate dealloc]):
        (-[WebView _frameLoadDelegateForwarder]):

2003-04-25  John Sullivan  <sullivan@apple.com>

        - fixed 3240676 -- REGRESSION: Using old Safari then new one 
        erases history

        Reviewed by Darin.

        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]):
        The new code to use a synchronous NSURLConnection to read the
        property list file did not take into account the two possible
        formats of the file (NSArray or NSDictionary), so reading
        old-style history files was completely broken. While in here,
        I distributed the variable declarations to first use.

2003-04-24  Maciej Stachowiak  <mjs@apple.com>

        Fixed build.
        * Panels.subproj/WebStandardPanels.m:
        (-[WebStandardPanels setUsesStandardAuthenticationPanel:]):

2003-04-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        Updated for auth API changes.
        * Panels.subproj/WebStandardPanels.m:
        (-[WebStandardPanels setUsesStandardAuthenticationPanel:]): 

2003-04-24  Richard Williamson   <rjw@apple.com>

        Final API review changes.
        
        Renamed WebWindowOperationsDelegate to WebUIDelegate.
        Merged WebContextMenuDelegate into WebUIDelegate.
        Fixed crasher if history file doesn't exist.
        
        Reviewed by Ken.

        * History.subproj/WebHistory.h:
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]):
        * Misc.subproj/WebKit.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView status:]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showStatus:]):
        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge showWindow]):
        (-[WebBridge areToolbarsVisible]):
        (-[WebBridge setToolbarsVisible:]):
        (-[WebBridge isStatusBarVisible]):
        (-[WebBridge setStatusBarVisible:]):
        (-[WebBridge setWindowFrame:]):
        (-[WebBridge windowFrame]):
        (-[WebBridge setWindowContentRect:]):
        (-[WebBridge windowContentRect]):
        (-[WebBridge setWindowIsResizable:]):
        (-[WebBridge windowIsResizable]):
        (-[WebBridge firstResponder]):
        (-[WebBridge makeFirstResponder:]):
        (-[WebBridge closeWindow]):
        (-[WebBridge runJavaScriptAlertPanelWithMessage:]):
        (-[WebBridge runJavaScriptConfirmPanelWithMessage:]):
        (-[WebBridge runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        (-[WebBridge runOpenPanelForFileButtonWithResultListener:]):
        (-[WebBridge setStatusText:]):
        (-[WebBridge focusWindow]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebContextMenuDelegate.h: Removed.
        * WebView.subproj/WebDefaultContextMenuDelegate.h:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebDefaultUIDelegate.h:
        * WebView.subproj/WebDefaultUIDelegate.m:
        (+[WebDefaultUIDelegate sharedUIDelegate]):
        (-[WebDefaultUIDelegate dealloc]):
        * WebView.subproj/WebDefaultWindowOperationsDelegate.h: Removed.
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m: Removed.
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebUIDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView setUIDelegate:]):
        (-[WebView UIDelegate]):
        (-[WebView downloadDelegate]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate init]):
        (-[WebViewPrivate dealloc]):
        (-[WebView _openNewWindowWithRequest:]):
        (-[WebView _menuForElement:]):
        (-[WebView _mouseDidMoveOverElement:modifierFlags:]):
        (-[WebView _UIDelegateForwarder]):
        * WebView.subproj/WebWindowOperationsDelegate.h: Removed.

2003-04-24  Richard Williamson   <rjw@apple.com>

        Final API review changes.

        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setAlternateTitle:]):
        (-[WebHistoryItem initFromDictionaryRepresentation:]):

2003-04-24  Richard Williamson   <rjw@apple.com>

        Final API review changes.
        
        Reviewed by Chris.

        * History.subproj/WebBackForwardList.h:
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList containsItem:]):
        (-[WebBackForwardList capacity]):
        (-[WebBackForwardList setCapacity:]):
        (-[WebBackForwardList _clearPageCache]):
        (-[WebBackForwardList setPageCacheSize:]):
        (-[WebBackForwardList _setUsesPageCache:]):
        (-[WebBackForwardList _usesPageCache]):
        * History.subproj/WebHistory.h:
        * History.subproj/WebHistory.m:
        (+[WebHistory optionalSharedHistory]):
        (+[WebHistory setOptionalSharedHistory:]):
        (-[WebHistory init]):
        (-[WebHistory loadFromURL:error:]):
        (-[WebHistory saveToURL:error:]):
        * History.subproj/WebHistoryItemPrivate.h:
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate init]):
        (-[WebHistoryPrivate dealloc]):
        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]):
        (-[WebHistoryPrivate loadFromURL:error:]):
        (-[WebHistoryPrivate _saveHistoryGuts:URL:error:]):
        (-[WebHistoryPrivate saveToURL:error:]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setTitle:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _canCachePage]):
        (-[WebFrame _purgePageCache]):

2003-04-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris.

        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]): Update for new Challenge API.

2003-04-24  Chris Blumenberg  <cblu@apple.com>

        Renamed - [NSURLResponse suggestedFilenameForSaving] to suggestedFilename and moved it to WebFoundation.

        Reviewed by mjs.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownload _createFileIfNecessary]):
        * English.lproj/Localizable.strings:
        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebNSURLResponseExtras.h: Removed.
        * Misc.subproj/WebNSURLResponseExtras.m: Removed.
        * Plugins.subproj/WebNullPluginView.m: include NSError to unbreak build.
        * WebKit.pbproj/project.pbxproj:

2003-04-24  Chris Blumenberg  <cblu@apple.com>

        Removed WebPluginError and instead added fields to the userInfo of NSError for plug-in specific errors.

        Reviewed by rjw.

        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (+[NSError _webKitErrorWithCode:failingURL:]):
        (-[NSError _initWithPluginErrorCode:contentURLString:pluginPageURLString:pluginName:MIMEType:]):
        * Misc.subproj/WebKitErrorsPrivate.h:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNullPluginView.h:
        * Plugins.subproj/WebNullPluginView.m:
        * Plugins.subproj/WebPlugInError.h: Removed.
        * Plugins.subproj/WebPlugInError.m: Removed.
        * Plugins.subproj/WebPluginErrorPrivate.h: Removed.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURLString:attributes:baseURLString:MIMEType:]):
        (-[WebBridge viewForJavaAppletWithFrame:attributes:baseURLString:]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:plugInFailedWithError:dataSource:]):
        * WebView.subproj/WebResourceLoadDelegate.h:

2003-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 3210096 -- server identifies page as UTF-8, page identifies itself as windows-1252, server must win

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge receivedData:withDataSource:]):
        Change for new WebCore API. Pass the encoding in a separate setEncoding call rather than
        as a parameter in addData. Also don't handle default encoding here any more. Default encoding
        is now handled the same way all the other preferences are, in a way that works better on the
        WebCore side anyway; nil or empty string means use the default encoding.

2003-04-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed WebError to NSError

        * Downloads.subproj/WebDownload.h:
        * Downloads.subproj/WebDownload.m:
        (-[WebDownload connection:didReceiveData:]):
        (-[WebDownload connectionDidFinishLoading:]):
        (-[WebDownload connection:didFailLoadingWithError:]):
        (-[WebDownload _decodeData:]):
        (-[WebDownload _writeDataForkData:resourceForkData:]):
        (-[WebDownload _didCloseFile:]):
        (-[WebDownload _cancelWithError:]):
        (-[WebDownload _errorWithCode:]):
        (CloseCompletionCallback):
        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader connection:didFailLoadingWithError:]):
        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (+[NSError _webKitErrorWithCode:failingURL:]):
        (registerErrors):
        * Misc.subproj/WebKitErrorsPrivate.h:
        * Plugins.subproj/WebNetscapePluginRepresentation.h:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]):
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream connection:didFailLoadingWithError:]):
        * Plugins.subproj/WebPlugInError.h:
        * Plugins.subproj/WebPlugInError.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        (-[WebSubresourceClient receivedError:]):
        (-[WebSubresourceClient connection:didFailLoadingWithError:]):
        * WebKit.exp:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        (-[WebBaseResourceHandleDelegate cancelledError]):
        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoading]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _stopLoadingInternal]):
        (-[WebDataSource _setMainDocumentError:]):
        (-[WebDataSource _receivedError:complete:]):
        (-[WebDataSource _stopLoadingWithError:]):
        (-[WebDataSource _mainDocumentError]):
        * WebView.subproj/WebDefaultLocationChangeDelegate.m:
        (-[WebDefaultLocationChangeDelegate webView:locationChangeDone:forDataSource:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:unableToImplementPolicyWithError:frame:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _handleUnimplementablePolicyWithErrorCode:forURL:]):
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation receivedError:withDataSource:]):
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation receivedError:withDataSource:]):
        * WebView.subproj/WebLocationChangeDelegate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]):
        (-[WebMainResourceClient cancelWithError:]):
        (-[WebMainResourceClient interruptForPolicyChangeError]):
        (-[WebMainResourceClient connection:didFailLoadingWithError:]):
        (-[WebResourceDelegateProxy connection:didFailLoadingWithError:]):
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation receivedError:withDataSource:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _receivedError:fromDataSource:]):
        (-[WebView _mainReceivedError:fromDataSource:complete:]):

2003-04-24  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * WebView.subproj/WebViewPrivate.m: (-[WebView _updateWebCoreSettingsFromPreferences:]):
        Added a call to the new setDefaultTextEncoding: method in WebCore. A preparation
        step for some encoding bug fixes.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView addSuperviewObservers]): Improved a comment.
        
=== Safari-75 ===

2003-04-24  Maciej Stachowiak  <mjs@apple.com> (checked in by Darin)

        Reviewed by Ken and Darin.

        Fixed an authentication crashing bug that crept into the last few
        changes, plus a typo.
        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]): Remove extra space.
        (-[WebAuthenticationPanel runAsSheetOnWindow:withChallenge:]): Store
        the challenge properly.

2003-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Adjusted for NSURLCredential changes.

        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel runAsModalDialogWithChallenge:]):
        (-[WebAuthenticationPanel sheetDidEnd:returnCode:contextInfo:]):

2003-04-23  Chris Blumenberg  <cblu@apple.com>

        Reviewed by darin.

        * English.lproj/StringsNotToBeLocalized.txt: updated

2003-04-23  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3161374 - safari windows don't allow text/URL dragging on the first click

        Reviewed by john.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _isSelectionEvent:]): new, determines if the event occurred over the selection
        (-[WebHTMLView acceptsFirstMouse:]): newly implemented, return result of _isSelectionEvent:
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]): newly implemented, return result of _isSelectionEvent:

2003-04-23  Chris Blumenberg  <cblu@apple.com>

        Renamed the policy delegate methods.

        Reviewed by john.

        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:unableToImplementPolicyWithError:frame:]):
        (-[WebDefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (-[WebDefaultPolicyDelegate webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _handleUnimplementablePolicyWithErrorCode:forURL:]):
        (-[WebFrame _checkNewWindowPolicyForRequest:action:frameName:formState:andCall:withSelector:]):
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient checkContentPolicyForResponse:]):
        * WebView.subproj/WebPolicyDelegate.h:

2003-04-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Updated to use API-approved methods for accessing 
        protocol-specific URL request data.

        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestParametersForReading]):
        (-[NSURLRequest _webDataRequestParametersForWriting]):

2003-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Renamed classes to match API document.
        * Panels.subproj/WebAuthenticationPanel.h:
        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        (-[WebAuthenticationPanel runAsModalDialogWithChallenge:]):
        (-[WebAuthenticationPanel runAsSheetOnWindow:withChallenge:]):
        (-[WebAuthenticationPanel sheetDidEnd:returnCode:contextInfo:]):
        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Panels.subproj/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler init]):
        (-[WebPanelAuthenticationHandler dealloc]):
        (-[WebPanelAuthenticationHandler isReadyToStartAuthentication:]):
        (-[WebPanelAuthenticationHandler startAuthentication:]):
        (-[WebPanelAuthenticationHandler cancelAuthentication:]):
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]):
        * Panels.subproj/WebStandardPanels.m:
        (-[WebStandardPanels setUsesStandardAuthenticationPanel:]):

2003-04-21  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        API changes in NSURLProtocol and its subclasses:

        +canHandleURL: becomes +canInitWithRequest:
        +canonicalURLForURL: becomes +canonicalRequestForRequest:

        Added new _webIsDataProtocolURL: helper method.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (+[WebDataProtocol _webIsDataProtocolURL:]):
        (+[WebDataProtocol canInitWithRequest:]):
        (+[WebDataProtocol canonicalRequestForRequest:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addBackForwardItemClippedAtTarget:]):
        (-[WebFrame _transitionToCommitted:]):

2003-04-21  Darin Adler  <darin@apple.com>

        * Plugins.subproj/WebNetscapePluginStream.m: Removed unnecessary #import of <WebFoundation/WebFoundation.h>.

2003-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        Updated for file renames.

        * Panels.subproj/WebAuthenticationPanel.h:
        * Panels.subproj/WebPanelAuthenticationHandler.h:
        * Panels.subproj/WebStandardPanels.m:

2003-04-21  Chris Blumenberg  <cblu@apple.com>
        Fixed previous "Reviewed by".

        * ChangeLog:

2003-04-21  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3140990 - Safari: Error attempting to load movie from Rhino records
        Renamed plug-in view methods to mention that they take URL strings.
        
        Reviewed by john.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURLString:attributes:baseURLString:MIMEType:]): renamed, try to find the plug-in using the extension of the SRC URL if the plug-in isn't found using the MIME type.
        (-[WebBridge viewForJavaAppletWithFrame:attributes:baseURLString:]): renamed

2003-04-18  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3139385 - don't accept drags from other frames in the same WebView

        Reviewed by john.

        * WebView.subproj/WebFrameView.m: moved drag destination code from WebFrameView to WebView
        (-[WebFrameView initWithFrame:]): removed drag registration code
        * WebView.subproj/WebFrameViewPrivate.h:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]): unregister drag types on the WebView
        (-[WebHTMLView draggedImage:endedAt:operation:]): reregister drag types on the WebView
        * WebView.subproj/WebImageView.m:
        (-[WebImageView mouseDragged:]): unregister drag types on the WebView
        (-[WebImageView draggedImage:endedAt:operation:]): reregister drag types on the WebView
        * WebView.subproj/WebView.m: moved drag destination code from WebFrameView to WebView
        (-[WebView draggingEntered:]): moved from WebFrameView
        (-[WebView prepareForDragOperation:]): ditto
        (-[WebView performDragOperation:]): ditto
        (-[WebView concludeDragOperation:]): ditto
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _registerDraggedTypes]): ditto

2003-04-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.

        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate _loadHistoryGuts:]):
        if we can't load the file as a dictionary, try loading it
        the old-fashioned array way. This makes the history file
        format change forward-compatible.

2003-04-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3160751 - Can't use non-'.txt' file extension for text files?

        Reviewed by mjs.

        * English.lproj/StringsNotToBeLocalized.txt:
        * Misc.subproj/WebNSURLResponseExtras.m:
        (-[NSURL _web_suggestedFilenameForSavingWithMIMEType:]): don't correct the file extension for plain text files

2003-04-17  John Sullivan  <sullivan@apple.com>

        - fixed 3232332 -- History file should be versioned since 
        we might change it in the future
        - fixed 3220355 -- Console error message at launch when 
        there's no history file

        Note: a downside of this change is that the history formats
        before and after this change are not compatible. You will
        get no history each time you cross that boundary by running
        different Safaris.

        Reviewed by Maciej.

        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate _loadHistoryGuts:]):
        check for file-doesn't-exist case before complaining about
        being unable to read existing file; expect to read dictionary
        rather than array, and check version in dictionary.
        (-[WebHistoryPrivate _saveHistoryGuts:]):
        save dictionary that includes version as well as array of
        items by date.

2003-04-17  Richard Williamson   <rjw@apple.com>

        Fixed typos in headerdoc comments.

        * WebView.subproj/WebFrame.h:

2003-04-17  Richard Williamson   <rjw@apple.com>

        Drop down yet one more level to avoid intialization horkage.
        Call objc_getClass() instead of NSClassFromString().
        
        Reviewed by darin.

        * WebView.subproj/WebHTMLViewPrivate.m:
        (+[WebHTMLView load]):

2003-04-17  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * WebView.subproj/WebDataProtocol.m: (+[NSURLRequest _webDataRequestURLForData:]):
        Register the WebDataProtocol here instead of doing it with a load method, since this
        is the bottleneck that must be used before that protocol is needed. It's good to have
        one less load method, and this may fix a problem reported by a Panther WebKit client
        on intrigue-dev too.

2003-04-16  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Fixed call to load synchronous URL. Now conforms to new API
        which allows callers to access error object associated with 
        the load.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:withLoadType:]):

2003-04-16  Chris Blumenberg  <cblu@apple.com>

        - Progressively load plain text in our text view.
        - Fixed: 3177603 - vCards appear in browser, not downloaded

        Reviewed by darin.

        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation setDataSource:]): added FIXME about document source of RTF not working
        (-[WebTextRepresentation receivedData:withDataSource:]): feed data to the text view, progressively for plain text
        * WebView.subproj/WebTextView.m:
        (+[WebTextView unsupportedTextMIMETypes]): include text/directory, another vcard MIME type
        (-[WebTextView setDataSource:]): do 1-time attribute settings
        (-[WebTextView dataSourceUpdated:]): do nothing

2003-04-16  Ken Kocienda  <kocienda@apple.com>

        Reviewed by David

        Moved this NSURLProtocolClient implementor to API-approved
        interface.

        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoading]):

2003-04-16  Ken Kocienda  <kocienda@apple.com>

        Fix deployment build breaker caused by uninitialized variable.

        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _loadBackForwardListFromOtherView:]):

2003-04-16  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3226281 -- REGRESSION: crash in WebHTMLView removeMouseMovedObserver closing gist.com

        * Plugins.subproj/WebPluginController.m: (-[WebPluginController showStatus:]):
        Use _webView instead of _controller.
        
        * WebCoreSupport.subproj/WebTextRendererFactory.m: Remove stray semicolon.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView removeMouseMovedObserver]): Use _webView instead of _controller.
        (-[WebHTMLView menuForEvent:]): Ditto.
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Ditto.
        * WebView.subproj/WebHTMLViewPrivate.h: Rename _controller to _webView.
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _webView]): Use _web_superviewOfClass to find the WebView. This dodges possible
        stale unretained pointer issues with getting the WebView through the WebFrame, which is what
        fixes the bug.
        (-[WebHTMLView _updateMouseoverWithEvent:]): Use _webView instead of _controller.
        (+[WebHTMLView _pasteboardTypes]): Put the types in order from most preferred to least.
        (-[WebHTMLView _writeSelectionToPasteboard:]): Ditto.

2003-04-15  Richard Williamson   <rjw@apple.com>

        Create the dictionary for volatile values.  Without this fix
        values were never volatile!
        
        Reviewed by mjs.

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _init]):
        (-[WebPreferences init]):
        (+[WebPreferences standardPreferences]):
        (-[WebPreferences dealloc]):

2003-04-15  Richard Williamson   <rjw@apple.com>

        Fix for 3226746.  Remove some ancient and apparantly invalid cruft.
        
        Reviewed by trey.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setDataSource:]):

2003-04-15  Richard Williamson   <rjw@apple.com>

        Fixed clipping of progressive images to correctly clip.
        
        Reviewed by darin.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):

2003-04-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Name change from WebCacheObject to NSCachedURLResponse.    
        No functional changes.

        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoadingWithCacheObject:]):

2003-04-15  Trey Matteson  <trey@apple.com>

        3227514 Open window in "Same Page" should copy entire back/forward list

        New support to load a new view by copying the whole backforward
        list and driving the new view to the current item.

        Reviewed by John.

        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _loadItem:]):  Old routine, which only loaded an item.
        (-[WebView _loadItemsFromOtherView:]):  New routine that does the works.

2003-04-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Name change from WebProtocolClient to NSURLProtocolClient.
        No functional changes.

        * WebView.subproj/WebDataProtocol.m:
        (-[WebDataProtocol startLoadingWithCacheObject:]):

2003-04-15  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Name change from WebProtocol to NSURLProtocol.
        No functional changes.

        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestParametersForReading]):
        (-[NSURLRequest _webDataRequestParametersForWriting]):
        (+[WebDataProtocol load]):
        * WebView.subproj/WebFrame.m:

2003-04-14  Trey Matteson  <trey@apple.com>

        3009051 - Find on Page stops (once) at end of page, should wrap automatically        WebKit
        3051546 - Find on Page doesn't work for frameset pages
        3058437 - can have a selection in two frames at the same time (problem for finding in frames)
        3097498 - Find Previous continues to "Find Next" until end of paragraph        3097507 - Find Next searches from previous find hit instead of current selection        Primary changes here:  I added a wrap flag to the searchFor method, which is needed to
        control how we search as we traverse the frame tree.  A new method is added to WebView
        that knows about traversing the frame tree as we search.  HTMLView and TextView both
        clear their selections when they lose first responder (see 3228554 for possible
        improvements to that change).

        Reviewed by Maciej.

        * Misc.subproj/WebSearchableTextView.m:
        Added wrap flag, pass on to TextView.
        Ensure we do some searching when we would previous get a zero range to search in.
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        These are all basic methods to support forwards and backwards traversal of
        the frame tree.  Modeled after same methods we have for traversing the DOM.
        (-[WebFrame _nextSibling]):
        (-[WebFrame _previousSibling]):
        (-[WebFrame _lastChild]):
        (-[WebFrame _nextFrameWithWrap:]):
        (-[WebFrame _previousFrameWithWrap:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:]):  Added wrap flag,
        pass it to bridge.
        (-[WebHTMLView resignFirstResponder]):  Clear selection when we lose firstResp.
        * WebView.subproj/WebTextView.m:
        (-[WebTextView resignFirstResponder]):  Clear selection when we lose firstResp.
        * WebView.subproj/WebView.m:
        (-[WebView _currentFrame]):  Return the frame holding the first responder.
        (-[WebView _searchFor:direction:caseSensitive:wrap:]):  Main work:  traverse the
        frame tree and drive the overall find.
        * WebView.subproj/WebViewPrivate.h:

2003-04-14  Chris Blumenberg  <cblu@apple.com>

        Log time spent loading each plug-in.

        Reviewed by mjs.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _iconsForIconURLString:]): fixed logging code
        (-[WebIconDatabase _scaleIcon:toSize:]): fixed logging code
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]): log time spent loading a plug-in
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController startAllPlugins]): only log if there are plug-ins to start
        (-[WebPluginController stopAllPlugins]): only log if there are plug-ins to stop
        (-[WebPluginController destroyAllPlugins]): only log if there are plug-ins to destroy

2003-04-13  Trey Matteson  <trey@apple.com>

        3150693 - open new window on "same page" doesn't give me the same frame content

        The core is a new support method that loads a WebView given a HistoryItem, which
        thus restores all frames of that item, and optionally the form and scroll state.

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem copyWithZone:]):  Copy the docState, scrollPosition, isTargetItem.
        No good        reason to have left these out when I wrote this method.
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _saveDocumentAndScrollState]):  New method to run the frame tree and
        save all form/scroll state to the current item.
        * WebView.subproj/WebView.m:
        _goToItem:withLoadType: moved to WebViewPrivate.m
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _goToItem:withLoadType:]):  Moved from WebView.m, no change.
        (-[WebView _loadItem:showingInView:]):  New method to load the view with the item.

2003-04-12  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3162338 - Embedding SVG with <object type="image/svg+xml"> doesn't work

        Reviewed by dave.

        * WebCoreSupport.subproj/WebImageRendererFactory.m:
        (-[WebImageRendererFactory supportedMIMETypes]): code moved from +[WebImageView supportedImageMIMETypes]
        * WebView.subproj/WebImageView.m:
        (+[WebImageView supportedImageMIMETypes]): return -[WebImageRendererFactory supportedMIMETypes]

2003-04-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        (-[WebDefaultWindowOperationsDelegate webView:setContentRect:]):
        Implemented in terms of webView:setFrame: to save clients work.

2003-04-11  Chris Blumenberg  <cblu@apple.com>

        Removed WebKitErrorResourceLoadInterruptedByPolicyChange error because it isn't used. 

        Reviewed by john.

        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (registerErrors):
        * WebKit.pbproj/project.pbxproj:

2003-04-11  Trey Matteson  <trey@apple.com>

        3148002 - printing shouldn't depend on the size of the window

        The basic strategy is copied from khtmlview's print method:  We reset the width
        of the document to the paper width minus margins, and relayout before paginating
        and printing.

        Reviewed by Richard.

        * WebKit.pbproj/project.pbxproj:  Someone is using an old version...
        * WebView.subproj/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):  Don't do the dynamic
        scrollbar update magic when printing.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView layoutToPageWidth:]):  New routine, basically the old layout
        method with a new parameter.  If we're given an width, we call a different
        bridge method.
        (-[WebHTMLView layout]):  Just call above method with width==0
        (-[WebHTMLView drawRect:]):  Protect setting/resetting of graphics context and
        additional clip with a DURING/HANDLER.  I saw an assertion failure that could
        be explained by this, so this is mostly a beartrap for that problem.
        (-[WebHTMLView _setPrinting:pageWidth:]):  Pass page width through to others.
        (-[WebHTMLView beginDocument]):  If we are not in a frame set, do a layout
        using the page width.
        (-[WebHTMLView endDocument]):  Pass 0 to new pageWidth: arg.

2003-04-08  Trey Matteson  <trey@apple.com>

        3220349 - assertion failure in [WebFrame _recursiveGoToItem:...] hitting Back while loading movie

        The problem was that when we go back we call stopLoading on the top frame, but
        that has a bogus optimization to not do any work if state=Completed.  That is a
        bogus test if a subframe is doing a load.  The fix is to just always tell the
        dataSources to stopLoading.  They already bail quickly when they are not loading,
        so there is no significant additional cost.

        Reviewed by Richard.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame stopLoading]):

=== Safari-73 ===

2003-04-10  Richard Williamson   <rjw@apple.com>

        Fixed 3219525
        
        Our work-around for the CG pattern cache bogosity was always bypassed,
        consequently we'd unnecessarily burn lots of memory filling that cache.
        
        Reviewed by mjs & gramps.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        (-[WebImageRenderer tileInRect:fromPoint:]):

2003-04-10  Darin Adler (Maciej committing for Darin)  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3225042 - MallocDebug shows "access after deallocated" problem in WebFrameView

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView dealloc]): Nil out _private.
        (-[WebFrameView nextKeyView]): Check _private for nil.
        (-[WebFrameView previousKeyView]): Check _private for nil.
 
2003-04-10  Richard Williamson   <rjw@apple.com>

        Fix performance regression with iBench (post 71).  The iBench cheat was being defeated.
        
        Ensure that the layout timer is always invalidated when a frame completes 
        or is cancelled.
        
        Reviewed by mjs & gramps.

        * WebView.subproj/WebFrame.m:
        (-[WebFrame stopLoading]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setState:]):

2003-04-10  Trey Matteson  <trey@apple.com>

        3224973 - Safari sometimes stores data for AUTOCOMPLETE=OFF fields and password fields

        Just glue for calling a new WC function.

        Reviewed by Darin.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation elementWithName:inForm:]):

=== Safari-72 ===

2003-04-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris.

        - fixed 3224690 - REGRESSION: Download related errors aren't preserved across launches

        * WebKit.pbproj/project.pbxproj: Install WebKitErrorsPrivate.h as SPI.

2003-04-10  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - fixed 3224622 -- REGRESSION: in an empty window, repeated tabs don't cycle back to location field

        Added logic to WebFrameView's next/previous that matches the logic in WebHTMLView.
        Looking for a better solution some day to the whole nextKeyView thing.

        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView nextKeyView]): If being called from nextValidKeyView, return the nextKeyView
        of the WebView rather than of self.
        (-[WebFrameView previousKeyView]): Ditto.
        (-[WebFrameView nextValidKeyView]): Set the inNextValidKeyView flag.
        (-[WebFrameView previousValidKeyView]): Ditto.
        
        * WebView.subproj/WebFrameViewPrivate.h: Add the inNextValidKeyView flag.

2003-04-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Another launch time speedup - don't load the WebKit WebError
        strings until we actually make a WebKit error. This prevents the
        WebKit localized strings file from being loaded during normal startup.

        * Downloads.subproj/WebDownload.m:
        (+[WebDownloadPrivate initialize]): Don't register WebKit errors.
        (-[WebDownload _errorWithCode:]): Use _webKitErrorWithCode:failingURL:
        * Misc.subproj/WebKitErrors.m:
        (+[WebError _webKitErrorWithCode:failingURL:]): Wrapper that registers the
        WebKit error codes first.
        * Misc.subproj/WebKitErrorsPrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _handleUnimplementablePolicyWithErrorCode:forURL:]):  Use 
        _webKitErrorWithCode:failingURL:
        (-[WebFrame _loadItem:withLoadType:]):  Use _webKitErrorWithCode:failingURL:
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeError]):  Use _webKitErrorWithCode:failingURL:

2003-04-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3222896 - REGRESSION: sound plays after closing a window with a RealPlayer plug-in in it

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView viewDidMoveToHostWindow]): We were starting plug-in on window close because that's when the host window is set to nil. Just check if we now have a host window before we start. 

2003-04-10  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - speed up startup by not calling [NSImage imageFileTypes] until we need to

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge frameRequiredForMIMEType:]):
        Call _viewClassForMIMEType instead of _viewTypes, since _viewClassForMIMEType is now optimized
        by not loading the image types unless needed.

        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _representationClass]): Call _representationClassForMIMEType instead of
        _repTypes, since _representationClassForMIMEType is now optimized by not loading the image
        types unless needed.
        (+[WebDataSource _repTypesAllowImageTypeOmission:]): Added. Moved the guts of _repTypes
        in here. If you pass YES, doesn't bother adding the image types yet.
        (+[WebDataSource _repTypes]): Now calls _repTypesAllowImageTypeOmission:NO.
        (+[WebDataSource _representationClassForMIMEType:]): First try the dictionary without
        requiring the image types, then only in the case where we get nil, try with the image types.
        
        * WebView.subproj/WebFrameViewPrivate.m:
        (-[WebFrameView _makeDocumentViewForDataSource:]): Call _viewClassForMIMEType instead of
        _viewTypes, since _viewClassForMIMEType is now optimized by not loading the image types
        unless needed.
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]): Added. Moved the guts of _viewTypes
        in here. If you pass YES, doesn't bother adding the image types yet.
        (+[WebFrameView _viewTypes]): Now calls _viewTypesAllowImageTypeOmission:NO.
        (+[WebFrameView _viewClassForMIMEType:]): First try the dictionary without requiring
        the image types, then only in the case where we get nil, try with the image types.

2003-04-09  Trey Matteson  <trey@apple.com>

        3223413 - crash in [CompletionController controlTextDidChange] at travelocity.com

        This was a great one to get steps for repro - it has shown up at least twice before.

        The problem is that when there is a focused TextField within a frame, the proper
        FormDelegate messages were not being sent on refresh or b/f.  The cause was that
        the FirstResponder would be reset in the middle of detaching the frame, at which point
        our object graph was already half taken apart.  Fix is to detect that case before
        doing the detach work, and endEditing explicitly.

        Reviewed by Darin.

        * ChangeLog:
        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:   New FormDelegate logging category.
        * WebCoreSupport.subproj/WebBridge.m:
        All changes in here are just calling LOG for the new category.
        (-[WebBridge controlTextDidBeginEditing:]):
        (-[WebBridge controlTextDidEndEditing:]):
        (-[WebBridge controlTextDidChange:]):
        (-[WebBridge control:textShouldBeginEditing:]):
        (-[WebBridge control:textShouldEndEditing:]):
        (-[WebBridge control:didFailToFormatString:errorDescription:]):
        (-[WebBridge control:didFailToValidatePartialString:errorDescription:]):
        (-[WebBridge control:isValidObject:]):
        (-[WebBridge control:textView:doCommandBySelector:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setDataSource:]):  The fix, as described above.

2003-04-09  Richard Williamson   <rjw@apple.com>

        Fix for 3222904.  This change fixes the immediate symptoms of the bug,
        but we need to come back to this issue after beta 2.  Bug 3223929 captures
        the other problems.
        
        Reviewed by gramps.

        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource __setRequest:]):
        (-[WebDataSource _setRequest:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _shouldReloadForCurrent:andDestination:]):
        (-[WebFrame _loadItem:withLoadType:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):

2003-04-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris, Trey, Darin and Don.

        - fixed 3223568 - site icons lost when moving from older Safari to 71

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _createFileDatabase]): Rename old database containing directory to
        new, so we carry over old databases. The format is forward but not backward compatible.
        (-[WebIconDatabase _loadIconDictionaries]): Treat no version at all as version 1, so we
        can load old-style databases.

        Reviewed by Trey.

        * English.lproj/StringsNotToBeLocalized.txt: Updated.
2003-04-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3223022 - Plug-in content bleeds onto frontmost tab

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]): Explicitly call setWindow when the plug-in view is moved out of the window so it is clipped out of sight.

2003-04-08  Trey Matteson  <trey@apple.com>

        3221355 document is numb to clicks after going back

        The layoutTimer now does a layout if the doc is in state Completed,
        in addition to LayoutAcceptable.

        Reviewed by Richard.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _timedLayout:]):

2003-04-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3221128 - Double grey lines on macromedia.com home page

        Flash relies on the ordering of attributes in the EMBED tag (which is really stupid). salign must come after scale.
        Changed our plug-in API's to preserve orderings using arrays rather than lose orderings when using dictionaries. 

        Reviewed by trey.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.h:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView initWithFrame:plugin:URL:baseURL:MIMEType:attributeKeys:attributeValues:]): take attributeKeys and attributeValues instead of a dictionary
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:]): create attributeKeys and attributeValues to pass to the above method
        (-[WebBridge viewForJavaAppletWithFrame:attributes:baseURL:]): create attributeKeys and attributeValues to pass to the above method

2003-04-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3220463 - REGRESSION: PDF viewer plug-in does not display (worked in 69 and previous)

        Reviewed by darin.

        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView didStart]): always call redeliverStream. Have WebNetscapePluginRepresentation determine if it actually needs to do that.
        * Plugins.subproj/WebNetscapePluginRepresentation.h:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedData:withDataSource:]): keep track of _dataLengthReceived which is independent of the data received by the data source
        (-[WebNetscapePluginRepresentation redeliverStream]): only redeliver the stream if _dataLengthReceived is greater than 0

2003-04-07  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3206018 - REGRESSION: Clicks on the BBC news ticker applet don't open story in new window

        MSIE and Netscape for Windows treat a nil target as _top. Since this is usually the target audience of applet developers, we will mimic this. This makes 3206018 behave as expected.

        Reviewed by gramps.

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showURL:inFrame:]): treat nil as _top.

2003-04-07  Richard Williamson  <rjw@apple.com>

        API conveniences for IB.
        
        Reviewed by Maciej.

        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView canGoBack]):
        (-[WebView canGoForward]):
        (-[WebView reload:]):
        (-[WebView canMakeTextSmaller]):
        (-[WebView canMakeTextLarger]):
        (-[WebView makeTextSmaller:]):
        (-[WebView makeTextLarger:]):

2003-04-07  Richard Williamson  <rjw@apple.com>

        Fix for 3220988.  Cancel frame load if it's detached before
        finished loading.

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameDetached]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _removeChild:]):

2003-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        - fixed 3219584 - REGRESSION: launch times appear slower in v71

        * WebView.subproj/WebView.m:
        (+[WebView canShowMIMEType:]): Avoid loading plugin database if we
        can find a view without doing so.

2003-04-07  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.
        When I landed my last change to the .gperf file I forgot to land this.

=== Safari-71 ===

2003-04-04  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3217687 -- REGRESSION: printing uses widths from screen fonts, messing up layout

        * WebCoreSupport.subproj/WebTextRendererFactory.m: Removed now-unused rendererWithFont:
        which called, the now-removed usingPrinterFonts method. WebCore now calls the one with
        the usingPrinterFont parameter.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView drawRect:]): Remove setUsingPrinterFonts: calls. This is now handled by the
        document on the WebCore side. 
        (-[WebHTMLView _setPrinting:]): Ditto.

2003-04-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3188914 - loop checking for Flash at http://www.scottsmind.com/celebrity_defacer/index.php
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): Take a mutable request,
        and make sure to set referrer to the frame URL (as other browsers do).
        (-[WebBaseNetscapePluginView getURLNotify:target:notifyData:]): pass an NSMutableURLRequest.
        (-[WebBaseNetscapePluginView getURL:target:]): Likewise.
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        If the plug-in passes a Content-Length header, take it out of the
        headers and truncate the content appropriately to make
        WebFoundation happy.

2003-04-03  Richard Williamson  <rjw@apple.com>

        Fix checks for about: to avoid using our 'fake' request when
        using WebDataProtocol.  This fixes the assertion in the Snippet
        Editor.
        
        Reviewed by mjs.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):

2003-04-03  Trey Matteson  <trey@apple.com>

        3218212 REGRESSION: page on screen draws ugly while printing is happening

        Turn autodisplay of the window off while we print.

        Reviewed by Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView beginDocument]):  Turn it off.
        (-[WebHTMLView endDocument]):  and back on.

2003-04-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - removed no-longer forwarding of become/resignFirstResponder
        * WebView.subproj/WebHTMLViewPrivate.m: Removed
        become/resignFirstResponder poses for WebNSTextView.

2003-04-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard and Don.

        - fixed 3218262 - REGRESSION: Page address becomes about:blank when command-clicking bookmark to load tab

        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestParametersForWriting]): Renamed
        from _webDataRequestParameters.
        (-[NSURLRequest _webDataRequestParametersForReading]): Like the
        above, but make sure nto to create the part if it does not exist.
        (-[NSURLRequest _webDataRequestData]): Use _webDataRequestParametersForReading.
        (-[NSURLRequest _webDataRequestEncoding]): Likewise.
        (-[NSURLRequest _webDataRequestBaseURL]): Likewise.
        (-[NSURLRequest _webDataRequestSetData:]):Use _webDataRequestParametersForWriting.
        (-[NSURLRequest _webDataRequestSetEncoding:]): Likewise.
        (-[NSURLRequest _webDataRequestSetBaseURL:]): Likewise.
        (-[NSURLRequest _webDataRequestExternalRequest]): Use _webDataRequestParametersForReading.

2003-04-03  Richard Williamson   <rjw@apple.com>

        Tweaks to minimize access to the parts of a WebDataRequest
        that turn out to be slow.  Although we've changed NSURLRequest
        to be faster, it's still good to keep these tweaks.
        
        Reviewed by ken.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestExternalRequest]):
        (+[WebDataProtocol canHandleURL:]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource request]):

2003-04-03  Trey Matteson  <trey@apple.com>

        3067928 - printing should not break lines in half

        This is just glue to call the right piece in WebCore.

        Reviewed by Darin.

        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        Defer to WebCore to set pagination boundary.

2003-04-03  Richard Williamson   <rjw@apple.com>

        As requested by Nancy, drop "Is" and "Are" from setters,
        but leave them in place on the getters.
        
        Reviewed by cblu.

        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences setJavaEnabled:]):
        (-[WebPreferences setJavaScriptEnabled:]):
        (-[WebPreferences setPlugInsEnabled:]):

2003-04-03  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - remove spoof entries as decided in meeting with Don, Dave, Mark Malone

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Remove battle.net because it's only there to
        make Darin happy, and the site works fine without it. Remove pier1.com and disney.go.com because
        we want to try evangelism first in both those cases, and having a released version where the
        site works weakens our evangelism efforts.
        
        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.

        - disable workaround for Panther bug in Panther builds

        * Misc.subproj/WebNSImageExtras.m: (-[NSImage _web_dissolveToFraction:]): Add ifdefs.
        
2003-04-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3213556 - VIP: parent.mainFrameWidth=undefined on page refresh results in missing content

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:withLoadType:]): When reload or going back/forward,
        make sure to load the original URL of the item, not it's most recent URL.
        (-[WebFrame _loadURL:intoChild:]): Likewise.

2003-04-02  Richard Williamson  <rjw@apple.com>

        Raise exceptions when these methods are called inappropriately.
        
        Reviewed by Trey.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList goBack]):
        (-[WebBackForwardList goForward]):
        (-[WebBackForwardList goToItem:]):

2003-04-02  Richard Williamson  <rjw@apple.com>

        Added new API on WebFrame, loadData: and loadString:
        
        Reviewed by Maciej.

        Fixed loading of cocoa plugins.
        
        Reviewed by Chris.
        
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList _entries]):
        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage bundle]):
        * Plugins.subproj/WebPluginDatabase.h:
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase init]):
        (-[WebPluginDatabase loadPluginIfNeededForMIMEType:]):
        (-[WebPluginDatabase dealloc]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        * WebView.subproj/WebDataProtocol.h: Added.
        * WebView.subproj/WebDataProtocol.m: Added.
        (-[WebDataRequestParameters copyWithZone:]):
        (-[WebDataRequestParameters mutableCopyWithZone:]):
        (-[WebDataRequestParameters dealloc]):
        (+[NSURLRequest _webDataRequestURLForData:]):
        (-[NSURLRequest _webDataRequestParameters]):
        (-[NSURLRequest _webDataRequestData]):
        (-[NSURLRequest _webDataRequestSetData:]):
        (-[NSURLRequest _webDataRequestEncoding]):
        (-[NSURLRequest _webDataRequestSetEncoding:]):
        (-[NSURLRequest _webDataRequestBaseURL]):
        (-[NSURLRequest _webDataRequestSetBaseURL:]):
        (-[NSURLRequest _webDataRequestExternalRequest]):
        (+[WebDataProtocol load]):
        (+[WebDataProtocol doesURLHaveInternalDataScheme:]):
        (+[WebDataProtocol canHandleURL:]):
        (+[WebDataProtocol canonicalURLForURL:]):
        (-[WebDataProtocol startLoadingWithCacheObject:]):
        (-[WebDataProtocol stopLoading]):
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource initialRequest]):
        (-[WebDataSource request]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _commitIfReady:]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):
        (-[WebFrame loadString:baseURL:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addBackForwardItemClippedAtTarget:]):
        (-[WebFrame _transitionToCommitted:]):
        * WebView.subproj/WebFrameViewPrivate.m:
        (-[WebFrameView _makeDocumentViewForDataSource:]):
        * WebView.subproj/WebView.m:
        (+[WebView canShowMIMEType:]):

2003-04-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3177183 - disneyland.com says "500 Internal Server Error"

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Spoof as Mac IE
        for disney.go.com
        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.

2003-04-02  Richard Williamson  <rjw@apple.com>

        Reviewed by john.

        * WebView.subproj/WebPreferences.h:
        (-[WebPreferences setUserStyleSheetLocation:]): Cleaned up arg and comment.

2003-04-02  Richard Williamson  <rjw@apple.com>

        Fix for 3200447.  Use class_pose to pose so as to avoid
        indirect invocation of appkit class initializers.
        
        Reviewed by darin.

        * WebView.subproj/WebHTMLViewPrivate.m:
        (+[WebHTMLView load]):

2003-04-02  Richard Williamson  <rjw@apple.com>

        Removed private headers.
        
        Reviewed by john.

        * Misc.subproj/WebKit.h:

2003-04-01  Trey Matteson  <trey@apple.com>

        3174227 - aggressive caching of generated pages causes problems with WIKI

        We decided to fix half the observed behavior, as all the bad behavior is
        arguably due to a mis-configured server (that sets a max-age=60 on
        all its pages).

        The fix is that when a redirect comes in response to a POST we force a
        load from origin, since this is a common technique sites do to prevent
        a post from ending up in the b/f list, and it is very likely you are
        on your way back to look at data that you believe you just edited. 

        Reviewed by Ken.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:withLoadType:]):  Nit cleanup.  Remove unused arg.
        (-[WebFrame _recursiveGoToItem:fromItem:withLoadType:]):
        Same nit cleanup.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        Force loadFromOrigin if we have a redirect in response to a POST.
        * WebView.subproj/WebResourceLoadDelegate.h:
        Add headerdoc comment for redirectResponse param.

2003-04-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        - fixed 3214748 - REGRESSION: After using latest Safari for awhile, can't launch older Safaris (icon db problem)

        * Misc.subproj/WebIconDatabase.m:
        Changed icon cache path, since we are breaking compatibility and the old version
        does not support versioning.
        (-[WebIconDatabase _loadIconDictionaries]): Check version.
        (-[WebIconDatabase _updateFileDatabase]): Save version.

2003-04-01  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        NSURLConnectionDelegate is no longer a formal protocol.

        NSURLConnection no longer has a loadWithDelegate: method. Loads
        start implicitly at init time. Some clients have been updated
        to call the willSendRequest:redirectResponse: callback manually
        since this callback is no longer sent for initial loads.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownload initWithRequest:]):
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]):
        (-[WebDownload loadWithDelegate:]):
        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate loadWithRequest:]):
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient loadWithRequest:]):
        (-[WebResourceDelegateProxy setDelegate:]):

2003-04-01  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3213918 -- REGRESSION: printing Mapquest directions, screen font is used, causing exception, crashes
        - fixed 3144287 -- CSS with media=print not used when printing

        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _opened]): Don't call the reapplyStyles
        method directly here, use setNeedsToApplyStyles instead.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView reapplyStyles]): Pass the appropriate device type here.
        (-[WebHTMLView drawRect:]): Don't call setUsingPrinterFonts:NO at the end of this method
        if we were already using printer fonts at the start. This was the bug fix.
        (-[WebHTMLView _setPrinting:]): Renamed from _setUsingPrinterFonts since this now controls
        the styles used too, not just the fonts.
        (-[WebHTMLView beginDocument]): Updated for _setPrinting name change.
        (-[WebHTMLView endDocument]): Ditto.
        * WebView.subproj/WebHTMLViewPrivate.h: Renamed "usingPrinterFonts" field to "printing".

2003-04-01  Richard Williamson  <rjw@apple.com>

        Fixed ~2% performance regression problem.  The regression
        was caused by the allocation of a forwarder on every 
        delegate callback.  Modified code to only create forwarders once,
        and reset when delegates change.
        
        Reviewed by Ken.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate setDataSource:]):
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]):
        * WebView.subproj/WebView.m:
        (-[WebView setWindowOperationsDelegate:]):
        (-[WebView setResourceLoadDelegate:]):
        (-[WebView setContextMenuDelegate:]):
        (-[WebView setPolicyDelegate:]):
        (-[WebView setLocationChangeDelegate:]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate dealloc]):
        (-[WebView _locationChangeDelegateForwarder]):
        (-[WebView _resourceLoadDelegateForwarder]):
        (-[WebView _cacheResourceLoadDelegateImplementations]):
        (-[WebView _resourceLoadDelegateImplementations]):
        (-[WebView _policyDelegateForwarder]):
        (-[WebView _contextMenuDelegateForwarder]):
        (-[WebView _windowOperationsDelegateForwarder]):
        (-[_WebSafeForwarder forwardInvocation:]):

        * API-Issues.rtf:
        Notes to self.
        
2003-04-01  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Allowed update-alex-localizable-strings
        to sort this file.

2003-03-31  Trey Matteson  <trey@apple.com>

        3212724 - bookmarks and history items have screwed up designated inits

        and support code for:
        3116315 - autocomplete needs some prioritization magic

        The main changes are adding and maintaining a visitCount to the HistoryItem,
        cleaning up the init methods of HistoryItem.  Also lastVisitedDate is now
        set explicitly instead of automatically getting the current date.

        Reviewed by John.

        * History.subproj/WebHistory.m:
        (-[WebHistory addItemForURL:]):  Set lastVisitedDate of new item.
        (-[WebHistory _itemForURLString:]):  New helper routine.
        * History.subproj/WebHistoryItem.h:  Conform to NSCopying.
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem init]):  Behave like a designated initializer.
        (-[WebHistoryItem copyWithZone:]):  New.
        (-[WebHistoryItem initWithURL:title:]):  Call the designated initializer.
        (-[WebHistoryItem initWithURL:target:parent:title:]):    Call the designated initializer.
        Don't blindly init lastVisitedDate.
        (-[WebHistoryItem setLastVisitedDate:]):  Update visitCount too.
        (-[WebHistoryItem visitCount]):  New getter.
        (-[WebHistoryItem setVisitCount:]):  New setter.
        (-[WebHistoryItem _mergeAutoCompleteHints:]):  Combine autocomplete info
        of two items.  Used when one item replaces another in the history.
        (-[WebHistoryItem dictionaryRepresentation]):  Write visitCount.
        (-[WebHistoryItem initFromDictionaryRepresentation:]):  Read visitCount.
        * History.subproj/WebHistoryItemPrivate.h:
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate addItem:]):  Merge autocomplete date from old item to new.
        (-[WebHistoryPrivate itemForURLString:]):   s/entry/item/
        (-[WebHistoryPrivate containsItemForURLString:]):   s/entry/item/
        (-[WebHistoryPrivate containsURL:]):   s/entry/item/
        (-[WebHistoryPrivate itemForURL:]):   s/entry/item/
        (-[WebHistoryPrivate _loadHistoryGuts:]):  Skip history items without visitDate.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):  Update last visitTime when we revisit
        the same URL (since no new history item is created).

2003-03-31  Richard Williamson  <rjw@apple.com>

        Fixed 3213637.  We weren't calling the correct delegate method,
        setStatus: instead of webView:setStatus:
        
        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView status:]):

2003-03-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris.

        - fixed 3210813 - REGRESSION: full size stock chart on etrade shows up empty after viewing mini stock chart

        I fixed this by adding a "negative cache" of icon URLs that loaded
        something but failed to yield an icon. This prevents us from
        asking for the site icon over and over, which was messing up the
        session cookie.
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase init]):
        (-[WebIconDatabase iconForURL:withSize:cache:]):
        (-[WebIconDatabase _updateFileDatabase]):
        (-[WebIconDatabase _iconsForIconURLString:]):
        (-[WebIconDatabase _setHaveNoIconForIconURL:]):
        (-[WebIconDatabase _releaseIconForIconURLString:]):
        * Misc.subproj/WebIconDatabasePrivate.h:
        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        (-[WebIconLoader connectionDidFinishLoading:]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _iconLoaderReceivedPageIcon:]):

2003-03-31  Darin Adler  <darin@apple.com>

        * English.lproj/InfoPlist.strings: Changed "1.0 Beta" to "1.0 Beta 2".
        * WebKit.pbproj/project.pbxproj: Changed "1.0 Beta" to "1.0 Beta 2".

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

        * English.lproj/Localizable.strings: Regenerated (new script, "1.0 Beta 2").

2003-03-31  Richard Williamson  <rjw@apple.com>

        Reviewed by darin.

        * History.subproj/WebHistory.h:
        Added use of WebHistoryItemsKey instead of @"Entries".
        
        * History.subproj/WebHistory.m:(-[WebHistory _sendNotification:entries:]):
        Use WebHistoryItemsKey as key instead of @"Entries".
        
        * History.subproj/WebHistoryItem.m: (-[WebHistoryItem init]):
        Fix double allocation of WebHistoryPrivate.

        * WebKit/WebKit.exp
        Added export for WebHistoryItemsKey
        
        * WebKit/API-Issues.rtf
        Notes.
        
2003-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - improved default behaviors in window operations delegate

        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        (-[WebDefaultWindowOperationsDelegate webViewShowWindowBehindFrontmost:]): Removed unused method.
        (-[WebDefaultWindowOperationsDelegate webViewCloseWindow:]): Added default implementation, calls close on window.
        (-[WebDefaultWindowOperationsDelegate webViewFocusWindow:]): Added default implementation, makeKeyAndOrderFront.
        (-[WebDefaultWindowOperationsDelegate webViewUnfocusWindow:]): Added default implementation, uses _cycleWindowsReversed as needed.
        (-[WebDefaultWindowOperationsDelegate webViewFirstResponderInWindow:]): Added default implementation, calls firstResponder.
        (-[WebDefaultWindowOperationsDelegate webView:makeFirstResponderInWindow:]): Added default implementation, calls makeFirstResponder.
        (-[WebDefaultWindowOperationsDelegate webViewIsResizable:]): Added default implementation, calls showsResizeIndicator.
        (-[WebDefaultWindowOperationsDelegate webView:setResizable:]): Added default implementation, calls setShowsResizeIndicator.
        (-[WebDefaultWindowOperationsDelegate webView:setFrame:]): Use display:YES, not display:NO.
        (-[WebDefaultWindowOperationsDelegate webViewFrame:]): Return NSZeroRect if window is nil instead of random garbage.
        (-[WebDefaultWindowOperationsDelegate webView:setContentRect:]): Use display:YES, not display:NO.
        (-[WebDefaultWindowOperationsDelegate webViewContentRect:]): Return NSZeroRect if window is nil instead of random garbage.
        (-[WebDefaultWindowOperationsDelegate webView: runJavaScriptAlertPanelWithMessage:]): Added a FIXME because we should have a default implementation here.
        (-[WebDefaultWindowOperationsDelegate webView:runJavaScriptConfirmPanelWithMessage:]): Ditto.
        (-[WebDefaultWindowOperationsDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:]): Put a default implementation here.
        (-[WebDefaultWindowOperationsDelegate webView:runOpenPanelForFileButtonWithResultListener:]): Added a FIXME because we should have a default implementation here.

2003-03-29  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3178058 - Plug-ins are stopped/reloaded when switching tabs
        Made the "Enable plug-ins" preference toggle in real-time again.

        No events including null events are sent when a plug-in is in a non-frontmost tab. This causes Flash movies to pause (which is nice) and QT movies to continue to play.

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]): use the current window, clip out the plug-in when not in an actual window
        (-[WebBaseNetscapePluginView restorePortState:]): use the current window
        (-[WebBaseNetscapePluginView sendEvent:]): added asserts
        (-[WebBaseNetscapePluginView sendActivateEvent:]): tweak
        (-[WebBaseNetscapePluginView sendNullEvent]): tweak
        (-[WebBaseNetscapePluginView restartNullEvents]): tweak
        (-[WebBaseNetscapePluginView isInResponderChain]): tweak
        (-[WebBaseNetscapePluginView performKeyEquivalent:]): tweak
        (-[WebBaseNetscapePluginView canStart]): new, implemented by subclasses
        (-[WebBaseNetscapePluginView didStart]): new, implemented by subclasses
        (-[WebBaseNetscapePluginView addWindowObservers]): new
        (-[WebBaseNetscapePluginView removeWindowObservers]): new
        (-[WebBaseNetscapePluginView start]): check pref, call canStart, addWindowObservers and didStart
        (-[WebBaseNetscapePluginView stop]): call removeWindowObservers
        (-[WebBaseNetscapePluginView currentWindow]): new, returns the actual window else the host window
        (-[WebBaseNetscapePluginView initWithFrame:]): observer pref change notifications
        (-[WebBaseNetscapePluginView dealloc]): call removeObserver
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]): stop if there is no host window
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]): start if we moved to a window
        (-[WebBaseNetscapePluginView viewWillMoveToHostWindow:]): stop if there will be no windows
        (-[WebBaseNetscapePluginView viewDidMoveToHostWindow]): start if there is a window
        (-[WebBaseNetscapePluginView preferencesHaveChanged:]): renamed, start or stop
        (-[WebBaseNetscapePluginView destroyStream:reason:]): tweak
        (-[NSData _web_locationAfterFirstBlankLine]): tweak
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView initWithFrame:]): call setAutoresizingMask here
        (-[WebNetscapePluginDocumentView canStart]): new, return YES if there is a data source
        (-[WebNetscapePluginDocumentView didStart]): redeliver the stream if there is any data
        (-[WebNetscapePluginDocumentView setDataSource:]): start if there is a current window
        (-[WebNetscapePluginDocumentView layout]): no need to call setWindow, this is done in the superclass
        (-[WebNetscapePluginDocumentView viewWillMoveToHostWindow:]): forward to super to make compiler happy
        (-[WebNetscapePluginDocumentView viewDidMoveToHostWindow]): forward to super to make compiler happy
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView didStart]): start the load
        (-[WebNetscapePluginEmbeddedView dataSource]): tweak
        * WebView.subproj/WebDocument.h: added viewWillMoveToHostWindow: and viewDidMoveToHostWindow
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _viewWillMoveToHostWindow:]): forward to document view and subframes
        (-[WebFrame _viewDidMoveToHostWindow]): forward to document view and subframes
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView viewWillMoveToHostWindow:]): forward to plug-in views
        (-[WebHTMLView viewDidMoveToHostWindow]): forward to plug-in views
        (-[NSArray _web_makePluginViewsPerformSelector:withObject:]): new
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _reset]): don't stop plug-ins here. WebBaseNetscapePluginView can handle that
        * WebView.subproj/WebImageView.m:
        (-[WebImageView viewWillMoveToHostWindow:]): implement new WebDocumentView methods
        (-[WebImageView viewDidMoveToHostWindow]): implement new WebDocumentView methods
        * WebView.subproj/WebTextView.m:
        (-[WebTextView viewWillMoveToHostWindow:]): implement new WebDocumentView methods
        (-[WebTextView viewDidMoveToHostWindow]): implement new WebDocumentView methods
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView setHostWindow:]): new
        (-[WebView hostWindow]): new
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebViewPrivate dealloc]): release the host window

2003-03-31  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge nextKeyViewOutsideWebFrameViews]): Get next key view from WebView, only using
        the top level WebFrameView if the WebView doesn't have one set (for compatibility in case
        some of our current WebKit clients are using this).
        (-[WebBridge previousKeyViewOutsideWebFrameViews]): Ditto.

2003-03-31  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3211730 -- REGRESSION: Flash spawns blank page then loads new page inside banner itself

        * Plugins.subproj/WebBaseNetscapePluginView.m: (-[WebBaseNetscapePluginView loadPluginRequest:]):
        Load the request in the frame we found or created, not always in our own frame (oops!).

        - other changes

        * History.subproj/WebHistory.h: Update comments to all say "Item" instead of "Entry".
        They didn't match the method names any more.
        
        * WebView.subproj/WebView.m:
        (-[WebView acceptsFirstResponder]): Return YES.
        (-[WebView becomeFirstResponder]): Pass first responder on to the WebFrameView in the same way
        the WebFrameView passes it on to the document view.

2003-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3204257 - CNN's 'war on iraq' ticker stops on mouseover

        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _updateMouseoverWithEvent:]): When leaving an HTML
        view, tell it that the mouse moved outside everything in the view,
        even accounting for scrolled off portions (otherwise khtml gets
        confused). This makes cross-frame mouse enter/leave work properly.
        (-[WebHTMLView _clearLastHitViewIfSelf]): Method to clear last hit view,
        so we don't need to retain it.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView dealloc]): Call _clearLastHitViewIfSelf.

2003-03-28  Richard Williamson  <rjw@apple.com>

        Fix typo in comments that broke headerdoc.
        
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Imports NSURLConnection private header to access NSURLConnection code 
        that did not make the API cut.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        * WebView.subproj/WebMainResourceClient.m:

2003-03-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Trey

        NSURLConnection class method changed name:
            canInitWithRequest: -> canHandleRequest:

        Moved to API-approved model for synchronous loads.
        Removed fixme I put in yesterday having to do with
        reposting form data. The feature is fully functional
        again.

        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        (-[WebFrame _continueAfterNavigationPolicy:]):

2003-03-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Cosmetic change. Instances of 'resource' as a local variable
        name have been changed to 'connection'. Some other changes
        related to this cosmetic cleanup were done as well.

        As part of this change, I needed to change some 'connection'
        method arguments to 'con' to avoid the name conflict now
        that instance variables are named .connection'.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownloadPrivate dealloc]):
        (-[WebDownload initWithRequest:]):
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]):
        (+[WebDownload _downloadWithLoadingResource:request:response:delegate:proxy:]):
        (-[WebDownload loadWithDelegate:]):
        (-[WebDownload _downloadEnded]):
        (-[WebDownload _cancelWithError:]):
        * Downloads.subproj/WebDownloadPrivate.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream connection:didReceiveResponse:]):
        (-[WebNetscapePluginStream connection:didReceiveData:]):
        (-[WebNetscapePluginStream connectionDidFinishLoading:]):
        (-[WebNetscapePluginStream connection:didFailLoadingWithError:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connection:willSendRequest:redirectResponse:]):
        (-[WebSubresourceClient connection:didReceiveResponse:]):
        (-[WebSubresourceClient connection:didReceiveData:]):
        (-[WebSubresourceClient connectionDidFinishLoading:]):
        (-[WebSubresourceClient connection:didFailLoadingWithError:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate _releaseResources]):
        (-[WebBaseResourceHandleDelegate startLoading:]):
        (-[WebBaseResourceHandleDelegate loadWithRequest:]):
        (-[WebBaseResourceHandleDelegate setDefersCallbacks:]):
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate connection:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]):
        (-[WebMainResourceClient cancelWithError:]):
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient connection:didReceiveResponse:]):
        (-[WebMainResourceClient connection:didReceiveData:]):
        (-[WebMainResourceClient connectionDidFinishLoading:]):
        (-[WebMainResourceClient connection:didFailLoadingWithError:]):
        (-[WebMainResourceClient startLoading:]):

2003-03-28  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed names for URL connection callback methods to       
        use the API-approved names. No functional changes.

        * Downloads.subproj/WebDownload.h:
        * Downloads.subproj/WebDownload.m:
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]):
        (-[WebDownload connection:willSendRequest:redirectResponse:]):
        (-[WebDownload connection:didReceiveResponse:]):
        (-[WebDownload connection:didReceiveData:]):
        (-[WebDownload connectionDidFinishLoading:]):
        (-[WebDownload connection:didFailLoadingWithError:]):
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader connectionDidFinishLoading:]):
        (-[WebIconLoader connection:willSendRequest:redirectResponse:]):
        (-[WebIconLoader connection:didReceiveResponse:]):
        (-[WebIconLoader connection:didReceiveData:]):
        (-[WebIconLoader connection:didFailLoadingWithError:]):
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream connection:didReceiveResponse:]):
        (-[WebNetscapePluginStream connection:didReceiveData:]):
        (-[WebNetscapePluginStream connectionDidFinishLoading:]):
        (-[WebNetscapePluginStream connection:didFailLoadingWithError:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient connection:willSendRequest:redirectResponse:]):
        (-[WebSubresourceClient connection:didReceiveResponse:]):
        (-[WebSubresourceClient connection:didReceiveData:]):
        (-[WebSubresourceClient connectionDidFinishLoading:]):
        (-[WebSubresourceClient connection:didFailLoadingWithError:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate connection:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate connectionDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate connection:didFailLoadingWithError:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]):
        (-[WebMainResourceClient connection:willSendRequest:redirectResponse:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient connection:didReceiveResponse:]):
        (-[WebMainResourceClient connection:didReceiveData:]):
        (-[WebMainResourceClient connectionDidFinishLoading:]):
        (-[WebMainResourceClient connection:didFailLoadingWithError:]):
        (-[WebMainResourceClient startLoading:]):
        (-[WebResourceDelegateProxy connection:willSendRequest:redirectResponse:]):
        (-[WebResourceDelegateProxy connection:didReceiveResponse:]):
        (-[WebResourceDelegateProxy connection:didReceiveData:]):
        (-[WebResourceDelegateProxy connectionDidFinishLoading:]):
        (-[WebResourceDelegateProxy connection:didFailLoadingWithError:]):
        * WebView.subproj/WebResourceLoadDelegate.h:

2003-03-27  Chris Blumenberg  <cblu@apple.com>

        Left out a "!" in my last check-in.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):


2003-03-27  Chris Blumenberg  <cblu@apple.com>

        - Allow Netscape plug-ins that don't have resource files to load in Safari.
        - Added more error handling when loading plug-ins.

        Reviewed by darin.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):

2003-03-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3192344 - nil-deref in KWin::info scrolling amazon while other shopping tabs load
        - fixed 3098365 - Default window size changes as a result of popup windows
        - fixed 3189291 - javascript window.close() closes window, not just originating tab

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setWindowIsResizable:]): New bridge method, implemented
        by calling window operations delegate.
        (-[WebBridge windowIsResizable]): Likewise.
        (-[WebBridge firstResponder]): Likewise.
        (-[WebBridge makeFirstResponder:]): Likewise.
        (-[WebBridge closeWindow]): Likewise.

2003-03-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed WebResource to NSURLConnection. Some other "supporting" names
        changed as well. Note that there are no functional modifications,
        only name changes.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownload initWithRequest:]):
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]):
        (+[WebDownload _downloadWithLoadingResource:request:response:delegate:proxy:]):
        (-[WebDownload loadWithDelegate:]):
        (-[WebDownload resource:willSendRequest:]):
        (-[WebDownload resource:didReceiveResponse:]):
        (-[WebDownload resource:didReceiveData:]):
        (-[WebDownload resourceDidFinishLoading:]):
        (-[WebDownload resource:didFailLoadingWithError:]):
        * Downloads.subproj/WebDownloadPrivate.h:
        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        (-[WebIconLoader resourceDidFinishLoading:]):
        (-[WebIconLoader resource:willSendRequest:]):
        (-[WebIconLoader resource:didReceiveResponse:]):
        (-[WebIconLoader resource:didReceiveData:]):
        (-[WebIconLoader resource:didFailLoadingWithError:]):
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]):
        (-[WebNetscapePluginStream resource:didReceiveResponse:]):
        (-[WebNetscapePluginStream resource:didReceiveData:]):
        (-[WebNetscapePluginStream resourceDidFinishLoading:]):
        (-[WebNetscapePluginStream resource:didFailLoadingWithError:]):
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient resource:willSendRequest:]):
        (-[WebSubresourceClient resource:didReceiveResponse:]):
        (-[WebSubresourceClient resource:didReceiveData:]):
        (-[WebSubresourceClient resourceDidFinishLoading:]):
        (-[WebSubresourceClient resource:didFailLoadingWithError:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate loadWithRequest:]):
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate resourceDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate resource:didFailLoadingWithError:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueAfterNavigationPolicy:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient resource:willSendRequest:]):
        (-[WebMainResourceClient resource:didReceiveResponse:]):
        (-[WebMainResourceClient resource:didReceiveData:]):
        (-[WebMainResourceClient resourceDidFinishLoading:]):
        (-[WebMainResourceClient resource:didFailLoadingWithError:]):
        (-[WebResourceDelegateProxy setDelegate:]):
        (-[WebResourceDelegateProxy resource:willSendRequest:]):
        (-[WebResourceDelegateProxy resource:didReceiveResponse:]):
        (-[WebResourceDelegateProxy resource:didReceiveData:]):
        (-[WebResourceDelegateProxy resourceDidFinishLoading:]):
        (-[WebResourceDelegateProxy resource:didFailLoadingWithError:]):
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.m:

2003-03-27  Richard Williamson   <rjw@apple.com>

        API change: WebHistory initWithFile: -> initWithContentsOfURL:
        
        Reviewed by Ken.

        * History.subproj/WebHistory.h:
        * History.subproj/WebHistory.m:
        (-[WebHistory initWithContentsOfURL:]):
        (-[WebHistory URL]):
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate initWithContentsOfURL:]):
        (-[WebHistoryPrivate dealloc]):
        (-[WebHistoryPrivate _loadHistoryGuts:]):
        (-[WebHistoryPrivate loadHistory]):
        (-[WebHistoryPrivate _saveHistoryGuts:]):
        (-[WebHistoryPrivate URL]):
        (-[WebHistoryPrivate saveHistory]):

2003-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Shelley.

        - fixed 3157067 -- Pier1.com doesn't load; Microsoft VBScript runtime error in user-agent checking code
        
        Besides this fix, I also filed an evangelism bug, bug 3210612.

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Added pier1.com.
        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.

2003-03-27  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Trey

        Moved to final NSURLResponse and NSHTTPURLResponse API.

        * Downloads.subproj/WebDownload.m:
        * Misc.subproj/WebNSURLResponseExtras.m:
        (-[NSURLResponse suggestedFilenameForSaving]):
        (-[NSHTTPURLResponse suggestedFilenameForSaving]):
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _representationClass]):
        (-[WebDataSource _commitIfReady:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _opened]):
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        * WebView.subproj/WebFrameViewPrivate.m:
        (-[WebFrameView _makeDocumentViewForDataSource:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:]):
        (-[WebMainResourceClient resource:didReceiveResponse:]):
        (-[WebMainResourceClient startLoading:]):
        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation setDataSource:]):
        * WebView.subproj/WebTextView.m:
        (-[WebTextView dataSourceUpdated:]):

=== Safari-69 ===

2003-03-26  Richard Williamson   <rjw@apple.com>

        File name change WebPluginError.[hm] -> WebPlugInError.[hm]

        * Misc.subproj/WebKit.h:
        * Plugins.subproj/WebNullPluginView.m:
        * Plugins.subproj/WebPlugInError.h:
        * Plugins.subproj/WebPluginError.h: Removed.
        * Plugins.subproj/WebPluginError.m: Removed.
        * Plugins.subproj/WebPluginErrorPrivate.h:
        * WebKit.pbproj/project.pbxproj:

2003-03-26  Richard Williamson   <rjw@apple.com>

        WebPreferences API changes:
        
        JavaScriptCanOpenWindowsAutomatically -> javaScriptCanOpenWindowsAutomatically
        setJavaScriptCanOpenWindowsAutomatically -> setJavaScriptCanOpenWindowsAutomatically
        willLoadImagesAutomatically -> loadsImagesAutomatically
        setWillLoadImagesAutomatically -> setLoadsImagesAutomatically
        JavaEnabled -> isJavaEnabled
        setJavaEnabled -> setIsJavaEnabled
        JavaScriptEnabled -> isJavaScriptEnabled
        setJavaScriptEnabled -> setIsJavaScriptEnabled
        pluginsEnabled -> arePlugInsEnabled
        setPluginsEnabled -> setArePlugInsEnabled
        allowAnimatedImageLooping -> allowsAnimatedImageLooping
        setAllowAnimatedImageLooping -> setAllowsAnimatedImageLooping
        allowAnimatedImages -> allowsAnimatedImages
        setAllowAnimatedImages -> setAllowsAnimatedImages
        
        Made WebHistoryItem's ivars private.

        WebPluginError API changes:
        
        pluginPageURL -> plugInPageURLString
        contentURL -> contentURLString
       
        Reviewed by cblu.

        * API-Issues.rtf:
        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItemPrivate dealloc]):
        (-[WebHistoryItem init]):
        (-[WebHistoryItem dealloc]):
        (-[WebHistoryItem URLString]):
        (-[WebHistoryItem originalURLString]):
        (-[WebHistoryItem title]):
        (-[WebHistoryItem setDisplayTitle:]):
        (-[WebHistoryItem icon]):
        (-[WebHistoryItem lastVisitedDate]):
        (-[WebHistoryItem hash]):
        (-[WebHistoryItem anchor]):
        (-[WebHistoryItem isEqual:]):
        (-[WebHistoryItem description]):
        (-[WebHistoryItem _retainIconInDatabase:]):
        (-[WebHistoryItem initWithURL:target:parent:title:]):
        (-[WebHistoryItem URL]):
        (-[WebHistoryItem target]):
        (-[WebHistoryItem parent]):
        (-[WebHistoryItem setURL:]):
        (-[WebHistoryItem setOriginalURLString:]):
        (-[WebHistoryItem setTitle:]):
        (-[WebHistoryItem setTarget:]):
        (-[WebHistoryItem setParent:]):
        (-[WebHistoryItem setLastVisitedDate:]):
        (-[WebHistoryItem documentState]):
        (-[WebHistoryItem scrollPoint]):
        (-[WebHistoryItem setScrollPoint:]):
        (-[WebHistoryItem setAnchor:]):
        (-[WebHistoryItem isTargetItem]):
        (-[WebHistoryItem setIsTargetItem:]):
        (-[WebHistoryItem _recurseToFindTargetItem]):
        (-[WebHistoryItem targetItem]):
        (-[WebHistoryItem formData]):
        (-[WebHistoryItem setFormData:]):
        (-[WebHistoryItem formContentType]):
        (-[WebHistoryItem setFormContentType:]):
        (-[WebHistoryItem formReferrer]):
        (-[WebHistoryItem setFormReferrer:]):
        (-[WebHistoryItem children]):
        (-[WebHistoryItem addChildItem:]):
        (-[WebHistoryItem childItemWithName:]):
        (-[WebHistoryItem dictionaryRepresentation]):
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        (-[WebHistoryItem setAlwaysAttemptToUsePageCache:]):
        (-[WebHistoryItem alwaysAttemptToUsePageCache]):
        (-[WebHistoryItem _scheduleRelease]):
        (-[WebHistoryItem setHasPageCache:]):
        (-[WebHistoryItem pageCache]):
        * Plugins.subproj/WebPluginError.h:
        * Plugins.subproj/WebPluginError.m:
        (-[WebPlugInError plugInPageURLString]):
        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences isJavaEnabled]):
        (-[WebPreferences setIsJavaEnabled:]):
        (-[WebPreferences isJavaScriptEnabled]):
        (-[WebPreferences setIsJavaScriptEnabled:]):
        (-[WebPreferences javaScriptCanOpenWindowsAutomatically]):
        (-[WebPreferences arePlugInsEnabled]):
        (-[WebPreferences setArePlugInsEnabled:]):
        (-[WebPreferences allowsAnimatedImages]):
        (-[WebPreferences allowsAnimatedImageLooping]):
        (-[WebPreferences setAllowsAnimatedImageLooping:]):
        (-[WebPreferences setLoadsImagesAutomatically:]):
        (-[WebPreferences loadsImagesAutomatically]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _updateWebCoreSettingsFromPreferences:]):

2003-03-26  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Changed WebResponse to NSURLResponse. Some other "supporting" names
        changed as well. Note that there are no functional modifications,
        only name changes.

        * Downloads.subproj/WebDownload.h:
        * Downloads.subproj/WebDownload.m:
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]):
        (+[WebDownload _downloadWithLoadingResource:request:response:delegate:proxy:]):
        (-[WebDownload _setResponse:]):
        (-[WebDownload resource:didReceiveResponse:]):
        * Downloads.subproj/WebDownloadPrivate.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader resource:didReceiveResponse:]):
        * Misc.subproj/WebKit.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream resource:didReceiveResponse:]):
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebSubresourceClient.h:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (-[WebSubresourceClient resource:didReceiveResponse:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource response]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setResponse:]):
        (-[WebDataSource _commitIfReady:]):
        (-[WebDataSource _addResponse:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _opened]):
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLRepresentation.m:
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient continueAfterContentPolicy:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:]):
        (-[WebMainResourceClient resource:didReceiveResponse:]):
        (-[WebMainResourceClient startLoading:]):
        (-[WebResourceDelegateProxy resource:didReceiveResponse:]):
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebTextRepresentation.m:
        * WebView.subproj/WebTextView.m:

2003-03-26  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2003-03-26  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - fixed 3209091 -- REGRESSION: WebFrameView leak (world leak)

        * WebView.subproj/WebView.m:
        (-[WebView _commonInitialization:frameName:groupName:]): Use copy, not retain,
        on an incoming NSString parameter.
        (-[WebView initWithFrame:frameName:groupName:]): Release the WebFrameView after
        setting it up.

        - other changes

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        Put the bug workaround here inside an ifdef so we don't compile it in on Panther.

2003-03-26  Chris Blumenberg  <cblu@apple.com>

        Use the private _cfBundle method on NSBundle so we only create 1 bundle per plug-in package class.

        Reviewed by trey.

        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromBundleAndMIMEDictionary:]):
        (-[WebBasePluginPackage dealloc]):
        * Plugins.subproj/WebNetscapePluginPackage.h:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage closeResourceFile:]):
        (-[WebNetscapePluginPackage getPluginInfoFromPLists]):
        (-[WebNetscapePluginPackage initWithPath:]):
        (-[WebNetscapePluginPackage load]):
        (-[WebNetscapePluginPackage unload]):
        * Plugins.subproj/WebPluginPackage.m:
        (-[WebPluginPackage initWithPath:]):
        (-[WebPluginPackage viewFactory]):
        (-[WebPluginPackage load]):
        (-[WebPluginPackage isLoaded]):

2003-03-26  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Maciej

        Finished conversion to NSMutableURLRequest. HTTP-specific
        mutator methods are now properly placed on an HTTP
        category of NSMutableURLRequest. All client code has
        been updated to use NSMutableURLRequest where appropriate.

        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate openNewWindowWithURL:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient resource:willSendRequest:]):

2003-03-25  Richard Williamson   <rjw@apple.com>

        Changed use of plugin to plugIn in our public API
        as instructed by those that must be obeyed.
        
        Reviewed by Trey.

        Changed userStyleSheetLocation to take/pass an NSURL.
        
        Reviewed by Chris
        
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNullPluginView.h:
        * Plugins.subproj/WebNullPluginView.m:
        (-[WebNullPluginView viewDidMoveToWindow]):
        * Plugins.subproj/WebPluginError.h:
        * Plugins.subproj/WebPluginError.m:
        (-[WebPlugInError plugInPageURL]):
        (-[WebPlugInError plugInName]):
        * Plugins.subproj/WebPluginErrorPrivate.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:]):
        (-[WebBridge viewForJavaAppletWithFrame:attributes:baseURL:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:plugInFailedWithError:dataSource:]):
        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences userStyleSheetLocation]):
        (-[WebPreferences setUserStyleSheetLocation:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _updateWebCoreSettingsFromPreferences:]):

        * API-Issues.rtf:  notes to self

2003-03-25  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3135385 - many file types don't work with the QuickTime plugin in Safari

        Reviewed by trey.

        * Plugins.subproj/WebBasePluginPackage.h:
        * Plugins.subproj/WebBasePluginPackage.m:
        (+[WebBasePluginPackage pluginWithPath:]): tweak
        (-[WebBasePluginPackage pathByResolvingSymlinksAndAliasesInPath:]): moved up from WebNetscapePluginPackage
        (-[WebBasePluginPackage initWithPath:]): retain path, create bundle so subclasses don't have to do this work
        (-[WebBasePluginPackage getPluginInfoFromBundleAndMIMEDictionary:]): was getMIMEInformation from WebPluginPackage
        (-[WebBasePluginPackage dealloc]): release the bundle
        (-[WebBasePluginPackage setMIMEToExtensionsDictionary:]): tweak
        * Plugins.subproj/WebNetscapePluginPackage.h:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (+[WebNetscapePluginPackage preferredLocalizationName]): new
        (-[WebNetscapePluginPackage openResourceFile]): tweak
        (-[WebNetscapePluginPackage closeResourceFile:]): tweak
        (-[WebNetscapePluginPackage stringForStringListID:andIndex:]): tweak
        (-[WebNetscapePluginPackage getPluginInfoFromResources]): was getMIMEInformation
        (-[WebNetscapePluginPackage pListForPath:createFile:]): new, calls BP_CreatePluginMIMETypesPreferences if createFile==YES
        (-[WebNetscapePluginPackage getPluginInfoFromPLists]): calls getPluginInfoFromBundleAndMIMEDictionary with the MIME dictionary from the user's home dir.
        (-[WebNetscapePluginPackage initWithPath:]): have the superclass do some initialization, call getPluginInfoFromPLists and/or getPluginInfoFromResources
        (-[WebNetscapePluginPackage executableType]): tweak
        (-[WebNetscapePluginPackage load]): get the BP_CreatePluginMIMETypesPreferences symbol
        (-[WebNetscapePluginPackage unload]): tweak
        (-[WebNetscapePluginPackage dealloc]): tweak
        * Plugins.subproj/WebPluginPackage.h:
        * Plugins.subproj/WebPluginPackage.m:
        (-[WebPluginPackage initWithPath:]): have the superclass do some initialization, call getPluginInfoFromBundleAndMIMEDictionary
        (-[WebPluginPackage viewFactory]): tweak
        (-[WebPluginPackage load]): call principalClass
        (-[WebPluginPackage isLoaded]): tweak
        * Plugins.subproj/npapi.h: added declaration for the BP_CreatePluginMIMETypesPreferences function pointer. 

2003-03-25  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for 3141794 -- No scroll bar for the 
        "collections" column of the bookmarks window

        Reviewed by Darin.

        * WebView.subproj/WebDynamicScrollBarsView.h:
        replaced disallowsScrolling boolean ivar with separate booleans for
        disallowHorizontalScrolling and disallowVerticalScrolling

        * WebView.subproj/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):
        take the two disallow booleans into account separately
        (-[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]),
        (-[WebDynamicScrollBarsView allowsHorizontalScrolling]),
        (-[WebDynamicScrollBarsView setAllowsVerticalScrolling:]),
        (-[WebDynamicScrollBarsView allowsVerticalScrolling]):
        new methods, do the obvious
        (-[WebDynamicScrollBarsView setAllowsScrolling:]):
        changed to set both ivars
        (-[WebDynamicScrollBarsView allowsScrolling]):
        changed to return YES if scrolling is allowed in either direction

        * WebKit.exp: exported symbol for WebDynamicScrollBarsView class name

2003-03-25  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Richard

        Fixed a bug that could occur in the new immutable/mutable
        request scheme. When opening a javascript window, it was
        possible for a request passed as a method argument to be
        released during the course of a method, particularly
        after that request was passed to willSendRequest:.
        The solution is to ask the data source for its current
        request rather than using the one stored in the method
        argument.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient startLoading:]):

2003-03-24  Trey Matteson  <trey@apple.com>

        Pass -seg_addr_table_filename <FILENAME> to ld.  This makes our frameworks in
        SYMROOT actually work for symbol resolution because they will have the correct
        prebinding address.  It also fixes obscure B&I problems with prebinding
        reported by Matt Reda.

        Note the reason all this is tricky for our projects is that we have a different
        install location for Jaguar and Panther.  The purpose of this arg is to declare
        at link time our eventual location, which allows the prebinding address to be
        found in /AppleInternal/Developer/seg_addr_table.  We use a funky back-tick
        expression within OTHER_LDFLAGS to get a conditional value depending on the
        build train we are in.

        This can all go away once we only build on Panther and don't embed the
        frameworks inside the Safari.app wrapper.

        In addition I fixed the OTHER_LDFLAGS settings in our build styles to be
        additive instead of overriding, so we have the args we used for B&I in force
        when building outside of B&I.

        Reviewed by Maciej.

        * WebKit.pbproj/project.pbxproj:

2003-03-25  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Updated to use NSMutableURLRequest where appropriate.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource initWithRequest:]):
        (-[WebDataSource request]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setURL:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):
        (-[WebFrame reload]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebFrame _reloadAllowingStaleDataWithOverrideEncoding:]):

2003-03-25  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3205745 -- WebKit.framework's Localizable.strings file contains high ASCII in the Key definition.

        * English.lproj/Localizable.strings: Regenerated with the new version of the
        extract-localizable-strings tool that uses \U syntax instead of "high ASCII".

        - changed cursive font back to "Apple Chancery" for now
        
        * WebView.subproj/WebPreferences.m: (+[WebPreferences initialize]): Change to "Apple Chancery".
        * English.lproj/StringsNotToBeLocalized.txt: Update for above change.

2003-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed 3206803 -- REGRESSION: Lucida Handwriting font doesn't work

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (acceptableChoice): Added. Returns NO if the weight/traits are no good.
        (betterChoice): Added. Returns YES if the new weight/traits are better than the old.
        (-[WebTextRendererFactory fontWithFamily:traits:size:]): Use the new functions to judge which
        font is good enough. Now it will accept an italic font if that's all we have.

        - fixed 3206904 -- use "Lucida Handwriting" for "cursive" so it works on systems without Classic

        * WebView.subproj/WebPreferences.m: (+[WebPreferences initialize]):
        Change default from "Apple Chancery" to "Lucida Handwriting".

        * English.lproj/StringsNotToBeLocalized.txt: Updated for this change.

2003-03-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        - made API (actually doc-only) changes needed for 3087535 -
        bugzilla queries come back as downloaded files

        * Downloads.subproj/WebDownload.h: Documented that
        download:didReceiveResponse: may be sent more than once.
        * WebView.subproj/WebLocationChangeDelegate.h: Documented that
        locationChangeCommittedForDataSource: may be sent more than once.
        * WebView.subproj/WebPolicyDelegate.h: Documented that
        decideContentPolicyForMIMEType:andRequest:inFrame: may be sent
        more than once.
        * WebView.subproj/WebResourceLoadDelegate.h: Documented that
        resource:didReceiveResponse:fromDataSource: may be sent more than
        once.

2003-03-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        - fixed 3083339 - significant top and side margin appended to new windows

        Part of the fix involves adding new window operation delegate methods.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge setWindowFrame:]): Tweaked code a bit.
        (-[WebBridge windowFrame]): Added. 
        (-[WebBridge setWindowContentRect:]): Added.
        (-[WebBridge windowContentRect]): Added.
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        (-[WebDefaultWindowOperationsDelegate webView:setContentRect:]): Implemented.
        (-[WebDefaultWindowOperationsDelegate webViewContentRect:]): Likewise.
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-24  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3155489 - Seed: PostScript files display instead of downloading, often as a blank page
        Fixed: 3106251 - quicken file not downloaded, can't save manually

        Reviewed by trey.

        * WebView.subproj/WebDataSourcePrivate.m:
        (+[WebDataSource _repTypes]): call [WebImageView supportedImageMIMETypes]
        * WebView.subproj/WebFrameViewPrivate.m:
        (+[WebFrameView _viewTypes]): call [WebImageView supportedImageMIMETypes]
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (+[WebImageView initialize]): was -initialize (oops)
        (+[WebImageView unsupportedImageMIMETypes]): new, AppKit images that we shouldn't display inline, includes ps and pdf
        (+[WebImageView supportedImageMIMETypes]): new, was in WebViewPrivate
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (+[WebTextView unsupportedTextMIMETypes]): renamed, added text/qif (quicken)
        * WebView.subproj/WebView.m:
        (+[WebView canShowMIMEType:]): call [WebTextView unsupportedTextMIMETypes]
        * WebView.subproj/WebViewPrivate.h: removed _supportedImageMIMETypes
        * WebView.subproj/WebViewPrivate.m: removed _supportedImageMIMETypes

2003-03-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by hyatt.

        Moved closer to target API for NSURLRequest. Merged in
        final names for immutable and mutable versions of this
        class and its HTTP category. The next step will be to
        actually make the split between immutable/mutable
        variants of NSURLRequest.

        In WebKit, this amounts to name changes only.

        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge incomingReferrer]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate openNewWindowWithURL:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame reload]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem]):
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient resource:willSendRequest:]):

2003-03-22  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3203869 -- Monaco 9 looks different in Safari than in TextEdit (uses outline instead of bitmap)

        * Misc.subproj/WebKitNSStringExtras.m: (-[NSString _web_widthWithFont:]):
        Pass usingPrinterFont:NO, since this is used exclusively for on-screen text, not printing.
        * Misc.subproj/WebStringTruncator.m: (truncateString): Ditto.

        * WebCoreSupport.subproj/WebTextRenderer.h: Add usingPrinterFont boolean field and parameter to init.
        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer initWithFont:forScreen:]):
        Add usingPrinterFont parameter, and get the screen font if it's NO, also store the boolean
        for later use.
        (-[WebTextRenderer _floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding: attemptFontSubstitution:widths:fonts:glyphs:numGlyphs:letterSpacing:wordSpacing:fontFamilies:]):
        Pass the usingPrinterFont parameter through when getting a substitute font.

        * WebCoreSupport.subproj/WebTextRendererFactory.h: Add separate caches for screen and printing text
        renderers. Add usingPrinterFont parameter to our rendererWithFont: method (the one inherited from WebCore
        still has no parameter).
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory init]): Create both caches.
        (-[WebTextRendererFactory dealloc]): Release both caches.
        (-[WebTextRendererFactory rendererWithFont:]): Call the new rendererWithFont:usingPrinterFont: method,
        passing usingPrinterFonts from the WebCore side. Thus any fonts fetched by WebCore during printing
        are printing fonts, and otherwise they are screen fonts.
        (-[WebTextRendererFactory rendererWithFont:usingPrinterFont:]): Added. Has the code from the old
        rendererWithFont: method, but passes the usingPrinterFont parameter through to the WebTextRenderer
        init method.
        
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView initWithFrame:]): Don't set unused canDragTo and canDragFrom fields.
        (-[WebHTMLView drawRect:]): Call -[WebTextRendererFactory setUsingPrinterFonts:] here if we are printing,
        as indicated by the usingPrinterFonts field. The reason we do this only inside drawRect is so we don't
        affect redraws of other HTML views that are not being printed that might be in "needs display" state when
        printing began. 
        (-[WebHTMLView _setUsingPrinterFonts:]): Added. Calls _setUsingPrinterFonts on all WebHTMLViews inside
        this one, then does the work for this one. Uses the frame hierarchy rather than the view hierarchy, but
        either would work. If printer font state is changing, then sets the WebTextRendererFactory mode, then
        forces a layout and application of styles, but without triggering display.
        (-[WebHTMLView beginDocument]): Do an explicit display so this view does not have to be displayed while
        it is in "use printer fonts" mode. Then call _setUsingPrinterFonts:YES so that drawRect will use printer
        fonts, and also that the WebCore data structures and layout will be updated to reflect printer fonts as
        opposed to screen fonts.
        (-[WebHTMLView endDocument]): Call _setUsingPrinterFonts:NO to restore things to normal after printing.
        * WebView.subproj/WebHTMLViewPrivate.h: Removed unused canDragTo, canDragFrom, and liveAllowsScrolling
        fields. Added usingPrinterFonts field.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2003-03-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin

        Removed now-obsolete WebResponseCachePolicy enum.
        Once the new cache API is ready, there will be new features
        to replace what this enum provided. Seeing as how this
        enum was largely unused, there is no impact associated with         
        removing it now.

        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):

2003-03-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Cleaned up some missed WebRequest -> NSURLRequest  
        name conversions.

        * WebView.subproj/WebFramePrivate.m

2003-03-24  Ken Kocienda  <kocienda@apple.com>

        Reviewed by John

        Changed WebRequest to NSURLRequest. Several other names,        
        like some constants whose names were based on WebRequest,
        changed as well.

        * Downloads.subproj/WebDownload.h:
        * Downloads.subproj/WebDownload.m:
        (-[WebDownload initWithRequest:]):
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]):
        (+[WebDownload _downloadWithLoadingResource:request:response:delegate:proxy:]):
        (-[WebDownload _setRequest:]):
        (-[WebDownload resource:willSendRequest:]):
        * Downloads.subproj/WebDownloadPrivate.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        (-[WebIconLoader resource:willSendRequest:]):
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]):
        (-[WebBaseNetscapePluginView getURLNotify:target:notifyData:]):
        (-[WebBaseNetscapePluginView getURL:target:]):
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        (-[WebPluginRequest initWithRequest:frameName:notifyData:]):
        (-[WebPluginRequest request]):
        * Plugins.subproj/WebBaseNetscapePluginViewPrivate.h:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView viewDidMoveToWindow]):
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showURL:inFrame:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        (-[WebBridge isReloading]):
        (-[WebBridge loadEmptyDocumentSynchronously]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        (-[WebSubresourceClient resource:willSendRequest:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate startLoading:]):
        (-[WebBaseResourceHandleDelegate loadWithRequest:]):
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource initWithRequest:]):
        (-[WebDataSource initialRequest]):
        (-[WebDataSource request]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setURL:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _originalRequest]):
        (-[WebDataSource _lastCheckedRequest]):
        (-[WebDataSource _setLastCheckedRequest:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        (-[WebDefaultContextMenuDelegate openNewWindowWithURL:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        (-[WebDefaultPolicyDelegate webView:decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:willSendRequest:fromDataSource:]):
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):
        (-[WebFrame reload]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem]):
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        (-[WebFrame _loadRequest:triggeringAction:loadType:formState:]):
        (-[WebFrame _invalidatePendingPolicyDecisionCallingDefaultAction:]):
        (-[WebFrame _checkNewWindowPolicyForRequest:action:frameName:formState:andCall:withSelector:]):
        (-[WebFrame _continueAfterNewWindowPolicy:]):
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
        (-[WebFrame _continueAfterNavigationPolicy:]):
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formState:]):
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):
        (-[WebFrame _continueLoadRequestAfterNewWindowPolicy:frameName:formState:]):
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebFrame _reloadAllowingStaleDataWithOverrideEncoding:]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        (-[WebFrame _loadRequest:inFrameNamed:]):
        * WebView.subproj/WebFrameView.m:
        (-[WebFrameView concludeDragOperation:]):
        * WebView.subproj/WebImageRepresentation.m:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterNavigationPolicy:formState:]):
        (-[WebMainResourceClient resource:willSendRequest:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient startLoading:]):
        (-[WebResourceDelegateProxy resource:willSendRequest:]):
        * WebView.subproj/WebPolicyDelegate.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebView.m:
        (-[WebView takeStringURLFrom:]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _downloadURL:toDirectory:]):
        (-[WebView _openNewWindowWithRequest:]):
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-21  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3081681 - text/calendar should be downloaded instead of displayed
        Fixed: 3177603 - vCards appear in browser, not downloaded

        Reviewed by darin.

        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (+[WebDataSource _representationClassForMIMEType:]): was _canShowMIMEType
        * WebView.subproj/WebFrameViewPrivate.h:
        * WebView.subproj/WebFrameViewPrivate.m:
        (+[WebFrameView _viewClassForMIMEType:]): was _canShowMIMEType
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (+[WebTextView unshowableMIMETypes]): new, returns text types that shouldn't be shown
        * WebView.subproj/WebView.m:
        (+[WebView canShowMIMEType:]): call unshowableMIMETypes

2003-03-20  Richard Williamson   <rjw@apple.com>

        Use "Item" consistently in the WebHistory and WebBackForwardList.
        Change createSharedHistoryWithFile: to setSharedHistory:
        Make the various page cache methods per WebBackForwardList instead of global.
        
        Reviewed by gramps.

        * History.subproj/WebBackForwardList.h:
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardListPrivate dealloc]):
        (-[WebBackForwardList init]):
        (-[WebBackForwardList dealloc]):
        (-[WebBackForwardList goBack]):
        (-[WebBackForwardList goForward]):
        (-[WebBackForwardList goToItem:]):
        (-[WebBackForwardList backItem]):
        (-[WebBackForwardList currentItem]):
        (-[WebBackForwardList forwardItem]):
        (-[WebBackForwardList containsItem:]):
        (-[WebBackForwardList maximumSize]):
        (-[WebBackForwardList setMaximumSize:]):
        (-[WebBackForwardList description]):
        (-[WebBackForwardList clearPageCache]):
        (-[WebBackForwardList setPageCacheSize:]):
        (-[WebBackForwardList pageCacheSize]):
        (-[WebBackForwardList setUsesPageCache:]):
        (-[WebBackForwardList usesPageCache]):
        (-[WebBackForwardList backListCount]):
        (-[WebBackForwardList forwardListCount]):
        (-[WebBackForwardList itemAtIndex:]):
        * History.subproj/WebHistory.h:
        * History.subproj/WebHistory.m:
        (-[_WebCoreHistoryProvider containsItemForURLString:]):
        (+[WebHistory setSharedHistory:]):
        (-[WebHistory addItemForURL:]):
        (-[WebHistory addItem:]):
        (-[WebHistory removeItem:]):
        (-[WebHistory removeItems:]):
        (-[WebHistory removeAllItems]):
        (-[WebHistory addItems:]):
        (-[WebHistory orderedItemsLastVisitedOnDay:]):
        (-[WebHistory containsItemForURLString:]):
        (-[WebHistory itemForURL:]):
        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate insertItem:atDateIndex:]):
        (-[WebHistoryPrivate removeItemForURLString:]):
        (-[WebHistoryPrivate addItem:]):
        (-[WebHistoryPrivate removeItem:]):
        (-[WebHistoryPrivate removeItems:]):
        (-[WebHistoryPrivate removeAllItems]):
        (-[WebHistoryPrivate addItems:]):
        (-[WebHistoryPrivate orderedItemsLastVisitedOnDay:]):
        (-[WebHistoryPrivate containsItemForURLString:]):
        (-[WebHistoryPrivate itemForURL:]):
        (-[WebHistoryPrivate _loadHistoryGuts:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge goBackOrForward:]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setTitle:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addBackForwardItemClippedAtTarget:]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _canCachePage]):
        (-[WebFrame _purgePageCache]):
        (-[WebFrame _goToItem:withLoadType:]):
        (-[WebFrame _resetBackForwardListToCurrent]):
        * WebView.subproj/WebLocationChangeDelegate.h:
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView _commonInitialization:frameName:groupName:]):
        (-[WebView setMaintainsBackForwardList:]):
        (-[WebView goBack]):
        (-[WebView goForward]):

2003-03-20  Chris Blumenberg  <cblu@apple.com>

        Properly handle file URL directory errors.

        Reviewed by trey.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _iconForFileURL:withSize:]): when file URL has no path, return generic file icon
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeError]): set the URL, don't set it to nil!

2003-03-20  Vicki Murley  <vicki@apple.com>

        don't include WebFoundation.h

        Reviewed by cblu.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * Plugins.subproj/WebNetscapePluginStream.m:

=== Safari-68 ===

2003-03-20  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-03-19  Ed Voas  voas@apple.com

        Reviewed by Richard.

        React to WebView API changes. Redo HIWebView API.

        * Carbon.subproj/HIWebView.h:
        * Carbon.subproj/HIWebView.m:
        (if):
        (switch):
        * Carbon.subproj/HIWebViewPriv.h: Removed.
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:

2003-03-19  Richard Williamson   <rjw@apple.com>

        Removed initWithView:* constructors from WebView.
        New designated initializer for WebView is initWithFrame:frameName:groupName:
        
        Reviewed by cblu & ed.

        * Carbon.subproj/HIWebView.m:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView init]):
        (-[WebView initWithFrame:]):

2003-03-19  Richard Williamson   <rjw@apple.com>

        Rename WebControllerPolicyDelegate*.[hm] to WebPolicyDelegate*.[hm]
        
        Reviewed by trey.

        * API-Issues.rtf:
        * Misc.subproj/WebKit.h:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebControllerPolicyDelegate.h: Removed.
        * WebView.subproj/WebControllerPolicyDelegate.m: Removed.
        * WebView.subproj/WebControllerPolicyDelegatePrivate.h: Removed.
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebFrameView.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebPolicyDelegate.m:
        * WebView.subproj/WebPolicyDelegatePrivate.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:

2003-03-19  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3202780 -- REGRESSION: progress bar, stop button, both get stuck in "loading" state (bartsoft.com)

        * WebView.subproj/WebDataSource.m: (-[WebDataSource isLoading]):
        Add back the "is this page complete" check, so that subresource loads don't make us
        think we're loading again, once the page is complete. On the other hand, frames
        must still be checked independent of the "is this page complete" flag to avoid
        reintroducing bug 3200611.

2003-03-19  Ed Voas  voas@apple.com

        Reviewed by Richard.

        Got it working in non-compositing mode as well, so in theory it
        can work inside a PowerPlant application as well. It's a bit of what
        I'd consider a hack, but it's pretty straightforward.

        * Carbon.subproj/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter setViewsNeedDisplay:]):
        * Carbon.subproj/HIViewAdapter.h:
        * Carbon.subproj/HIViewAdapter.m:
        (+[HIViewAdapter bindHIViewToNSView:nsView:]):
        (-[HIViewAdapter setNeedsDisplay:]):
        (-[HIViewAdapter setNeedsDisplayInRect:]):
        (SetViewNeedsDisplay):
        * Carbon.subproj/HIWebView.m:
        (if):

2003-03-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3127431 - bring the window with the named frame to the front

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge focusWindow]): Tell the window operations delegate to focus.
        (-[WebBridge loadURL:referrer:reload:target:triggeringEvent:form:formValues:]):
        If this navigation is meant for a different frame, focus its window.
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        Likewise.

2003-03-18  Trey Matteson  <trey@apple.com>

        3077223 full keyboard UI navigation fails in authentication sheet

        Hook up the views in this panel into a useful nextKeyView cycle.

        Reviewed by Maciej.

        * Panels.subproj/English.lproj/WebAuthenticationPanel.nib:

2003-03-17  Trey Matteson  <trey@apple.com>

        Support for saving passwords on forms-based logins.  Biggest change is that
        the willSubmitForm: message is async to allow a sheet to be presented.

        Also fixed @interface.*{ so prepare-change-log can swallow WebFramePrivate.m.

        Reviewed by Maciej.

        * WebView.subproj/WebControllerPolicyDelegate.m:
        (-[WebPolicyDecisionListener continue]):  The decision listener also
        implements WebFormSubmissionListener, to share some other impl.
        * WebView.subproj/WebControllerPolicyDelegatePrivate.h:
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate frame:willSubmitForm:withValues:submissionListener:]):
        Take listener param for async API.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadURL:referrer:loadType:target:triggeringEvent:form:formValues:]):
        Latent bug.  Don't call willSubmitForm if no values are being submitted.
        (-[WebFrame _postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        Latent bug.  Don't call willSubmitForm if no values are being submitted.
        (-[WebFrame _continueAfterWillSubmitForm:]):
        Continuation code for after FormDelegate is done with willSubmitForm.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formState:]):
        Pass new listener arg to willSubmitForm.
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        Nuke deadwood formIsLoginForm.
        (-[WebHTMLRepresentation elementIsPassword:]):  Just pass through glue
        over the bridge.

2003-03-18  Richard Williamson   <rjw@apple.com>

        Another rename WebController*.[hm] to WebView*.[hm]
        
        Reviewed by darin.

        * Carbon.subproj/HIWebView.h:
        * Misc.subproj/WebKit.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        * Panels.subproj/WebStandardPanelsPrivate.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        * Plugins.subproj/WebNetscapePluginStream.m:
        * Plugins.subproj/WebNullPluginView.m:
        * Plugins.subproj/WebPluginController.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        * WebView.subproj/WebController.h: Removed.
        * WebView.subproj/WebController.m: Removed.
        * WebView.subproj/WebControllerPrivate.h: Removed.
        * WebView.subproj/WebControllerPrivate.m: Removed.
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebImageView.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:

2003-03-18  Richard Williamson   <rjw@apple.com>

        Renamed WebView*.[hm] to WebFrameView*.[hm]
        
        * Misc.subproj/WebKit.h:
        * Misc.subproj/WebNSViewExtras.m:
        * Panels.subproj/WebStandardPanels.m:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        * Plugins.subproj/WebNullPluginView.m:
        * Plugins.subproj/WebPluginController.m:
        * Plugins.subproj/WebPluginDatabase.m:
        * WebCoreSupport.subproj/WebBridge.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebController.m:
        * WebView.subproj/WebControllerPrivate.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebDebugDOMNode.m:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebFrameView.m:
        * WebView.subproj/WebFrameViewPrivate.h:
        * WebView.subproj/WebFrameViewPrivate.m:
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebHTMLViewPrivate.m:
        * WebView.subproj/WebImageView.m:
        * WebView.subproj/WebMainResourceClient.m:
        * WebView.subproj/WebRenderNode.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebView.h: Removed.
        * WebView.subproj/WebView.m: Removed.
        * WebView.subproj/WebViewPrivate.h: Removed.
        * WebView.subproj/WebViewPrivate.m: Removed.

2003-03-18  Richard Williamson   <rjw@apple.com>

        Stage 2 of WebController to WebView renaming.
        
        Reviewed by hyatt.

        * API-Issues.rtf:
        * Carbon.subproj/HIWebView.h:
        * Carbon.subproj/HIWebView.m:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_bestURL]):
        * Panels.subproj/WebStandardPanels.m:
        (-[WebStandardPanels _didStartLoadingURL:inController:]):
        (-[WebStandardPanels _didStopLoadingURL:inController:]):
        (-[WebStandardPanels frontmostWindowLoadingURL:]):
        * Panels.subproj/WebStandardPanelsPrivate.h:
        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView controller]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation isPluginViewStarted]):
        (-[WebNetscapePluginRepresentation receivedData:withDataSource:]):
        * Plugins.subproj/WebNullPluginView.m:
        (-[WebNullPluginView viewDidMoveToWindow]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showStatus:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge mainFrame]):
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge showWindow]):
        (-[WebBridge areToolbarsVisible]):
        (-[WebBridge setToolbarsVisible:]):
        (-[WebBridge areScrollbarsVisible]):
        (-[WebBridge setScrollbarsVisible:]):
        (-[WebBridge isStatusBarVisible]):
        (-[WebBridge setStatusBarVisible:]):
        (-[WebBridge setWindowFrame:]):
        (-[WebBridge window]):
        (-[WebBridge runJavaScriptAlertPanelWithMessage:]):
        (-[WebBridge runJavaScriptConfirmPanelWithMessage:]):
        (-[WebBridge runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        (-[WebBridge runOpenPanelForFileButtonWithResultListener:]):
        (-[WebBridge setStatusText:]):
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        (-[WebBridge setWebFrame:]):
        (-[WebBridge createChildFrameNamed:withURL:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        (-[WebBridge userAgentForURL:]):
        (-[WebBridge nextKeyViewOutsideWebFrameViews]):
        (-[WebBridge previousKeyViewOutsideWebFrameViews]):
        (-[WebBridge defersLoading]):
        (-[WebBridge setDefersLoading:]):
        (-[WebBridge setNeedsReapplyStyles]):
        (-[WebBridge setNeedsLayout]):
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]):
        (-[WebBridge handleMouseDragged:]):
        (-[WebBridge mayStartDragWithMouseDragged:]):
        (-[WebBridge historyLength]):
        (-[WebBridge goBackOrForward:]):
        (formDelegate):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        * WebKit.exp:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate resourceDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate resource:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        * WebView.subproj/WebContextMenuDelegate.h:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (-[WebView _commonInitialization:frameName:groupName:]):
        (-[WebView initWithFrame:]):
        (-[WebView supportsTextEncoding]):
        (-[WebView userAgentForURL:]):
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebViewPrivate _clearControllerReferences:]):
        (+[WebView canShowFile:]):
        (+[WebView suggestedFileExtensionForMIMEType:]):
        (-[WebView _createFrameNamed:inParent:allowsScrolling:]):
        (-[WebView _findFrameNamed:]):
        (-[WebView _openNewWindowWithRequest:]):
        (-[WebView _menuForElement:]):
        (-[WebView _mouseDidMoveOverElement:modifierFlags:]):
        (-[WebView _frameForView:fromFrame:]):
        * WebView.subproj/WebControllerSets.h:
        * WebView.subproj/WebControllerSets.m:
        (+[WebControllerSets addController:toSetNamed:]):
        (+[WebControllerSets removeController:fromSetNamed:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _controller]):
        (-[WebDataSource _setController:]):
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _layoutChildren]):
        (+[WebDataSource _repTypes]):
        (-[WebDataSource _receivedData:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        (-[WebDefaultContextMenuDelegate openNewWindowWithURL:]):
        (-[WebDefaultContextMenuDelegate downloadURL:]):
        * WebView.subproj/WebDefaultLocationChangeDelegate.m:
        (-[WebDefaultLocationChangeDelegate webView:locationChangeStartedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:serverRedirectedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:locationChangeCommittedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:receivedPageTitle:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:receivedPageIcon:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:locationChangeDone:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:willCloseLocationForDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:locationChangedWithinPageForDataSource:]):
        (-[WebDefaultLocationChangeDelegate webView:clientWillRedirectTo:delay:fireDate:forFrame:]):
        (-[WebDefaultLocationChangeDelegate webView:clientRedirectCancelledForFrame:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:unableToImplementPolicyWithError:inFrame:]):
        (-[WebDefaultPolicyDelegate webView:decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        (-[WebDefaultPolicyDelegate webView:decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:willSendRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveResponse:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:didReceiveContentLength:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate webView:pluginFailedWithError:dataSource:]):
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        (-[WebDefaultWindowOperationsDelegate webView:runJavaScriptConfirmPanelWithMessage:]):
        (-[WebDefaultWindowOperationsDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:]):
        (-[WebDefaultWindowOperationsDelegate webView:runOpenPanelForFileButtonWithResultListener:]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame init]):
        (-[WebFrame initWithName:webFrameView:webView:]):
        (-[WebFrame frameView]):
        (-[WebFrame webView]):
        (-[WebFrame findFrameNamed:]):
        (+[WebFrame registerViewClass:representationClass:forMIMEType:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (if):
        (switch):
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _controller]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView controller]):
        (-[WebImageView menuForEvent:]):
        * WebView.subproj/WebLocationChangeDelegate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebFrameView setAllowsScrolling:]):
        (-[WebFrameView allowsScrolling]):
        (-[WebFrameView scrollView]):
        (-[WebFrameView documentView]):
        (-[WebFrameView drawRect:]):
        (-[WebFrameView setFrameSize:]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebFrameView _controller]):
        (-[WebFrameView _setDocumentView:]):
        (-[WebFrameView _setController:]):
        (-[WebFrameView _contentView]):
        (-[WebFrameView _verticalKeyboardScrollAmount]):
        (-[WebFrameView _horizontalKeyboardScrollAmount]):
        (-[WebFrameView _scrollToBottomLeft]):
        (+[WebFrameView _viewTypes]):
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-18  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3187143 -- when a font-family has many variants, Safari chooses the wrong one

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):
        Changed the algorithm here in two ways. 1) Pick the family member with matching traits that has
        a weight closest to 5, the standard weight; the old code picked the first family member with
        matching traits. 2) Match traits based on a mask of which traits are the important ones. The old
        code matched traits based on a rule of "if the trait bit is 1 it matters, otherwise don't care".

2003-03-18  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3194756 -- REGRESSION: Geneva bold yields Geneva plain, used to yield Helvetica bold (apple.com)

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):
        Remove the first call to NSFontManager before we do our searching algorithm.
        We always need to do the searching, because NSFontManager uses a different set of rules.

2003-03-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3200647 - File I/O related download errors just says "error"
        Reviewed by darin.

        * Downloads.subproj/WebDownload.m:
        (+[WebDownloadPrivate initialize]): call _registerWebKitErrors
        * English.lproj/Localizable.strings:
        * Misc.subproj/WebKitErrors.h: cleaned-up, removed unused errors
        * Misc.subproj/WebKitErrors.m:
        (+[WebError _registerWebKitErrors]):
        (registerErrors):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebView.m:
        (+[WebFrameView initialize]): call _registerWebKitErrors

2003-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Chris and Richard.

        - fixed 3200611 -- Progress indicator in tabs not shown for subframe loads

        * WebView.subproj/WebDataSource.m: (-[WebDataSource isLoading]):
        Remove the early out for when we're in the WebFrameStateComplete state.
        The top frame being complete does not really tell us anything about whether subframes
        are complete, especially since they can have their locations changed without affecting
        the top level frame at all.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2003-03-17  Chris Blumenberg  <cblu@apple.com>

        Made data categories use the "_web_" prefix.

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]):
        (-[NSData _web_startsWithBlankLine]):
        (-[NSData _web_locationAfterFirstBlankLine]):

2003-03-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3199105 - Accept carbon-style file URLs from plug-in POST requests
        Fixed: 3148767 - POST (aka Flash Remoting) doesn't work from Flash

        Reviewed by kocienda.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView _postURLNotify:target:len:buf:file:notifyData:allowHeaders:]): parse headers, handle carbon POSIX paths
        (-[WebBaseNetscapePluginView postURLNotify:target:len:buf:file:notifyData:]): call _postURLNotify
        (-[WebBaseNetscapePluginView postURL:target:len:buf:file:]): call _postURLNotify
        (-[NSData startsWithBlankLine]): new
        (-[NSData locationAfterFirstBlankLine]): new

2003-03-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3200259 - REGRESSION: Clicking on Flash links at homestarrunner.com creates blank windows

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadPluginRequest:]): Don't always
        make the window, only do it if the frame doesn't already
        exist. Duh.

2003-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Trey and Maciej.

        - fixed 3199154 -- REGRESSION: world leaks on any page load test

        * WebView.subproj/WebController.m: (-[WebController initWithView:frameName:groupName:]):
        Call through to initWithFrame, the designated initializer, not init. Calling [super init] results
        in calling our initWithFrame method, resulting in two calls to the _commonInitialization method.

2003-03-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        Adjusted for WebFoundation API changes.
        * Panels.subproj/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForRequest:]):

2003-03-17  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-03-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3199951 - Standalone plug-in content that is cancelled doesn't restart when switching tabs

        Instead of creating and managing resourceData in WebMainResourceClient then passing the ownership to WebDataSource, just manage it in WebDataSource. We had the prior behavior because we didn't buffer downloads. Now, we always buffer. The fix for the bug 






is to retain the incomplete data even though the load ends in error.

        Reviewed by darin.

        * WebView.subproj/WebDataSource.h: updated headerdoc for the data method
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource data]): just return resourceData
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _receivedData:]): create resourceData if necessary, append data to it.
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient initWithDataSource:]): don't work with resourceData
        (-[WebMainResourceClient dealloc]): don't work with resourceData
        (-[WebMainResourceClient resource:didReceiveData:]): don't work with resourceData
        (-[WebMainResourceClient resourceDidFinishLoading:]): don't work with resourceData

2003-03-16  Trey Matteson  <trey@apple.com>

        3198135 - need to fix our projects so SYMROOT is not stripped

        Tweaked stripping options:  B&I build does not COPY_PHASE_STRIP.
        Deployment build still does.
        We strip manually as part of the install that we do ourselves.

        Reviewed by Maciej.

        * WebKit.pbproj/project.pbxproj:

2003-03-14  Chris Blumenberg  <cblu@apple.com>

        Backed out changes to WebBaseNetscapePluginView. Unintentional commit.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView postURLNotify:target:len:buf:file:notifyData:]):
        (-[WebBaseNetscapePluginView postURL:target:len:buf:file:]):

2003-03-14  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3198961 - REGRESSION: Stopping load of plug-in content is not reflected in UI

        Reviewed by mjs.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient cancelWithError:]): call receivedError so [dataSource _receivedError:error complete:YES] is called

2003-03-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Don.

        - revert premature controller --> webView renaming, it's causing
        problems with window opening and such.
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:

2003-03-14  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3197872 - Standalone plug-in content isn't restarted when switching tabs
        Fixed: 3189675 - assertion in plug-in code fails (nil window) with .swf page displaying standalone in a tab

        We start plug-ins when they are added to the window and stop them when they are removed. To restart a plug-in, the data stream must be redelivered. This works in the embedded plug-in case, but in the standalone plug-in case, the stream is delivered by th






e machinery in WebKit. The stream is only delivered once. This fix addresses that.

        Reviewed by trey.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]): reset the offset ivar
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): If we create a file for the plug-in, handle the case where the file is already created.
        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView isStarted]): added so the stream knows the state of the view
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView initWithFrame:]): tweak
        (-[WebNetscapePluginDocumentView viewDidMoveToWindow]): call redeliverStream if we are added back to the window
        (-[WebNetscapePluginDocumentView setDataSource:]): only start the plug-in if we are in a window, don't assert
        * Plugins.subproj/WebNetscapePluginRepresentation.h:
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation dealloc]): release the retained data source and error
        (-[WebNetscapePluginRepresentation setDataSource:]): retain the data source
        (-[WebNetscapePluginRepresentation isPluginViewStarted]): new 
        (-[WebNetscapePluginRepresentation receivedData:withDataSource:]): only do work if isPluginViewStarted
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]): retain the error, only do work if isPluginViewStarted
        (-[WebNetscapePluginRepresentation finishedLoadingWithDataSource:]): only do work if isPluginViewStarted
        (-[WebNetscapePluginRepresentation redeliverStream]): call receivedData:: with all the received data up to this point. Call receivedError:: or finishedLoadingWithDataSource: if the load is already complete.

2003-03-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3188209 - REGRESSION: onmouseup handlers not running for most form elements

        * WebCoreSupport.subproj/WebFileButton.m:
        (-[WebFileButton chooseButtonPressed:]): Send appropriate NSNotification. 
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebNSTextView mouseDown:]): Call fieldEditorDidMouseDown: on
        delegate, if implemented, after calling super.

2003-03-13  Richard Williamson   <rjw@apple.com>

        First stage of the WebController -> WebView, WebView -> WebFrameView.
        This change does the WebView -> WebFrameView part of the change.  Also
        changes WebController's inheritance.  It now inherits from NSView.  Also
        added some simple action methods to WebController (soon to be WebView)
        to facilitate IB hookup.
        
        Reviewed by Maciej.

        * Carbon.subproj/CarbonWindowAdapter.m:
        * Carbon.subproj/HIWebView.h:
        * Carbon.subproj/HIWebView.m:
        (if):
        (switch):
        * Carbon.subproj/HIWebViewPriv.h:
        * Misc.subproj/WebKitStatistics.m:
        (+[WebKitStatistics viewCount]):
        * Misc.subproj/WebKitStatisticsPrivate.h:
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_parentWebFrameView]):
        * Panels.subproj/WebStandardPanels.m:
        (-[WebStandardPanels frontmostWindowLoadingURL:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView layout]):
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView dataSource]):
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedData:withDataSource:]):
        * Plugins.subproj/WebNullPluginView.m:
        (-[WebNullPluginView viewDidMoveToWindow]):
        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase init]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge areScrollbarsVisible]):
        (-[WebBridge setScrollbarsVisible:]):
        (-[WebBridge window]):
        (-[WebBridge createChildFrameNamed:withURL:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        (-[WebBridge nextKeyViewOutsideWebFrameViews]):
        (-[WebBridge previousKeyViewOutsideWebFrameViews]):
        (-[WebBridge setNeedsReapplyStyles]):
        (-[WebBridge setNeedsLayout]):
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]):
        (-[WebBridge frameRequiredForMIMEType:]):
        (-[WebBridge handleMouseDragged:]):
        (-[WebBridge mayStartDragWithMouseDragged:]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (+[WebContentTypes canShowMIMEType:]):
        (-[WebController _commonInitialization:frameName:groupName:]):
        (-[WebController init]):
        (-[WebController initWithFrame:]):
        (-[WebController initWithView:]):
        (-[WebController supportsTextEncoding]):
        (-[WebController takeStringURLFrom:]):
        (-[WebController goBack:]):
        (-[WebController goForward:]):
        (-[WebController stopLoading:]):
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate _clearControllerReferences:]):
        (-[WebController _createFrameNamed:inParent:allowsScrolling:]):
        (-[WebController _frameForView:fromFrame:]):
        (-[WebController _frameForView:]):
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _layoutChildren]):
        (-[WebDataSource _receivedData:]):
        * WebView.subproj/WebDebugDOMNode.h:
        * WebView.subproj/WebDebugDOMNode.m:
        (-[WebDebugDOMNode initWithWebFrameView:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate controller:contextMenuItemsForElement:defaultMenuItems:]):
        * WebView.subproj/WebDefaultLocationChangeDelegate.m:
        (-[WebDefaultLocationChangeDelegate controller:locationChangeStartedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:serverRedirectedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:locationChangeCommittedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:receivedPageTitle:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:receivedPageIcon:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:locationChangeDone:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:willCloseLocationForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:locationChangedWithinPageForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:clientWillRedirectTo:delay:fireDate:forFrame:]):
        (-[WebDefaultLocationChangeDelegate controller:clientRedirectCancelledForFrame:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate controller:unableToImplementPolicyWithError:inFrame:]):
        (-[WebDefaultPolicyDelegate controller:decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        (-[WebDefaultPolicyDelegate controller:decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate controller:identifierForInitialRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:willSendRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didReceiveResponse:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didReceiveContentLength:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didFinishLoadingFromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didFailLoadingWithError:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:pluginFailedWithError:dataSource:]):
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        (-[WebDefaultWindowOperationsDelegate controller:runJavaScriptConfirmPanelWithMessage:]):
        (-[WebDefaultWindowOperationsDelegate controller:runJavaScriptTextInputPanelWithPrompt:defaultText:]):
        (-[WebDefaultWindowOperationsDelegate controller:runOpenPanelForFileButtonWithResultListener:]):
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebDynamicScrollBarsView.m:
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame init]):
        (-[WebFrame initWithName:webFrameView:controller:]):
        (-[WebFrame view]):
        (+[WebFrame registerViewClass:representationClass:forMIMEType:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (if):
        (switch):
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        (-[WebHTMLView draggedImage:endedAt:operation:]):
        (-[WebHTMLView becomeFirstResponder]):
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _controller]):
        (-[WebHTMLView _frame]):
        (-[WebHTMLView _elementAtPoint:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView controller]):
        (-[WebImageView menuForEvent:]):
        (-[WebImageView mouseDragged:]):
        (-[WebImageView draggedImage:endedAt:operation:]):
        * WebView.subproj/WebLocationChangeDelegate.h:
        * WebView.subproj/WebRenderNode.h:
        * WebView.subproj/WebRenderNode.m:
        (-[WebRenderNode initWithName:position:rect:view:children:]):
        (-[WebRenderNode initWithWebFrameView:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebFrameView initWithFrame:]):
        (-[WebFrameView dealloc]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey.

        * English.lproj/StringsNotToBeLocalized.txt:
        Removed all the bookmarks-related strings that I forgot
        to remove in my previous checkin.

2003-03-13  John Sullivan  <sullivan@apple.com>

        Removed all the bookmarks code from WebKit; put it
        in WebBrowser instead.

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmark.h: Removed.
        * Bookmarks.subproj/WebBookmark.m: Removed.
        * Bookmarks.subproj/WebBookmarkGroup.h: Removed.
        * Bookmarks.subproj/WebBookmarkGroup.m: Removed.
        * Bookmarks.subproj/WebBookmarkGroupPrivate.h: Removed.
        * Bookmarks.subproj/WebBookmarkImporter.h: Removed.
        * Bookmarks.subproj/WebBookmarkImporter.m: Removed.
        * Bookmarks.subproj/WebBookmarkLeaf.h: Removed.
        * Bookmarks.subproj/WebBookmarkLeaf.m: Removed.
        * Bookmarks.subproj/WebBookmarkList.h: Removed.
        * Bookmarks.subproj/WebBookmarkList.m: Removed.
        * Bookmarks.subproj/WebBookmarkPrivate.h: Removed.
        * Bookmarks.subproj/WebBookmarkProxy.h: Removed.
        * Bookmarks.subproj/WebBookmarkProxy.m: Removed.
        * WebKit.exp:
        removed all bookmark-related symbols
        * WebKit.pbproj/project.pbxproj:
        updated for removed files

=== Safari-67 ===

2003-03-12  Chris Blumenberg  <cblu@apple.com>

        3196673 - REGRESSION: Assertion failure when download fails to create file
        - Retain the download delegate because it will live longer than the WebController which it is an instance of.

        Reviewed by rjw.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]): call _downloadStarted
        (-[WebDownload loadWithDelegate:]): call _downloadStarted
        (-[WebDownload _downloadStarted]): renamed from _loadStarted
        (-[WebDownload _downloadEnded]): release delegate
        (-[WebDownload resource:willSendRequest:]): reordered so if we are released in this method, we never call self
        (-[WebDownload resourceDidFinishLoading:]): don't call _loadEnded because _downloadEnded gets called in _didCloseFile and _cancelWithError
        (-[WebDownload resource:didFailLoadingWithError:]):  don't call _loadEnded because _downloadEnded gets called in _didCloseFile and _cancelWithError
        (-[WebDownload _didCloseFile:]): call _downloadEnded
        (-[WebDownload _cancelWithError:]): call _downloadEnded
        * WebView.subproj/WebController.h: mention that the download delegate gets retained.

2003-03-12  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3193552 -- REGRESSION: crash loading ftp directory URL
        - fixed minor problems with setDefersCallbacks handling and object lifetime

        * WebView.subproj/WebBaseResourceHandleDelegate.h: Removed now-unused cancelQuietly.
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate cancel]): Changed cancel to tolerate being called
        when we have already cancelled. It's an error to call cancelWithError once we
        have cancelled.
        
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeError]): Added. New function to
        create the WebError object for policy change.
        (-[WebMainResourceClient stopLoadingForPolicyChange]): Changed to just be a call
        to cancelWithError:.
        (-[WebMainResourceClient resource:willSendRequest:]): Call setDefersCallbacks:YES
        here; continueAfterNavigationPolicy already takes care of setDefersCallbacks:NO,
        but we lost this one somewhere along the way.
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Changed to call
        receivedError: on interruptForPolicyChangeError directly. It wasn't clearer to call
        a method named interruptForPolicyChange.
        (-[WebMainResourceClient resource:didReceiveResponse:]): Don't bother calling
        setDefersCallbacks:YES here any more; checkContentPolicyForResponse: takes care
        of that so there's no need to do it here. Initialize _contentLength before calling
        checkContentPolicyForResponse:, since that method can result in deallocating self.

2003-03-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for recent changes

2003-03-11  Chris Blumenberg  <cblu@apple.com>

        Fixed deployment build failure.

        * WebView.subproj/WebFramePrivate.m:

2003-03-11  Richard Williamson   <rjw@apple.com>

        Added controller: parameter to all WebControllers delegates.
        
        Reviewed by chris.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNullPluginView.m:
        (-[WebNullPluginView viewDidMoveToWindow]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showStatus:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge showWindow]):
        (-[WebBridge areToolbarsVisible]):
        (-[WebBridge setToolbarsVisible:]):
        (-[WebBridge isStatusBarVisible]):
        (-[WebBridge setStatusBarVisible:]):
        (-[WebBridge setWindowFrame:]):
        (-[WebBridge runJavaScriptAlertPanelWithMessage:]):
        (-[WebBridge runJavaScriptConfirmPanelWithMessage:]):
        (-[WebBridge runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        (-[WebBridge runOpenPanelForFileButtonWithResultListener:]):
        (-[WebBridge setStatusText:]):
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate resourceDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate resource:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        * WebView.subproj/WebContextMenuDelegate.h:
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _openNewWindowWithRequest:]):
        (-[WebController _menuForElement:]):
        (-[WebController _mouseDidMoveOverElement:modifierFlags:]):
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate controller:contextMenuItemsForElement:defaultMenuItems:]):
        * WebView.subproj/WebDefaultLocationChangeDelegate.m:
        (-[WebDefaultLocationChangeDelegate controller:locationChangeStartedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:serverRedirectedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:locationChangeCommittedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:receivedPageTitle:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:receivedPageIcon:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:locationChangeDone:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:willCloseLocationForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:locationChangedWithinPageForDataSource:]):
        (-[WebDefaultLocationChangeDelegate controller:clientWillRedirectTo:delay:fireDate:forFrame:]):
        (-[WebDefaultLocationChangeDelegate controller:clientRedirectCancelledForFrame:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate controller:unableToImplementPolicy:error:forURL:inFrame:]):
        (-[WebDefaultPolicyDelegate controller:decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        (-[WebDefaultPolicyDelegate controller:decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener:]):
        * WebView.subproj/WebDefaultResourceLoadDelegate.m:
        (-[WebDefaultResourceLoadDelegate controller:identifierForInitialRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:willSendRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didReceiveResponse:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didReceiveContentLength:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didFinishLoadingFromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:resource:didFailLoadingWithError:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate controller:pluginFailedWithError:dataSource:]):
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m:
        (-[WebDefaultWindowOperationsDelegate controller:runJavaScriptConfirmPanelWithMessage:]):
        (-[WebDefaultWindowOperationsDelegate controller:runJavaScriptTextInputPanelWithPrompt:defaultText:]):
        (-[WebDefaultWindowOperationsDelegate controller:runOpenPanelForFileButtonWithResultListener:]):
        * WebView.subproj/WebFramePrivate.m:
        (if):
        (switch):
        * WebView.subproj/WebLocationChangeDelegate.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient checkContentPolicyForResponse:andCallSelector:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        Final policy API changes:

        - changed WebPolicyDecisionListener to protocol in public API
        - replaced policy enum with separate methods
        - made content policy handling async
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebControllerPolicyDelegate.m:
        (-[WebPolicyDecisionListener _usePolicy:]):
        (-[WebPolicyDecisionListener use]):
        (-[WebPolicyDecisionListener ignore]):
        (-[WebPolicyDecisionListener download]):
        * WebView.subproj/WebControllerPolicyDelegatePrivate.h:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate unableToImplementPolicyWithError:inFrame:]):
        (-[WebDefaultPolicyDelegate decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        (-[WebDefaultPolicyDelegate decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (switch):
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient cancelContentPolicy]):
        (-[WebMainResourceClient cancel]):
        (-[WebMainResourceClient cancelQuietly]):
        (-[WebMainResourceClient cancelWithError:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient continueAfterContentPolicy:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:]):
        (-[WebMainResourceClient resource:didReceiveResponse:]):

2003-03-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed mistake in that last check-in that made Safari assert on startup with Chris's bookmarks bar

        * Misc.subproj/WebStringTruncator.m: (centerTruncateToBuffer):
        Fix logic here to not use an uninitialized variable.

2003-03-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3193213 -- assert truncatedLength+1 < STRING_BUFFER_SIZE creating tab label for firstyearibs.com
        - fixed 3194935 -- WebStringTruncator rightTruncateString: will break between composed characters
        - fixed right truncator to use interpolation algorithm rather than linear search

        * Misc.subproj/WebStringTruncator.m:
        (centerTruncateToBuffer): Changed from a class method to a plain function, and tweaked the code a bit.
        (rightTruncateToBuffer): Added. Like centerTruncateToBuffer, but does it on the right end instead.
        (stringWidth): Added. Helper function that calls the TextRenderer method with the right parameters.
        (truncateString): Moved all the code from centerTruncateString here, adding one new parameter, the
        truncate to buffer function.
        (+[WebStringTruncator centerTruncateString:toWidth:]): Call truncateString with the appropriate parameters.
        (+[WebStringTruncator centerTruncateString:toWidth:withFont:]): Ditto.
        (+[WebStringTruncator rightTruncateString:toWidth:withFont:]): Ditto.

=== Safari-66 ===

2003-03-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

        - fixed 3194221 - REGRESSION: search results loaded in wrong frame at directory.apple.com

        * WebView.subproj/WebFramePrivate.m:
        (_postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:):
        Deliver targetted form posts correctly.
2003-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3010915 -- mouse wheel won't scroll the main document when you are over [i]frame

        * WebView.subproj/WebDynamicScrollBarsView.h: Made WebDynamicScrollBarsView a subclass of
        WebCoreScrollView instead of NSScrollView.
        
        - other changes
        
        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _actionInformationForNavigationType:event:originalURL:):
        Fix problem where you would not get any information if the click was on a subview of the
        WebHTMLView, like a form control.

2003-03-10  Chris Blumenberg  <cblu@apple.com>

        Fixed some download-related leaks. Primarily, we were leaking the data source that started the download. The data source is now immediately released when it becomes a download.

        Reviewed by darin.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownloadPrivate dealloc]): release the WebResourceDelegateProxy
        (-[WebDownload _initWithLoadingResource:request:response:delegate:proxy:]): renamed, don't pass a datasource so WebDownload is completely disconnected from the that. Pass the proxy so it transfers ownership from WebMainResourceClient and it doesn'






t leak when we cancel a download.
        (-[WebDownload _setRequest:]): added
        (-[WebDownload _setResponse:]): added
        (-[WebDownload resource:willSendRequest:]): call _setRequest
        (-[WebDownload resource:didReceiveResponse:]): call _setResponse
        * Downloads.subproj/WebDownloadPrivate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m: removed notifyDelegatesOfInterruptionByPolicyChange, no longer called
        * WebView.subproj/WebMainResourceClient.h: made WebResourceDelegateProxy available to other classes
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient receivedError:]): moved most error handling code here
        (-[WebMainResourceClient cancel]): stop load, call receivedError
        (-[WebMainResourceClient interruptForPolicyChange]): renamed, call receivedError with the policy interrupt error
        (-[WebMainResourceClient stopLoadingForPolicyChange]): call interruptForPolicyChange
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): for WebPolicySave, create the download, call interruptForPolicyChange and return so the response isn't set on the superclass.
        (-[WebMainResourceClient resource:didFailLoadingWithError:]): call receivedError
        (-[WebResourceDelegateProxy setDelegate:]): don't retain the delegate
        (-[WebResourceDelegateProxy resourceDidFinishLoading:]): don't release the delegate
        (-[WebResourceDelegateProxy resource:didFailLoadingWithError:]): don't release the delegate

2003-03-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        - fixed 3127705 - don't open new window on opt-click even if the link requests it
        - fixed 3143971 - cmd-click should override the target="_blank" and target="_new" (important for tabs)

        - removed open new window and open new window behind policies
        - removed [WebFrame findOrCreateFrameNamed:] from API
        - remved showWindowBehind from window operations delegate
        - added decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener: delegate method
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]):
        (-[WebPluginRequest initWithRequest:frameName:notifyData:]):
        (-[WebPluginRequest dealloc]):
        (-[WebPluginRequest frameName]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showURL:inFrame:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:referrer:reload:target:triggeringEvent:form:formValues:]):
        (-[WebBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _openNewWindowWithRequest:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate openNewWindowWithURL:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate decideNewWindowPolicyForAction:andRequest:newFrameName:decisionListener:]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[NSObject performSelector:withObject:withObject:withObject:]):
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-07  Chris Blumenberg  <cblu@apple.com>

        Updated header doc comments.

        * Downloads.subproj/WebDownload.h:

2003-03-07  Richard Williamson   <rjw@apple.com>

        Drop mainDocumentError from WebDataSource.
        Combine registerView: and registerRepresentation: into one method on WebFrame.
        
        Reviewed by trey.

        * Plugins.subproj/WebPluginDatabase.m:
        (-[WebPluginDatabase init]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _mainDocumentError]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (+[WebFrame registerViewClass:representationClass:forMIMEType:]):
        * WebView.subproj/WebFramePrivate.m:
        (switch):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:

2003-03-07  John Sullivan  <sullivan@apple.com>

        WebKit part of fixes to these two synching-related bugs:

        3190844 -- Bookmarks Bar and Menu collections need to be
        marked specially in Bookmarks file

        3192197 -- Safari should write out UUID-full Bookmarks 
        file after reading UUID-free one

        Reviewed by Trey

        * Bookmarks.subproj/WebBookmark.h:
        * Bookmarks.subproj/WebBookmark.m:
        (-[WebBookmark setUUID:]):
        Removed the leading underscore, made this method public.
        Removed unnecessary constraint that new or old UUID had
        to be nil; now short-circuits the no-change case.
        (-[WebBookmark copyWithZone:]):
        updated for name change
        (-[WebBookmark initFromDictionaryRepresentation:withGroup:]):
        ditto

        * Bookmarks.subproj/WebBookmarkGroup.h:
        * Bookmarks.subproj/WebBookmarkGroup.m:
        (-[WebBookmarkGroup bookmarkForUUID:]):
        new public method to find a bookmark from a UUID.
        (-[WebBookmarkGroup _addBookmark:]):
        updated for name change

        * Bookmarks.subproj/WebBookmarkPrivate.h:
        removed declaration for old _setUUID

2003-03-07  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed regression caused when we made the stopLoading method on WebDataSource private

        * WebView.subproj/WebDataSourcePrivate.m: (-[WebDataSource _recursiveStopLoading]):
        The children are frames, so we need to do stopLoading, not _stopLoading.

2003-03-07  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3191052 - Predetermined downloads should not be started from the browser window
        - Stripped the rest of WebKit of download related code.

        Reviewed by trey.

        * Downloads.subproj/WebDownload.h: Changed the download delegate method from download:didStartFromDataSource: download:didStartFromRequest:. Passing the data source wasn't that helpful. It was also quirky that the data source would sometimes be ni






l.
        * Downloads.subproj/WebDownload.m:
        (-[WebDownloadPrivate dealloc]): release directory path
        (-[WebDownload _initWithLoadingResource:dataSource:]): call _loadStarted and _loadEnded
        (-[WebDownload loadWithDelegate:]): call _loadStarted
        (-[WebDownload _loadStarted]): set flag, retain self
        (-[WebDownload _loadEnded]): set flag, release self
        (-[WebDownload resource:willSendRequest:]): call _loadEnded if the returned request is nil
        (-[WebDownload resourceDidFinishLoading:]): call _loadEnded
        (-[WebDownload resource:didFailLoadingWithError:]): call _loadEnded
        (-[WebDownload _createFileIfNecessary]): handle a predetermined download directory, not path
        (-[WebDownload _cancelWithError:]): call _loadEnded
        (-[WebDownload _setDirectoryPath:]): new private method
        * Downloads.subproj/WebDownloadPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _mainReceivedError:fromDataSource:complete:]): don't call [dataSource isDownloading]
        (-[WebController _downloadURL:toDirectory:]): create and start a self retained WebDownload
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m: removed download related methods
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m: removed download related methods
        (-[WebDataSource _commitIfReady:]): don't call isDownloading
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): when handing off the load to the download, don't deal with the download path
        (-[WebMainResourceClient resource:didReceiveResponse:]): no more predetermined downloads come through here

2003-03-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        Step towards policy API changes. Remove WebPolicyNone,
        WebPolicyRevealInFinder, WebPolicyOpenURL and WebPolicyShow.
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        * WebView.subproj/WebFramePrivate.m:
        (switch):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):

2003-03-06  Richard Williamson   <rjw@apple.com>

        Remove setWebView: from WebFrame.
        
        Reviewed by chris.

        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame initWithName:webView:controller:]):
        (-[WebFrame name]):

2003-03-06  Richard Williamson   <rjw@apple.com>

        API changes.  WebCapabilities -> WebContentTypes.
        Move fileExtension from WebDataSource to WebContentTypes
        
        Reviewed by chris.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_bestURL]):
        * WebKit.exp:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (+[WebContentTypes suggestedFileExtensionForMIMEType:]):
        (-[WebController supportsTextEncoding]):
        (-[WebController setCustomTextEncodingName:]):
        (-[WebController _mainFrameOverrideEncoding]):
        (-[WebController customTextEncodingName]):
        (-[WebController stringByEvaluatingJavaScriptFromString:]):
        (-[WebController userAgentForURL:]):
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):

2003-03-06  Chris Blumenberg  <cblu@apple.com>

        Implemented WebDownload API.

        Fixed: 3118355 - Download mechanism that doesn't involve WebDataSource, WebFrame, WebController etc
        Fixed: 3110173 - add per-request disabling of download decoding, use to turn off when "Open Safe Files" is off

        Reviewed by trey, rjw, mjs.

        * Downloads.subproj/WebDownload.h: Tweaked comments, added new methods.
        * Downloads.subproj/WebDownload.m:
        (-[WebDownloadPrivate dealloc]): release new objects
        (-[WebDownload initWithRequest:]): was initWithRequest:delegate:, but found that starting the load from the init method made it tricky to do other set up work before the load started.
        (-[WebDownload _initWithLoadingResource:dataSource:]): private init method, "catches up" to load by sending delegate method immediately, doesn't retain the dataSource, uses it for info
        (-[WebDownload loadWithDelegate:]): new, starts load
        (-[WebDownload cancel]): cancel load with no error
        (-[WebDownload path]): simple getter
        (-[WebDownload setPath:]): implement this because WebDownload is the WebDownloadDecisionListener, call _setPath
        (-[WebDownload resource:willSendRequest:]): resource delegate method
        (-[WebDownload resource:didReceiveResponse:]): resource delegate method
        (-[WebDownload resource:didReceiveData:]): resource delegate method, decode and write data, cancel load if error
        (-[WebDownload resourceDidFinishLoading:]): resource delegate method, decode and write data if necessary, end in error if error
        (-[WebDownload resource:didFailLoadingWithError:]): resource delegate method, end in error
        (-[WebDownload _pathWithUniqueFilenameForPath:]): this work was done in _createFileIfNecessary, does what it says
        (-[WebDownload _createFSRefForPath:]): this work was done in _createFileIfNecessary as well, makes fileRefPtr point to a file
        (-[WebDownload _createFileIfNecessary]): creates file, creates temp file if path hasn't been set yet
        (-[WebDownload _decodeHeaderData:dataForkData:resourceForkData:]): call private method
        (-[WebDownload _decodeData:dataForkData:resourceForkData:]): made private, if the download is encoded, ask client if OK to decode
        (-[WebDownload _decodeData:]): hardly changed, don't cancel, just return error
        (-[WebDownload _dataIfDoneBufferingData:]): moved, not changed
        (-[WebDownload _finishDecoding]): hardly changed, don't cancel, just return error
        (-[WebDownload _writeForkData:isDataFork:]): moved, not changed
        (-[WebDownload _writeDataForkData:resourceForkData:]): moved, not changed
        (-[WebDownload _isFileClosed]): new
        (-[WebDownload _fileDidClose:]): new, called by the callback thread, delete file if deleteFile flag is set, report error or end successfully
        (-[WebDownload _closeForkAsync:]): new
        (-[WebDownload _closeForkSync:]): new
        (-[WebDownload _closeFileAsync]): new
        (-[WebDownload _closeFileSync]): new
        (-[WebDownload _deleteFileAsnyc]): new
        (-[WebDownload _closeAndDeleteFileAsync]): new
        (-[WebDownload _cancelWithError:]): kill load if there is one, report error if there is one, close and delete file is not already closed or deleted
        (-[WebDownload _cancelWithErrorCode:]): internal convenienve, calls _cancelWithError
        (-[WebDownload _setPath:]): set path, if we are already saving data to a temp path, move the file and continue downloading
        (-[WebDownload _currentPath]): new 
        (-[WebDownload _errorWithCode:]): new
        (-[WebDownload _dataForkReferenceNumber]): added underscore
        (-[WebDownload _setDataForkReferenceNumber:]): added underscore
        (-[WebDownload _resourceForkReferenceNumber]): added underscore
        (-[WebDownload _setResourceForkReferenceNumber:]): added underscore
        (-[WebDownload _areWritesCancelled]): added underscore
        (-[WebDownload _setWritesCancelled:]): added underscore
        (-[WebDownload _encounteredCloseError]): new
        (-[WebDownload _setEncounteredCloseError:]): new 
        (WriteCompletionCallback): call underscored methods
        (CloseCompletionCallback): call underscored methods, handle close error, don't delete file
        (DeleteCompletionCallback): call _currentPath
        * Downloads.subproj/WebDownloadPrivate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.h: renamed handle to resource
        * WebView.subproj/WebBaseResourceHandleDelegate.m: renamed handle to resource
        (-[WebBaseResourceHandleDelegate _releaseResources]): renamed handle to resource
        (-[WebBaseResourceHandleDelegate startLoading:]): renamed handle to resource
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): renamed handle to resource
        (-[WebBaseResourceHandleDelegate setDefersCallbacks:]): renamed handle to resource
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]): renamed handle to resource
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]): renamed handle to resource, don't handle downloads
        (-[WebBaseResourceHandleDelegate resource:didReceiveData:]): renamed handle to resource, don't handle downloads
        (-[WebBaseResourceHandleDelegate resourceDidFinishLoading:]): renamed handle to resource, don't handle downloads
        (-[WebBaseResourceHandleDelegate resource:didFailLoadingWithError:]): renamed handle to resource, don't handle downloads
        (-[WebBaseResourceHandleDelegate cancelWithError:]): renamed handle to resource, don't handle downloads
        * WebView.subproj/WebController.h: updated comments
        * WebView.subproj/WebController.m: 
        (-[WebController setDownloadDelegate:]): call the ivar downloadDelegate, not downloadProgressDelegate
        (-[WebController downloadDelegate]): call the ivar downloadDelegate, not downloadProgressDelegate
        * WebView.subproj/WebControllerPolicyDelegate.h: removed saveFilenameForResponse:andRequest:, handle by WebDownload
        * WebView.subproj/WebControllerPrivate.h: call the ivar downloadDelegate, not downloadProgressDelegate
        * WebView.subproj/WebDefaultPolicyDelegate.m: removed saveFilenameForResponse:andRequest:, handle by WebDownload
        * WebView.subproj/WebMainResourceClient.h: added WebResourceDelegateProxy icar
        * WebView.subproj/WebMainResourceClient.m: remove most download related stuff
        (-[WebMainResourceClient initWithDataSource:]): create a WebResourceDelegateProxy which allows us to change the resource delegate
        (-[WebMainResourceClient dealloc]): release the proxy
        (-[WebMainResourceClient receivedError:complete:]): don't handle downloads
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): pass the load off to the download
        (-[WebMainResourceClient resource:didReceiveResponse:]): don't handle downloads
        (-[WebMainResourceClient resource:didReceiveData:]): don't handle downloads
        (-[WebMainResourceClient resourceDidFinishLoading:]): don't handle downloads
        (-[WebMainResourceClient resource:didFailLoadingWithError:]): don't handle downloads
        (-[WebMainResourceClient startLoading:]): make the proxy the delegate
        (-[WebResourceDelegateProxy setDelegate:]): switches the resource delegate
        (-[WebResourceDelegateProxy resource:willSendRequest:]): forwards message
        (-[WebResourceDelegateProxy resource:didReceiveResponse:]): forwards message
        (-[WebResourceDelegateProxy resource:didReceiveData:]): forwards message
        (-[WebResourceDelegateProxy resourceDidFinishLoading:]): forwards message
        (-[WebResourceDelegateProxy resource:didFailLoadingWithError:]): forwards message

2003-03-06  Richard Williamson   <rjw@apple.com>

        Move tweaks to WebKit API.
        
        Removed [WebFrame setController:] from public API.
        Removed [WebDataSource stringWithData:] from public API.
         
        Reviewed by hyatt.

        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource mainDocumentError]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _stringWithData:]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebHTMLRepresentation.m:
        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation setDataSource:]):
        * WebView.subproj/WebTextView.m:
        (-[WebTextView dataSourceUpdated:]):

2003-03-06  Richard Williamson   <rjw@apple.com>

        Tweaks to WebKit API.
        Dropped URL on WebDataSource.
        Dropped start/stop loading on WebDataSource.
        Drop frameForView and frameForDataSource from WebController.
        Moved canShowXX to WebCapabilities.
        
        Reviewed by hyatt.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownload errorWithCode:]):
        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_bestURL]):
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_printViewHierarchy:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView dataSource]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        * WebKit.exp:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (+[WebCapabilities canShowMIMEType:]):
        (+[WebCapabilities canShowFile:]):
        (-[WebController mainFrame]):
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _frameForDataSource:fromFrame:]):
        (-[WebController _frameForDataSource:]):
        (-[WebController _frameForView:fromFrame:]):
        (-[WebController _frameForView:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading]):
        (-[WebDataSource _stopLoading]):
        (-[WebDataSource _stopLoadingInternal]):
        (-[WebDataSource _recursiveStopLoading]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        (-[WebDataSource _loadIcon]):
        (-[WebDataSource _URL]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate openFrameInNewWindow:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame stopLoading]):
        * WebView.subproj/WebFramePrivate.m:
        (if):
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _frame]):
        (-[WebHTMLView _elementAtPoint:]):
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation setDataSource:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView menuForEvent:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient cancel]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient resource:didReceiveData:]):
        (-[WebMainResourceClient resourceDidFinishLoading:]):
        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]):
        * WebView.subproj/WebView.m:
        (-[WebView webFrame]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _isMainFrame]):

2003-03-06  Ed Voas  voas@apple.com

        Reviewed by Richard.

        Don't use _HIViewSetNeedsDisplayInRect for now. Fixes
        Jaguar builds.

        * Carbon.subproj/HIViewAdapter.m:
        (-[HIViewAdapter setNeedsDisplay:]):
        (-[HIViewAdapter setNeedsDisplayInRect:]):

2003-03-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        Step towards policy API chantes - removed unneeded policy and URL
        arguments from unableToImplementPolicy:
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):

2003-03-06  Ed Voas  voas@apple.com

        Reviewed by Richard.

        First cut of Carbon view support. It will need tweaking as we go,
        but I think I finally have all the assertions taken care of, and
        I also believe that I have the drawing glitches all sorted out now.

        * Carbon.subproj/CarbonUtils.h: Added.
        * Carbon.subproj/CarbonUtils.m: Added.
        (InitWebKitForCarbon):
        (PoolCleaner):
        (ConvertNSImageToCGImageRef):
        * Carbon.subproj/CarbonWindowAdapter.h: Added.
        * Carbon.subproj/CarbonWindowAdapter.m: Added.
        (+[CarbonWindowAdapter frameViewClassForStyleMask:]):
        (-[CarbonWindowAdapter initWithContentRect:styleMask:backing:defer:]):
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:disableOrdering:carbon:]):
        (-[CarbonWindowAdapter setViewsNeedDisplay:]):
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:]):
        (-[CarbonWindowAdapter dealloc]):
        (-[CarbonWindowAdapter windowRef]):
        (-[CarbonWindowAdapter _hasWindowRef]):
        (-[CarbonWindowAdapter _managesWindowRef]):
        (-[CarbonWindowAdapter _removeWindowRef]):
        (-[CarbonWindowAdapter _carbonWindowClass]):
        (-[CarbonWindowAdapter reconcileToCarbonWindowBounds]):
        (-[CarbonWindowAdapter sendSuperEvent:]):
        (-[CarbonWindowAdapter _cancelKey:]):
        (-[CarbonWindowAdapter _commonAwake]):
        (-[CarbonWindowAdapter _destroyRealWindow:]):
        (-[CarbonWindowAdapter _oldPlaceWindow:]):
        (-[CarbonWindowAdapter _termWindowIfOwner]):
        (-[CarbonWindowAdapter _windowMovedToRect:]):
        (-[CarbonWindowAdapter constrainFrameRect:toScreen:]):
        (-[CarbonWindowAdapter selectKeyViewFollowingView:]):
        (-[CarbonWindowAdapter selectKeyViewPrecedingView:]):
        (-[CarbonWindowAdapter makeKeyWindow]):
        (-[CarbonWindowAdapter canBecomeKeyWindow]):
        (-[CarbonWindowAdapter canBecomeMainWindow]):
        (-[CarbonWindowAdapter encodeWithCoder:]):
        (-[CarbonWindowAdapter initWithCoder:]):
        (-[CarbonWindowAdapter setContentView:]):
        (-[CarbonWindowAdapter worksWhenModal]):
        (-[CarbonWindowAdapter _setModalWindowLevel]):
        (-[CarbonWindowAdapter _clearModalWindowLevel]):
        (-[CarbonWindowAdapter carbonHICommandIDFromActionSelector:]):
        (-[CarbonWindowAdapter sendCarbonProcessHICommandEvent:]):
        (-[CarbonWindowAdapter sendCarbonUpdateHICommandStatusEvent:withMenuRef:andMenuItemIndex:]):
        (-[CarbonWindowAdapter _handleRootBoundsChanged]):
        (-[CarbonWindowAdapter _handleContentBoundsChanged]):
        (-[CarbonWindowAdapter _handleCarbonEvent:callRef:]):
        (NSCarbonWindowHandleEvent):
        * Carbon.subproj/CarbonWindowContentView.h: Added.
        * Carbon.subproj/CarbonWindowContentView.m: Added.
        * Carbon.subproj/CarbonWindowFrame.h: Added.
        * Carbon.subproj/CarbonWindowFrame.m: Added.
        (+[CarbonWindowFrame frameRectForContentRect:styleMask:]):
        (+[CarbonWindowFrame contentRectForFrameRect:styleMask:]):
        (+[CarbonWindowFrame minFrameSizeForMinContentSize:styleMask:]):
        (-[CarbonWindowFrame frameRectForContentRect:styleMask:]):
        (-[CarbonWindowFrame contentRectForFrameRect:styleMask:]):
        (-[CarbonWindowFrame minFrameSizeForMinContentSize:styleMask:]):
        (-[CarbonWindowFrame initWithFrame:styleMask:owner:]):
        (-[CarbonWindowFrame dealloc]):
        (-[CarbonWindowFrame _setFrameNeedsDisplay:]):
        (-[CarbonWindowFrame _setSheet:]):
        (-[CarbonWindowFrame _updateButtonState]):
        (-[CarbonWindowFrame _windowChangedKeyState]):
        (-[CarbonWindowFrame _showToolbarWithAnimation:]):
        (-[CarbonWindowFrame _hideToolbarWithAnimation:]):
        (-[CarbonWindowFrame closeButton]):
        (-[CarbonWindowFrame styleMask]):
        (-[CarbonWindowFrame dragRectForFrameRect:]):
        (-[CarbonWindowFrame isOpaque]):
        (-[CarbonWindowFrame minimizeButton]):
        (-[CarbonWindowFrame setTitle:]):
        (-[CarbonWindowFrame title]):
        (-[CarbonWindowFrame _sheetHeightAdjustment]):
        (-[CarbonWindowFrame _maxTitlebarTitleRect]):
        (-[CarbonWindowFrame _clearDragMargins]):
        (-[CarbonWindowFrame _resetDragMargins]):
        * Carbon.subproj/HIViewAdapter.h: Added.
        * Carbon.subproj/HIViewAdapter.m: Added.
        (+[HIViewAdapter bindHIViewToNSView:nsView:]):
        (+[HIViewAdapter getHIViewForNSView:]):
        (+[HIViewAdapter unbindNSView:]):
        (-[HIViewAdapter initWithFrame:view:]):
        (-[HIViewAdapter hiView]):
        (-[HIViewAdapter nextValidKeyView]):
        (-[HIViewAdapter setNeedsDisplay:]):
        (-[HIViewAdapter setNeedsDisplayInRect:]):
        (-[CarbonSheetInterceptor _orderFrontRelativeToWindow:]):
        (-[CarbonSheetInterceptor _orderOutRelativeToWindow:]):
        * Carbon.subproj/HIWebView.h: Added.
        * Carbon.subproj/HIWebView.m: Added.
        (if):
        (switch):
        * Carbon.subproj/HIWebViewPriv.h: Added.
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:

=== Safari-65 ===

2003-03-05  Richard Williamson   <rjw@apple.com>

        API changes
        WebView and WebDataSource give up -(WebController *)controller.
        WebView gets -(WebFrame *)webFrame.
        
        Reviewed by cblu.

        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView dataSource]):
        * Plugins.subproj/WebNullPluginView.m:
        (-[WebNullPluginView viewDidMoveToWindow]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:]):
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        (-[WebSubresourceClient receivedError:]):
        (-[WebSubresourceClient resourceDidFinishLoading:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate setDataSource:]):
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (-[WebController backForwardList]):
        (-[WebController setUsesBackForwardList:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _controller]):
        (-[WebDataSource _receivedError:complete:]):
        (-[WebDataSource _loadIcon]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFramePrivate.m:
        (switch):
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _controller]):
        (-[WebHTMLView _frame]):
        (-[WebHTMLView _elementAtPoint:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView controller]):
        (-[WebImageView menuForEvent:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeAndKeepLoading:]):
        (-[WebMainResourceClient continueAfterNavigationPolicy:formState:]):
        (-[WebMainResourceClient resource:willSendRequest:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:andCallSelector:]):
        (-[WebMainResourceClient resource:didReceiveResponse:]):
        (-[WebMainResourceClient resource:didReceiveData:]):
        (-[WebMainResourceClient resourceDidFinishLoading:]):
        (-[WebMainResourceClient resource:didFailLoadingWithError:]):
        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]):
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView webFrame]):
        (-[WebView concludeDragOperation:]):
        * WebView.subproj/WebViewPrivate.h:
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _controller]):

2003-03-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        * WebView.subproj/WebFramePrivate.m:
        (_recursiveGoToItem:fromItem:withLoadType:): Account for
        possibility of nil target.

2003-03-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed crash when going back due to frame name of nil since we
        don't force the name "_top" any more.
        * WebView.subproj/WebController.m:
        (-[WebController _goToItem:withLoadType:]): Handle nil target
        properly.

2003-03-05  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3189441 -- REGRESSION: layout tests crash building generated frame name

        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _addFramePathToString:]):
        Handle a frame name of nil here, since we don't force the name "_top" any more.

2003-03-04  Trey Matteson  <trey@apple.com>

        Support for autofill.  These are just two new glue routines
        that call down through the bridge.  They allow regexp driven
        binding of AB data to form elements.

        Reviewed by Maciej.

        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation searchForLabels:beforeElement:]):
        Call straight to bridge.
        (-[WebHTMLRepresentation matchLabels:againstElement:]):
        Call straight to bridge.

2003-03-04  Maciej Stachowiak  <mjs@apple.com>

        Reinstate missing part of last checking.
        * WebView.subproj/WebFramePrivate.m:

2003-03-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        Added the ability to set the top-level frame name via the
        WebController initializer. Also made [[controller mainFrame]
        frameName] return the true top-level frame name instead of "_top",
        since that is already special-cased anywhere it needs to be.
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (-[WebController init]): Update for change to designated initializer.
        (-[WebController initWithView:]): New convenience initializer.
        (-[WebController initWithView:frameName:setName:]): Added ability to set
        top-level frame name.
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate dealloc]): Remove topLevelFrameNAme field.
        (-[WebController _setTopLevelFrameName:]): Actually set it
        on the top level frame, no point to keeping it here.
        (-[WebController _findFrameInThisWindowNamed:]): No more need to
        special-case top-level frame name.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame initWithName:webView:controller:]): call [self _setName:] instead 
        of [_private setName:]
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setName:]): Don't let the name get set to _blank.
2003-03-04  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin

        * Misc.subproj/WebKitNSStringExtras.h:
        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _web_widthWithFont:]):
        (-[NSString _web_drawAtPoint:font:textColor:):
        removed the unnecessary string parameter from these two
        NSString methods.

2003-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - got rid of some framework initialization (working on bug 3185161)

        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _postPreferencesChangesNotification]): Moved this function up.
        (+[WebPreferences standardPreferences]): Call _postPreferencesChangesNotification when this is made,
        for consistency with the old behavior.
        (+[WebPreferences initialize]): Changed to initialize from load, and got rid of stuff we don't want
        to do from inside an initialize function.

2003-03-04  Richard Williamson   <rjw@apple.com>

        Remove initWithURL: and frameName from WebDataSource public API.
        
        Reviewed by trey.

        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource webFrame]):

2003-03-04  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.
        * English.lproj/Localizable.strings: Regenerated.

2003-03-03  Richard Williamson   <rjw@apple.com>

        Switch all WebController's delegate to use informal protocols.
        
        Reviewed by trey.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView status:]):
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebNullPluginView.m:
        (-[WebNullPluginView viewDidMoveToWindow]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showStatus:]):
        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge showWindow]):
        (-[WebBridge areToolbarsVisible]):
        (-[WebBridge setToolbarsVisible:]):
        (-[WebBridge isStatusBarVisible]):
        (-[WebBridge setStatusBarVisible:]):
        (-[WebBridge setWindowFrame:]):
        (-[WebBridge setStatusText:]):
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        (-[WebBridge setWebFrame:]):
        * WebKit.exp:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate resourceLoadDelegate]):
        (-[WebBaseResourceHandleDelegate downloadDelegate]):
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate resourceDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate resource:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        (-[WebBaseResourceHandleDelegate notifyDelegatesOfInterruptionByPolicyChange]):
        * WebView.subproj/WebContextMenuDelegate.h:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (-[WebController setWindowOperationsDelegate:]):
        (-[WebController windowOperationsDelegate]):
        (-[WebController setResourceLoadDelegate:]):
        (-[WebController resourceLoadDelegate]):
        (-[WebController setDownloadDelegate:]):
        (-[WebController downloadDelegate]):
        (-[WebController setContextMenuDelegate:]):
        (-[WebController contextMenuDelegate]):
        (-[WebController setPolicyDelegate:]):
        (-[WebController policyDelegate]):
        (-[WebController setLocationChangeDelegate:]):
        (-[WebController locationChangeDelegate]):
        (-[WebController stringByEvaluatingJavaScriptFromString:]):
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _openNewWindowWithRequest:behind:]):
        (-[WebController _menuForElement:]):
        (-[WebController _mouseDidMoveOverElement:modifierFlags:]):
        (-[WebController _locationChangeDelegateForwarder]):
        (-[WebController _resourceLoadDelegateForwarder]):
        (-[WebController _policyDelegateForwarder]):
        (-[WebController _contextMenuDelegateForwarder]):
        (-[WebController _windowOperationsDelegateForwarder]):
        (-[_WebSafeForwarder initWithTarget:defaultTarget:templateClass:]):
        (-[_WebSafeForwarder forwardInvocation:]):
        (-[_WebSafeForwarder methodSignatureForSelector:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _setTitle:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.h:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (+[WebDefaultContextMenuDelegate sharedContextMenuDelegate]):
        * WebView.subproj/WebDefaultLocationChangeDelegate.h: Added.
        * WebView.subproj/WebDefaultLocationChangeDelegate.m: Added.
        (+[WebDefaultLocationChangeDelegate sharedLocationChangeDelegate]):
        (-[WebDefaultLocationChangeDelegate locationChangeStartedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate serverRedirectedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate locationChangeCommittedForDataSource:]):
        (-[WebDefaultLocationChangeDelegate receivedPageTitle:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate receivedPageIcon:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate locationChangeDone:forDataSource:]):
        (-[WebDefaultLocationChangeDelegate willCloseLocationForDataSource:]):
        (-[WebDefaultLocationChangeDelegate locationChangedWithinPageForDataSource:]):
        (-[WebDefaultLocationChangeDelegate clientWillRedirectTo:delay:fireDate:forFrame:]):
        (-[WebDefaultLocationChangeDelegate clientRedirectCancelledForFrame:]):
        * WebView.subproj/WebDefaultPolicyDelegate.h:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (+[WebDefaultPolicyDelegate sharedPolicyDelegate]):
        * WebView.subproj/WebDefaultPolicyDelegatePrivate.h: Removed.
        * WebView.subproj/WebDefaultResourceLoadDelegate.h: Added.
        * WebView.subproj/WebDefaultResourceLoadDelegate.m: Added.
        (+[WebDefaultResourceLoadDelegate sharedResourceLoadDelegate]):
        (-[WebDefaultResourceLoadDelegate identifierForInitialRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate resource:willSendRequest:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate resource:didReceiveResponse:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate resource:didReceiveContentLength:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate resource:didFinishLoadingFromDataSource:]):
        (-[WebDefaultResourceLoadDelegate resource:didFailLoadingWithError:fromDataSource:]):
        (-[WebDefaultResourceLoadDelegate pluginFailedWithError:dataSource:]):
        * WebView.subproj/WebDefaultWindowOperationsDelegate.h: Added.
        * WebView.subproj/WebDefaultWindowOperationsDelegate.m: Added.
        (+[WebDefaultWindowOperationsDelegate sharedWindowOperationsDelegate]):
        (-[WebDefaultWindowOperationsDelegate runJavaScriptConfirmPanelWithMessage:]):
        (-[WebDefaultWindowOperationsDelegate runJavaScriptTextInputPanelWithPrompt:defaultText:]):
        (-[WebDefaultWindowOperationsDelegate runOpenPanelForFileButtonWithResultListener:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame initWithName:webView:controller:]):
        (-[WebFrame findOrCreateFrameNamed:]):
        * WebView.subproj/WebFramePrivate.m:
        (if):
        (switch):
        * WebView.subproj/WebLocationChangeDelegate.h:
        * WebView.subproj/WebLocationChangeDelegate.m: Removed.
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeAndKeepLoading:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:andCallSelector:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-03-03  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - simplified the custom user agent and text encoding methods as per request from documentation group

        * WebView.subproj/WebController.h: Removed hasCustomUserAgent, resetUserAgent, hasCustomTextEncoding,
        and resetTextEncoding. Updated comments to indicate what nil means.
        
        * WebView.subproj/WebController.m:
        (-[WebController setCustomUserAgent:]): Remove assertion, allow nil.
        (-[WebController customUserAgent]): Remove nil check.
        (-[WebController setCustomTextEncodingName:]): Remove assertion, allow nil, and do an == check along
        with the isEqualToString: check to handle the nil case.
        (-[WebController customTextEncodingName]): Remove nil check.

2003-03-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3163855 - Need control over certain potential dialogs/sheets

        * WebCoreSupport.subproj/WebBridge.h:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge runJavaScriptAlertPanelWithMessage:]): Moved here from
        view factory. Call the bridge instead of popping up the dialog.
        (-[WebBridge runJavaScriptConfirmPanelWithMessage:]): Likewise.
        (-[WebBridge runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        Likewise.
        (-[WebBridge fileButton]): Moved here from view factory, so we can
        pass the bridge to the button.
        (-[WebBridge runOpenPanelForFileButtonWithResultListener:]): Call the delegate.
        * WebCoreSupport.subproj/WebFileButton.h:
        * WebCoreSupport.subproj/WebFileButton.m:
        (-[WebFileButton initWithBridge:]): New method so this object knows about the bridge.
        (-[WebFileButton beginSheet]): Instead of popping up the sheet directly,
        call the bridge (which will call the delegate).
        (-[WebFileButton chooseFilename:]): Update for the new filename.
        (-[WebFileButton cancel]): Do nothing.
        * WebCoreSupport.subproj/WebViewFactory.m: Removed some methods.
        * WebKit.exp: Export .objc_class_WebJavaScriptTextInputPanel (for now).
        * WebKit.pbproj/project.pbxproj: Export WebJavaScriptTextInputPanel.h (for now).
        * WebView.subproj/WebWindowOperationsDelegate.h: Added new methods.

2003-03-01  Richard Williamson   <rjw@apple.com>

        Reviewed by Chris & Darin.

        Fixed frameRequiredForMIMEType: to correctly check for BOTH
        netscape plugins and cocoa plugins.
        
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameRequiredForMIMEType:]):
        
        Made WebPluginViewFactory.h private (SPI) to provide access to
        plugin package keys.
        
        * WebKit.pbproj/project.pbxproj:

2003-02-28  Richard Williamson   <rjw@apple.com>

        Make WebDOM* classes private instead of public.  This change
        was made before but the project file must have been accidentally
        overwritten.  Make the WebPlugin* classes private.
        
        * WebKit.pbproj/project.pbxproj:

7003-02-28  Trey Matteson  <trey@apple.com>

        Various support for autofill/autocomplete.

        We receive a form along with the formValues from WC on submit, which we
        just pass along to the FormDelegate.  As part of this we store the values
        and the form together in a new private WebFormState class.  Lots of glue
        for passing this around instead of just the values dict.

        Send willCloseLocationForDataSource when we are finally through with a page.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:reload:triggeringEvent:form:formValues:]):
        Pass along form along with values
        (-[WebBridge postWithURL:data:contentType:triggeringEvent:form:formValues:]):
        Pass along form along with values
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _commitIfReady:]):  Call frame to send willCloseLocationForDataSource.
        * WebView.subproj/WebFormDelegate.h:
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate frame:willSubmitForm:withValues:]):  Pass form along with values
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):  Pass FormState instead of just values.
        (-[WebFrame reload]):  Pass FormState instead of just values.
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        <<prepare-ChangeLog flailed on this file>>
        Lots of routines were we pass FormState instead of the form values dict
        -([WebFrame _closeOldDataSources]):  New, sends willCloseLocation for whole frame tree.
        New, trivial, WebFormState class.
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation formIsLoginForm:]):  Changed to take form instead of form field.
        (-[WebHTMLRepresentation formForElement:]):  New, just pass through bridge.
        (-[WebHTMLRepresentation controlsInForm:]):    New, just pass through bridge.
        * WebView.subproj/WebLocationChangeDelegate.h:  Add willCloseLocationForDataSource.
        * WebView.subproj/WebLocationChangeDelegate.m:
        (-[WebLocationChangeDelegate willCloseLocationForDataSource:]):  Default impl.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterNavigationPolicy:formState:]):
        Pass FormState instead of just values.
        (-[WebMainResourceClient resource:willSendRequest:]):
        Pass FormState instead of just values.

2003-02-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3180170 - filepile.com does not work correctly

        I fixed this by making referrer work correctly for targetted
        cross-frame and cross-window links. It is still not working right
        for JavaScript window.open though.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]): Set referrer.
        (-[WebBridge loadURL:referrer:reload:triggeringEvent:formValues:]): Pass referrer
        along to frame.
        (-[WebBridge postWithURL:referrer:data:contentType:triggeringEvent:formValues:]):
        Likewise.
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:fromItem:withLoadType:]): Pass referrer.
        (-[WebFrame
        _loadURL:referrer:loadType:triggeringEvent:formValues:]): Use
        passed-in referrer (link could have been clicked in another
        frame).
        (-[WebFrame _loadURL:intoChild:]): Pass referrer.
        (-[WebFrame
        _postWithURL:referrer:data:contentType:triggeringEvent:formValues:]):
        Use passed-in referrer.

2003-02-28  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - fixed 3183575 -- <https://sbcreg.sbcglobal.net> casuses infinite refresh & crash
        
        The page had history.forward(1) which was causing us to reload.

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge goBackOrForward:]):
        Handle edge cases by checking backListCount and forwardListCount at this level.
        Be sure to do nothing when we are already on the right page.

        * History.subproj/WebBackForwardList.h: Added forwardListCount, updated comment for entryAtIndex.
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList forwardListCount]): Added.
        (-[WebBackForwardList entryAtIndex:]): Return nil for out of range indices.
        
2003-02-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge window]): Avoid calling removed call.
        * WebView.subproj/WebView.m: Remove override of window method.
        * WebView.subproj/WebWindowOperationsDelegate.h: 
        Adjust for new API.
=== Safari-64 ===

=== Safari-63 ===

2003-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

        - fixed reproducible hang at http://asp.eltonsoft.dk/cast/get.asp?cat=Quicktime

        WebKit's processing time was O(N^3) in the number of
        frames. Improved it to O(N^2) by storing frame pointer directly in
        WebDataSource instead of linear scan. Could still be improved more.
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource webFrame]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]):
        (-[WebDataSource _stopLoadingWithError:]):
        (-[WebDataSource _setWebFrame:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _detachFromParent]):
        (-[WebFrame _setDataSource:]):
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _isLoadComplete]):
        (-[WebFrame _clearProvisionalDataSource]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formValues:]):
        (-[WebFrame _loadDataSource:withLoadType:formValues:]):
        (-[WebFrame _setProvisionalDataSource:]):

2003-02-26  Richard Williamson   <rjw@apple.com>

        Fixed 3102760.  Removed WebDocumentDragSettings from API.
        
        Reviewed by Chris.

        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLView.m:
        * WebView.subproj/WebImageView.h:
        * WebView.subproj/WebImageView.m:
        (-[WebImageView initWithFrame:]):
        (-[WebImageView mouseDragged:]):
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (-[WebTextView initWithFrame:]):
        (-[WebTextView layout]):

2003-02-25  David Hyatt  <hyatt@apple.com>

        Fix for bug #3181249.  Ensure the padding argument gets passed
        through properly (instead of just passing 0).
        Reviewed by darin

        * WebCoreSupport.subproj/WebTextRenderer.m:

2003-02-25  John Sullivan  <sullivan@apple.com>

        WebKit part of fix for 3181290 -- need call to reload all bookmarks from disk, 
        for synching's sake.

        I ended up not adding a new call, but making the existing loadBookmarkGroup
        work better when called after the initial load. It wasn't doing anything wrong
        before; it just wasn't passing along enough information to clients to enable
        them to do the right thing.

        Reviewed by Trey

        * Bookmarks.subproj/WebBookmarkGroup.h:
        new extern NSStrings WebBookmarksWillBeReloadedNotification and
        WebBookmarksWereReloadedNotification

        * Bookmarks.subproj/WebBookmarkGroup.m:
        (-[WebBookmarkGroup _sendNotification:forBookmark:children:]):
        soften assert so it doesn't fire on the new cases.

        (-[WebBookmarkGroup _bookmarksWillBeReloaded]):
        send WebBookmarksWillBeReloadedNotification
        (-[WebBookmarkGroup _bookmarksWereReloaded]):
        send WebBookmarksWereReloadedNotification

        (-[WebBookmarkGroup _loadBookmarkGroupGuts]):
        bracket the load with the new notification-sending calls

        * WebKit.exp:
        add the two new extern NSStrings

2003-02-25  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3176962 -- add KHTML somewhere in the user agent string

        * English.lproj/StringsNotToBeLocalized.txt: Change "(like Gecko)" to "(KHTML, like Gecko)".
        * WebView.subproj/WebController.m: (-[WebController userAgentForURL:]): Ditto.

2003-02-20  Chris Blumenberg  <cblu@apple.com>

        Added _web_superviewOfClass:stoppingAtClass:. Climbs up hierarchy and returns nil when stoppingAtClass is hit.

        Reviewed by darin.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_superviewOfClass:stoppingAtClass:]):
        (-[NSView _web_superviewOfClass:]):

2003-02-20  Ken Kocienda  <kocienda@apple.com>

        Reviewed by David

        Modified to use new WebFoundation API. Though there seem to be
        many changes, they are all "uninteresting" in that the changes
        only moved code to use new method and class names.

        * Downloads.subproj/WebDownload.h:
        * Downloads.subproj/WebDownload.m:
        (-[WebDownload initWithRequest:delegate:]):
        (-[WebDownload _initWithLoadingHandle:request:response:delegate:]):
        (-[WebDownload createFileIfNecessary]):
        * Downloads.subproj/WebDownloadPrivate.h:
        * Misc.subproj/WebIconLoader.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader startLoading]):
        (-[WebIconLoader resourceDidFinishLoading:]):
        (-[WebIconLoader resource:willSendRequest:]):
        (-[WebIconLoader resource:didReceiveResponse:]):
        (-[WebIconLoader resource:didReceiveData:]):
        (-[WebIconLoader resource:didFailLoadingWithError:]):
        * Misc.subproj/WebResourceResponseExtras.h:
        * Misc.subproj/WebResourceResponseExtras.m:
        (-[WebHTTPResponse suggestedFilenameForSaving]):
        * Plugins.subproj/WebBaseNetscapePluginStream.h:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]):
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]):
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]):
        (-[WebBaseNetscapePluginView getURLNotify:target:notifyData:]):
        (-[WebBaseNetscapePluginView getURL:target:]):
        (-[WebBaseNetscapePluginView postURLNotify:target:len:buf:file:notifyData:]):
        (-[WebPluginRequest initWithRequest:frame:notifyData:]):
        (-[WebPluginRequest request]):
        * Plugins.subproj/WebBaseNetscapePluginViewPrivate.h:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView viewDidMoveToWindow]):
        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation receivedError:withDataSource:]):
        * Plugins.subproj/WebNetscapePluginStream.h:
        * Plugins.subproj/WebNetscapePluginStream.m:
        (-[WebNetscapePluginStream initWithRequest:pluginPointer:notifyData:]):
        (-[WebNetscapePluginStream resource:didReceiveResponse:]):
        (-[WebNetscapePluginStream resource:didReceiveData:]):
        (-[WebNetscapePluginStream resourceDidFinishLoading:]):
        (-[WebNetscapePluginStream resource:didFailLoadingWithError:]):
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showURL:inFrame:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]):
        (-[WebBridge objectLoadedFromCacheWithURL:response:size:]):
        (-[WebBridge defersLoading]):
        (-[WebBridge setDefersLoading:]):
        (-[WebBridge loadEmptyDocumentSynchronously]):
        * WebCoreSupport.subproj/WebCookieAdapter.m:
        (-[WebCookieAdapter cookiesForURL:]):
        (-[WebCookieAdapter setCookies:forURL:policyBaseURL:]):
        * WebCoreSupport.subproj/WebSubresourceClient.h:
        * WebCoreSupport.subproj/WebSubresourceClient.m:
        (+[WebSubresourceClient startLoadingResource:withURL:referrer:forDataSource:]):
        (-[WebSubresourceClient resource:willSendRequest:]):
        (-[WebSubresourceClient resource:didReceiveResponse:]):
        (-[WebSubresourceClient resource:didReceiveData:]):
        (-[WebSubresourceClient resourceDidFinishLoading:]):
        (-[WebSubresourceClient resource:didFailLoadingWithError:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate startLoading:]):
        (-[WebBaseResourceHandleDelegate loadWithRequest:]):
        (-[WebBaseResourceHandleDelegate setDefersCallbacks:]):
        (-[WebBaseResourceHandleDelegate resource:willSendRequest:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveResponse:]):
        (-[WebBaseResourceHandleDelegate resource:didReceiveData:]):
        (-[WebBaseResourceHandleDelegate resourceDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate resource:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelledError]):
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (-[WebResourceLoadDelegate identifierForInitialRequest:fromDataSource:]):
        (-[WebResourceLoadDelegate resource:willSendRequest:fromDataSource:]):
        (-[WebResourceLoadDelegate resource:didReceiveResponse:fromDataSource:]):
        * WebView.subproj/WebControllerPolicyDelegate.h:
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _downloadURL:toDirectory:]):
        (-[WebController defersCallbacks]):
        (-[WebController setDefersCallbacks:]):
        (-[WebController _openNewWindowWithRequest:behind:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource initWithURL:]):
        (-[WebDataSource initWithRequest:]):
        (-[WebDataSource initialRequest]):
        (-[WebDataSource request]):
        (-[WebDataSource response]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _addSubresourceClient:]):
        (-[WebDataSource _stopLoading]):
        (-[WebDataSource _setURL:]):
        (-[WebDataSource _setRequest:]):
        (-[WebDataSource _setResponse:]):
        (-[WebDataSource _commitIfReady:]):
        (-[WebDataSource _defersCallbacksChanged]):
        (-[WebDataSource _originalRequest]):
        (-[WebDataSource _lastCheckedRequest]):
        (-[WebDataSource _setLastCheckedRequest:]):
        (-[WebDataSource _addResponse:]):
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate contextMenuItemsForElement:defaultMenuItems:]):
        (-[WebDefaultContextMenuDelegate openNewWindowWithURL:]):
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate savePathForResponse:andRequest:]):
        (-[WebDefaultPolicyDelegate decideNavigationPolicyForAction:andRequest:inFrame:decisionListener:]):
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):
        (-[WebFrame reload]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem]):
        (-[WebFrame _opened]):
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        (-[WebFrame _loadRequest:triggeringAction:loadType:formValues:]):
        (-[WebFrame _invalidatePendingPolicyDecisionCallingDefaultAction:]):
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formValues:andCall:withSelector:]):
        (-[WebFrame _continueAfterNavigationPolicy:]):
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formValues:]):
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):
        (-[WebFrame _loadURL:loadType:triggeringEvent:formValues:]):
        (-[WebFrame _postWithURL:data:contentType:triggeringEvent:formValues:]):
        (-[WebFrame _reloadAllowingStaleDataWithOverrideEncoding:]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formValues:]):
        (-[WebFrame _downloadRequest:toDirectory:]):
        * WebView.subproj/WebHTMLRepresentation.m:
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterNavigationPolicy:formValues:]):
        (-[WebMainResourceClient resource:willSendRequest:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient checkContentPolicyForResponse:andCallSelector:]):
        (-[WebMainResourceClient resource:didReceiveResponse:]):
        (-[WebMainResourceClient resource:didReceiveData:]):
        (-[WebMainResourceClient resourceDidFinishLoading:]):
        (-[WebMainResourceClient resource:didFailLoadingWithError:]):
        (-[WebMainResourceClient startLoading:]):
        * WebView.subproj/WebResourceLoadDelegate.h:
        * WebView.subproj/WebTextRepresentation.m:
        * WebView.subproj/WebTextView.m:
        * WebView.subproj/WebView.m:
        (-[WebView concludeDragOperation:]):
        * WebView.subproj/WebViewPrivate.m:
        * WebView.subproj/WebWindowOperationsDelegate.h:

2003-02-18  Maciej Stachowiak  <mjs@ap0101m-dhcp138.apple.com>

        Reviewed by Chris.
        Merged changes from Safari-58-1-branch.
    2003-02-11  Richard Williamson   <rjw@apple.com>

        Add import of CGFontCache.h, which is no longer
        included by CoreGraphicsPrivate.h.
        
        Reviewed by Vicki.

        * WebCoreSupport.subproj/WebTextRendererFactory.m:

    2003-02-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebTextRenderer.m: Change (void **) cast
        to (void *) for compatibility with the latest Panther.
    2003-02-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        * WebKit.pbproj/project.pbxproj: Add /System/Library/PrivateFrameworks

=== Safari-62 ===

2003-02-17  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Trey

        Rolled in documentation changes from Peter Kelly, our tech writer.

        * History.subproj/WebBackForwardList.h
        * History.subproj/WebHistory.h
        * Misc.subproj/WebKitErrors.h
        * Misc.subproj/WebResourceResponseExtras.h
        * Panels.subproj/WebStandardPanels.h
        * Plugins.subproj/WebPluginError.h
        * WebView.subproj/WebContextMenuDelegate.h
        * WebView.subproj/WebController.h
        * WebView.subproj/WebControllerPolicyDelegate.h
        * WebView.subproj/WebDataSource.h
        * WebView.subproj/WebDefaultPolicyDelegate.h
        * WebView.subproj/WebDocument.h
        * WebView.subproj/WebFrame.h
        * WebView.subproj/WebPreferences.h
        * WebView.subproj/WebResourceLoadDelegate.h
        * WebView.subproj/WebView.h
        * WebView.subproj/WebWindowOperationsDelegate.h

2003-02-13  Trey Matteson  <trey@apple.com>

        2943514 hide the cursor when using the arrow keys to scroll
        Reviewed by Darin

        * WebView.subproj/WebView.m:
        (-[WebView keyDown:]):  Hide that cursor.

2003-02-16  Chris Blumenberg  <cblu@apple.com>

        Added debug method that can be used inside of gdb to examine an image. Needed this many times.

        Reviewed by darin.

        * Misc.subproj/WebNSImageExtras.h:
        * Misc.subproj/WebNSImageExtras.m:
        (-[NSImage _web_saveAndOpen]):

2003-02-15  Darin Adler  <darin@apple.com>

        * English.lproj/Localizable.strings: Regenerated.

2003-02-14  David Hyatt  <hyatt@apple.com>

        Patch to the drawLine function for the inline box model landing.
        Reviewed by kocienda

        * WebCoreSupport.subproj/WebTextRenderer.m:

2003-02-13  Trey Matteson  <trey@apple.com>

        First checkin for working forms autocomplete.

        This level mostly just has glue to go from app to WC through the bridge.
        WebHTMLReo exports some new SPI to get the element of a view, and then to get
        some HTML-level properties of that element.

        Reviewed by Chris

        * Bookmarks.subproj/WebBookmarkGroup.m:
        (-[WebBookmarkGroup _saveBookmarkGroupGuts]):  Don't dump entire bookmark
        dict in the log.
        * WebKit.exp:  New class used by app, objc_class_name_WebHTMLRepresentation.
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation elementForView:]):  New SPI.
        (-[WebHTMLRepresentation elementDoesAutoComplete:]):  New SPI.
        (-[WebHTMLRepresentation elementIsInLoginForm:]):  New SPI.

2003-02-13  Chris Blumenberg  <cblu@apple.com>

        Fixed WebKit typos found by Peter Wilson.

        Reviewed by darin.

        * Misc.subproj/WebKitErrors.h:
        * Misc.subproj/WebKitErrors.m:
        (categoryInitialize): Error should be WebErrorDescriptionCannotFindApplicationForURL not WebErrorDescriptionCannotNotFindApplicationForURL
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): call findOrCreateFrameNamed
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController showURL:inFrame:]): call findOrCreateFrameNamed
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge findOrCreateFrameNamed:]): call findOrCreateFrameNamed
        * WebView.subproj/WebFrame.h:
        * WebView.subproj/WebFrame.m:
        (-[WebFrame findOrCreateFrameNamed:]): fixed name
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueAfterNavigationPolicy:]): use WebErrorDescriptionCannotFindApplicationForURL
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): use WebErrorDescriptionCannotFindApplicationForURL
        * WebView.subproj/WebView.h:
        * WebView.subproj/WebView.m:
        (-[WebView setAllowsScrolling:]): cast to WebDynamicScrollBarsView
        (-[WebView allowsScrolling]): cast to WebDynamicScrollBarsView
        (-[WebView frameScrollView]): return NSScrollView
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _setDocumentView:]): cast to WebDynamicScrollBarsView

2003-02-12  Chris Blumenberg  <cblu@apple.com>

        - Moved the WebKit error registration out of WebView because apps that use WebKit but not WebView might need to use WebKit errors (like my test app for WebDownload).
        - Added file close and file move errors (needed for WebDownload).

        Reviewed by kocienda.

        * English.lproj/Localizable.strings: Localize file close and file move errors.
        * Misc.subproj/WebKitErrors.h: Added file close and file move errors.
        * Misc.subproj/WebKitErrors.m: Added.
        (+[WebError initialize]): register the errors here
        * WebKit.exp: Export the WebDownload class (forgot to do this earlier).
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebView.m: don't register the errors here

2003-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3158484 -- after submission failure, submitting a second time doesn't work

        * WebView.subproj/WebDataSourcePrivate.h: Added _receivedError:complete: method.
        * WebView.subproj/WebDataSourcePrivate.m: (-[WebDataSource _receivedError:complete:]):
        Added, parallel to _receivedData and _finishedLoading. Calls the new bridge method
        didNotOpenURL: for cases where we fail before committing (which calls openURL).
        Note that we can't use our own _bridge method because it asserts that we have committed
        to prevent accidental misuse. Also make the call on the controller that used to be done
        directly by the client.

        * WebView.subproj/WebMainResourceClient.m: (-[WebMainResourceClient receivedError:complete:]):
        Call the new -[WebDataSource _receivedError:complete:] rather than calling the controller directly.

2003-02-11  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2003-02-11  Darin Adler  <darin@apple.com>

        Reviewed by Ed.

        - applied a fixed version of Ed Voas's change to make plug-ins position correctly
          inside Carbon metal windows; should have no effect on Safari

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):
        Don't assume that the Cocoa concept of the content view matches up with the Carbon
        concept of where the port is positioned. Instead, convert coordinates to border
        view coordinates, then back to Carbon content coordinates by using the delta between
        the port bounds and the port's pixmap bounds. Bug 3160710 was caused by an older version
        of this patch implicitly assuming the port bounds always had (0,0) for top left.

2003-02-11  Trey Matteson  <trey@apple.com>

        Set -seg1addr in our build styles, but not for the B&I build.
        This makes our SYMROOTS from B&I usable to determine symbols from crash
        logs from the field.
        Also nuked DeploymentFat build style.

        Reviewed by Ken.

        * WebKit.pbproj/project.pbxproj:

2003-02-10  Chris Blumenberg  <cblu@apple.com>

        Added HeaderDoc comments for WebDownload and WebPluginError.

        Reviewed by rjw.

        * Downloads.subproj/WebDownload.h:
        * Plugins.subproj/WebPluginError.h:

2003-02-10  Trey Matteson  <trey@apple.com>

        Following the recent fix for ensuring that we always have a FormDelegate,
        when we need a default policy delegate we use a shared one instead of allocing
        a new one each time, which then would leak.

        This included getting rid of the initWithWebController: method in the 
        WebDefaultPolicyDelegate API.  The arg was not used.

        Reviewed by Richard

        * WebKit.pbproj/project.pbxproj:  new private header
        * WebView.subproj/WebController.m:
        (-[WebController policyDelegate]):  use shared delegate if none set
        * WebView.subproj/WebDefaultPolicyDelegate.h:
        * WebView.subproj/WebDefaultPolicyDelegate.m:
        (+[WebDefaultPolicyDelegate _sharedWebPolicyDelegate]):  return shared instance
        * WebView.subproj/WebDefaultPolicyDelegatePrivate.h: Added.
        * WebView.subproj/WebFormDelegate.m:
        (+[WebFormDelegate _sharedWebFormDelegate]):  Trivial renaming of static.

2003-02-10  Richard Williamson   <rjw@apple.com>

        Update API issues document.
        
        * API-Issues.rtf:

2003-02-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3168888 - REGRESSION: many downloads fail (due to -36 error from write)

        Reviewed by darin.

        * Downloads.subproj/WebDownload.m:
        (-[WebDownload writeForkData:isDataFork:]):

2003-02-10  Trey Matteson  <trey@apple.com>

        Make sure we have a FormsDelegate installed with NOP behavior if our client
        does not set one.  Editing forms was broken for Ed by the introduction
        of the new FormDelegate.

        Reviewed by Darin.

        * WebKit.pbproj/project.pbxproj:  Added new header file.
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _formDelegate]):  Use shared delegate if none set yet.
        * WebView.subproj/WebFormDelegatePrivate.h:  New header.
        * WebView.subproj/WebFormDelegate.h:  Nit cleanup.
        * WebView.subproj/WebFormDelegate.m:
        (+[WebFormDelegate _sharedWebFormDelegate]):  New method to return a shared
        NOP implementation.

2003-02-07  Richard Williamson   <rjw@apple.com>

        Changes to support per WebController preferences.
        
        Reviewed by Maciej and Ken.

        * WebView.subproj/WebController.m:
        (-[WebController setPreferences:]):
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate init]):
        (-[WebControllerPrivate dealloc]):
        (-[WebController _setFormDelegate:]):
        (-[WebController _formDelegate]):
        (-[WebController _settings]):
        (-[WebController _updateWebCoreSettingsFromPreferences:]):
        (-[WebController _releaseUserAgentStrings]):
        (-[WebController _preferencesChangedNotification:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame initWithName:webView:controller:]):
        * WebView.subproj/WebPreferences.h:
        * WebView.subproj/WebPreferences.m:
        (-[WebPreferences _postPreferencesChangesNotification]):
        (+[WebPreferences load]):
        (-[WebPreferences _stringValueForKey:]):
        (-[WebPreferences _setStringValue:forKey:]):
        (-[WebPreferences _integerValueForKey:]):
        (-[WebPreferences _setIntegerValue:forKey:]):
        (-[WebPreferences _boolValueForKey:]):
        (-[WebPreferences _setBoolValue:forKey:]):
        (-[WebPreferences standardFontFamily]):
        (-[WebPreferences setStandardFontFamily:]):
        (-[WebPreferences fixedFontFamily]):
        (-[WebPreferences setFixedFontFamily:]):
        (-[WebPreferences serifFontFamily]):
        (-[WebPreferences setSerifFontFamily:]):
        (-[WebPreferences sansSerifFontFamily]):
        (-[WebPreferences setSansSerifFontFamily:]):
        (-[WebPreferences cursiveFontFamily]):
        (-[WebPreferences setCursiveFontFamily:]):
        (-[WebPreferences fantasyFontFamily]):
        (-[WebPreferences setFantasyFontFamily:]):
        (-[WebPreferences defaultFontSize]):
        (-[WebPreferences setDefaultFontSize:]):
        (-[WebPreferences defaultFixedFontSize]):
        (-[WebPreferences setDefaultFixedFontSize:]):
        (-[WebPreferences minimumFontSize]):
        (-[WebPreferences setMinimumFontSize:]):
        (-[WebPreferences defaultTextEncodingName]):
        (-[WebPreferences setDefaultTextEncodingName:]):
        (-[WebPreferences userStyleSheetEnabled]):
        (-[WebPreferences setUserStyleSheetEnabled:]):
        (-[WebPreferences userStyleSheetLocation]):
        (-[WebPreferences setUserStyleSheetLocation:]):
        (-[WebPreferences JavaEnabled]):
        (-[WebPreferences setJavaEnabled:]):
        (-[WebPreferences JavaScriptEnabled]):
        (-[WebPreferences setJavaScriptEnabled:]):
        (-[WebPreferences JavaScriptCanOpenWindowsAutomatically]):
        (-[WebPreferences setJavaScriptCanOpenWindowsAutomatically:]):
        (-[WebPreferences pluginsEnabled]):
        (-[WebPreferences setPluginsEnabled:]):
        (-[WebPreferences allowAnimatedImages]):
        (-[WebPreferences allowAnimatedImageLooping]):
        (-[WebPreferences setAllowAnimatedImageLooping:]):
        (-[WebPreferences setWillLoadImagesAutomatically:]):
        (-[WebPreferences willLoadImagesAutomatically]):
        (-[WebPreferences _initialTimedLayoutDelay]):
        (-[WebPreferences _initialTimedLayoutSize]):
        (-[WebPreferences _pageCacheSize]):
        (-[WebPreferences _objectCacheSize]):
        (-[WebPreferences _initialTimedLayoutEnabled]):
        (-[WebPreferences _resourceTimedLayoutDelay]):
        (-[WebPreferences _resourceTimedLayoutEnabled]):
        * WebView.subproj/WebPreferencesPrivate.h:

2003-02-06  Chris Blumenberg  <cblu@apple.com>

        - Made WebDownload.h a public header.
        - Added stubs for the new methods.
        - Moved all private methods to the WebPrivate category.
        - Added FIXMEs for things that needed to be removed or implemented.

        Reviewed by rjw.

        * Downloads.subproj/WebDownload.h:
        * Downloads.subproj/WebDownload.m:
        (-[WebDownload initWithRequest:delegate:]):
        (-[WebDownload dealloc]):
        (-[WebDownload cancel]):
        (-[WebDownload _initWithLoadingHandle:request:response:delegate:]):
        (-[WebDownload initWithDataSource:]):
        (-[WebDownload receivedData:]):
        (-[WebDownload finishedLoading]):
        (-[WebDownload decodeHeaderData:dataForkData:resourceForkData:]):
        (-[WebDownload decodeData:dataForkData:resourceForkData:]):
        (-[WebDownload createFileIfNecessary]):
        (-[WebDownload writeDataForkData:resourceForkData:]):
        (-[WebDownload dataIfDoneBufferingData:]):
        (-[WebDownload decodeData:]):
        (-[WebDownload finishDecoding]):
        * Downloads.subproj/WebDownloadPrivate.h:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebMainResourceClient.m:

2003-02-06  Chris Blumenberg  <cblu@apple.com>

        Renamed WebDownloadHandler to WebDownload.
        Made ivars of WebDownload private.

        Reviewed by kocienda.

        * Downloads.subproj/WebDownload.h: Added.
        * Downloads.subproj/WebDownload.m: Added.
        (-[WebDownloadPrivate init]):
        (-[WebDownloadPrivate dealloc]):
        (-[WebDownload initWithDataSource:]):
        (-[WebDownload dealloc]):
        (-[WebDownload decodeHeaderData:dataForkData:resourceForkData:]):
        (-[WebDownload decodeData:dataForkData:resourceForkData:]):
        (-[WebDownload closeFork:deleteFile:]):
        (-[WebDownload closeFileAndDelete:]):
        (-[WebDownload closeFile]):
        (-[WebDownload cleanUpAfterFailure]):
        (-[WebDownload createFileIfNecessary]):
        (-[WebDownload writeDataForkData:resourceForkData:]):
        (-[WebDownload dataIfDoneBufferingData:]):
        (-[WebDownload decodeData:]):
        (-[WebDownload receivedData:]):
        (-[WebDownload finishDecoding]):
        (-[WebDownload finishedLoading]):
        (-[WebDownload cancel]):
        (-[WebDownload path]):
        (-[WebDownload writeForkData:isDataFork:]):
        (-[WebDownload errorWithCode:]):
        (-[WebDownload cancelWithError:]):
        (-[WebDownload dataForkReferenceNumber]):
        (-[WebDownload setDataForkReferenceNumber:]):
        (-[WebDownload resourceForkReferenceNumber]):
        (-[WebDownload setResourceForkReferenceNumber:]):
        (-[WebDownload areWritesCancelled]):
        (-[WebDownload setWritesCancelled:]):
        (WriteCompletionCallback):
        (CloseCompletionCallback):
        (DeleteCompletionCallback):
        * Downloads.subproj/WebDownloadHandler.h: Removed.
        * Downloads.subproj/WebDownloadHandler.m: Removed.
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebDataSource.m:
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebMainResourceClient.h:
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient dealloc]):
        (-[WebMainResourceClient download]):
        (-[WebMainResourceClient isDownload]):
        (-[WebMainResourceClient receivedError:complete:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        (-[WebMainResourceClient handle:didReceiveData:]):
        (-[WebMainResourceClient handleDidFinishLoading:]):

2003-02-06  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3125067 - Investigate performance implications of writing download file data
        Reviewed by trey, rjw, darin.

        * Downloads.subproj/WebDownloadHandler.h:
        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler closeFileAndDelete:]): close the file asynchronously
        (-[WebDownloadHandler closeFile]): call closeFileAndDelete:NO
        (-[WebDownloadHandler cleanUpAfterFailure]): call closeFileAndDelete:YES
        (-[WebDownloadHandler writeDataForkData:resourceForkData:]): call writeForkData:isDataFork:
        (-[WebDownloadHandler path]): new
        (-[WebDownloadHandler writeForkData:isDataFork:]): writes file asynchronously
        (-[WebDownloadHandler errorWithCode:]): moved
        (-[WebDownloadHandler cancelWithError:]): new, stops load with error
        (-[WebDownloadHandler dataForkReferenceNumber]): new 
        (-[WebDownloadHandler setDataForkReferenceNumber:]): new
        (-[WebDownloadHandler resourceForkReferenceNumber]): new
        (-[WebDownloadHandler setResourceForkReferenceNumber:]): new
        (WriteCompletionCallback): new
        (CloseCompletionCallback): new, removes file if necessary
        (DeleteCompletionCallback): new,
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _stopLoadingWithError:]): new

2003-02-06  Trey Matteson  <trey@apple.com>

        3137647 - ad frames get their own history entries at channels.netscape.com        3133844 - 2 items in back list at http://www.kiup-bank.com/personal/main01.html

        Move logic for deciding on "quick redirect" down to WebCore, where we really know
        what case we're in instead of having to guess from the params we were receiving.

        Reviewed by Maciej, Darin.

        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):  Fix build error (URL vs String)
        * WebView.subproj/WebFramePrivate.h:  Nuke Completing state.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToLayoutAcceptable]):  Nuke Completing state.
        (-[WebFrame _transitionToCommitted:]):  Nuke Completing state.
        (-[WebFrame _isLoadComplete]):  Nuke Completing state.
        (-[WebFrame _clientRedirectedTo:delay:fireDate:lockHistory:]):
        Just obey lockHistory param when deciding whether we are doing a "client redirect"
        instead of previous guesswork.

2003-02-06  Richard Williamson   <rjw@apple.com>

        Rename WebError to WebKitError.
        
        Reviewed by maciej.

        * API-Issues.rtf:
        * Bookmarks.subproj/WebBookmarkImporter.m:
        (-[WebBookmarkImporter initWithPath:]):
        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler createFileIfNecessary]):
        (-[WebDownloadHandler writeDataForkData:resourceForkData:]):
        (-[WebDownloadHandler decodeData:]):
        (-[WebDownloadHandler finishedLoading]):
        * Misc.subproj/WebKitErrors.h:
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:]):
        (-[WebBridge viewForJavaAppletWithFrame:attributes:baseURL:]):
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate notifyDelegatesOfInterruptionByPolicyChange]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueAfterNavigationPolicy:]):
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeAndKeepLoading:]):
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        * WebView.subproj/WebView.m:
        (+[WebView initialize]):

2003-02-05  Chris Blumenberg  <cblu@apple.com>

        Comment should have been "Made WebPluginError constructors private."

        * ChangeLog:

2003-02-05  Chris Blumenberg  <cblu@apple.com>

        WebKit API clean-up:
        - Added enum to WebContextMenuDelegate that is the menu item tag of the menu items passed in the default menu item array.
        - WebPluginError should return URL strings.
        - Made WebPluginError constructors private.

        Reviewed by rjw.

        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]):
        * Plugins.subproj/WebPluginError.h:
        * Plugins.subproj/WebPluginError.m:
        (-[WebPluginError pluginPageURL]):
        * Plugins.subproj/WebPluginErrorPrivate.h: Added.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge viewForPluginWithURL:attributes:baseURL:MIMEType:]):
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebContextMenuDelegate.h:
        * WebView.subproj/WebDefaultContextMenuDelegate.h:
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate menuItemWithTag:]):
        (-[WebDefaultContextMenuDelegate contextMenuItemsForElement:defaultMenuItems:]):

2003-02-04  Trey Matteson  <trey@apple.com>

        WC now tells us the form values being submitted with a get/post.
        We forward this info to a new WebFormDelegate method.  Most of this
        change is just glue passing the formValues through all our layers.

        Reviewed by Maciej

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge loadURL:reload:triggeringEvent:formValues:])
        Pass along formValues.
        (-[WebBridge postWithURL:data:contentType:triggeringEvent:formValues:]):
        Pass along formValues.
        * WebKit.pbproj/project.pbxproj:  Reorder previously added files.
        * WebView.subproj/WebControllerPolicyDelegate.m:  Fix latent copy/paste error
        where two keys had the same underlying string value!
        * WebView.subproj/WebFormDelegate.h:  Declare new delegate method.
        * WebView.subproj/WebFormDelegate.m:
        (-[WebFormDelegate frame:willSubmitFormWithValues:]):   NOP impl of new method.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):  Pass nil formValues.
        (-[WebFrame reload]):  Pass nil formValues.
        * WebView.subproj/WebFramePrivate.h:  New ivar to hold form values
        while waiting for the policy delegate response.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFramePrivate dealloc]):  ASSERT new ivar is nil.
        (-[WebFrame _loadItem:fromItem:withLoadType:]):   Pass nil formValues.
        (-[WebFrame _loadRequest:triggeringAction:loadType:formValues:]):
        Pass along formValues.
        (-[WebFrame _invalidatePendingPolicyDecisionCallingDefaultAction:]):
        Pass nil formValues to continuation method.
        (-[WebFrame _checkNavigationPolicyForRequest:dataSource:formValues:andCall:withSelector:]):
        Stash formValues before calling policy delegate.
        (-[WebFrame _continueAfterNavigationPolicy:]):
        Resurrect formValues after calling policy delegate, pass to continuation method.
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:formValues:]):
        Bail on nil request instead of shouldContinue=NO
        (-[WebFrame _loadURL:loadType:triggeringEvent:formValues:]):
        Pass formValues along.
        (-[WebFrame _loadURL:intoChild:]): Pass nil formValues.
        (-[WebFrame _postWithURL:data:contentType:triggeringEvent:formValues:]):
        Pass formValues along.
        (-[WebFrame _reloadAllowingStaleDataWithOverrideEncoding:]):
        Pass nil formValues.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:formValues:]):
        Bail on nil request instead of shouldContinue=NO.  Call new FormDelegate method.
        (-[WebFrame _loadDataSource:withLoadType:formValues:]):
        Pass formValues along.
        (-[WebFrame _downloadRequest:toDirectory:]):
        Pass nil formValues.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterNavigationPolicy:formValues:]):
        Bail on nil request instead of shouldContinue=NO
        (-[WebMainResourceClient handle:willSendRequest:]):
        Pass nil formValues.

2003-02-05  Richard Williamson   <rjw@apple.com>

        WebHistory* API clenaup.

        Reviewed by Chris.

        * Bookmarks.subproj/WebBookmarkLeaf.m:
        * History.subproj/WebHistory.h:
        * History.subproj/WebHistory.m:
        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem title]):
        (-[WebHistoryItem setDisplayTitle:]):
        (-[WebHistoryItem hash]):
        (-[WebHistoryItem anchor]):
        (-[WebHistoryItem isEqual:]):
        (-[WebHistoryItem description]):
        (-[WebHistoryItem _retainIconInDatabase:]):
        (+[WebHistoryItem entryWithURL:]):
        (-[WebHistoryItem initWithURL:title:]):
        (-[WebHistoryItem initWithURL:target:parent:title:]):
        (-[WebHistoryItem URL]):
        (-[WebHistoryItem target]):
        (-[WebHistoryItem parent]):
        (-[WebHistoryItem dictionaryRepresentation]):
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * History.subproj/WebHistoryItemPrivate.h:
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebHistoryPrivate.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebController.h:
        * WebView.subproj/WebController.m:
        (-[WebController setPreferences:]):
        (-[WebController preferences]):
        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate dealloc]):
        * WebView.subproj/WebDataSourcePrivate.m:
        * WebView.subproj/WebFramePrivate.m:

2003-02-05  Richard Williamson   <rjw@apple.com>

        Cleanup public WebHistory API, stage 1.

        Reviewed by trey.

        * History.subproj/WebHistory.h:
        * History.subproj/WebHistory.m:
        (-[_WebCoreHistoryProvider initWithHistory:]):
        (-[_WebCoreHistoryProvider containsEntryForURLString:]):
        (-[_WebCoreHistoryProvider dealloc]):
        (+[WebHistory sharedHistory]):
        (+[WebHistory createSharedHistoryWithFile:]):
        * History.subproj/WebHistoryPrivate.h:
        * History.subproj/WebHistoryPrivate.m:

2003-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        * WebKit.pbproj/project.pbxproj: Updated to build the framework
        standalone instead of embedded when doing a B&I build for Panther.

2003-02-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3163879 - receivedPageIcon:forDataSource: always sends nil image

        Reviewed by rjw.

        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _updateIconDatabaseWithURL:]): 

2003-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3135388 -- encoding changes do not affect text in form elements

        The problem was that form data was being saved and restored, and in the case of buttons,
        the form data was the incorrectly decoded button label.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToLayoutAcceptable]): Remove the default: case so we get a warning if
        we omit one of the enum values from this switch statement.
        (-[WebFrame _transitionToCommitted:]): Move the WebFrameLoadTypeReloadAllowingStaleData
        case up so it's right next to the case it should be merged with.
        (-[WebFrame _isLoadComplete]): Remove the default: case so we get a warning if
        we omit one of enum values from this switch statement.
        (-[WebFrame _itemForRestoringDocState]): Replace the if statement with a switch statement.
        Include WebFrameLoadTypeReloadAllowingStaleData, which fixes the bug.

2003-02-03  Richard Williamson   <rjw@apple.com>

        Fixed headerdoc type.
        
        * WebView.subproj/WebDocument.h:

2003-02-03  Richard Williamson   <rjw@apple.com>

        Support for new canProvideDocumentSource and documentSource API.
        Updated all the representations.  Added support to show for RTF source.  
        Moved WebKitInitializeUnicode to to early class.  This was necessary
        because WebCore may use the unicode property functions before WebTextRenderer
        gets initialized.
        Ensured guarantee that identifierForInitialRequest:fromDataSource: is called with
        the first initial request.
        
        Reviewed by maciej.

        * Plugins.subproj/WebNetscapePluginRepresentation.m:
        (-[WebNetscapePluginRepresentation canProvideDocumentSource]):
        (-[WebNetscapePluginRepresentation documentSource]):
        * WebCoreSupport.subproj/WebTextRenderer.m:
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate setIdentifier:]):
        * WebView.subproj/WebDataSource.h:
        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource initWithRequest:]):
        (-[WebDataSource controller]):
        (-[WebDataSource initialRequest]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]):
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _originalRequest]):
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebHTMLRepresentation.h:
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):
        (-[WebHTMLRepresentation canProvideDocumentSource]):
        * WebView.subproj/WebHTMLView.m:
        (+[WebHTMLView initialize]):
        * WebView.subproj/WebImageRepresentation.m:
        (-[WebImageRepresentation canProvideDocumentSource]):
        (-[WebImageRepresentation documentSource]):
        * WebView.subproj/WebTextRepresentation.h:
        * WebView.subproj/WebTextRepresentation.m:
        (-[WebTextRepresentation dealloc]):
        (-[WebTextRepresentation setDataSource:]):
        (-[WebTextRepresentation finishedLoadingWithDataSource:]):
        (-[WebTextRepresentation canProvideDocumentSource]):
        (-[WebTextRepresentation documentSource]):

2003-02-03  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3163073 - SECURITY: Need to check if filename in encoded download is safe

        Reviewed by kocienda, darin, mjs.

        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler createFileIfNecessary]): call _web_filenameByFixingIllegalCharacters on the encoded filename

2003-02-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Ken.

        - fixed 3162581 - 56 debug: Assertion failure displaying pop-up menu while downloading
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient handle:didReceiveResponse:]): No need to assert that the controller is
        not deferred if this is a handle being used for a download.
        (-[WebMainResourceClient handle:didReceiveData:]): Likewise.
        (-[WebMainResourceClient handleDidFinishLoading:]): Likewise.
        (-[WebMainResourceClient handle:didFailLoadingWithError:]): Likewise.

2003-01-31  Trey Matteson  <trey@apple.com>

        New plumbing for autofill/autocomplete.  WebBrowser receives controlText delegate
        messages from our form widgets.  Should result in no behavior change.

        New private API is exposed for the app to set a WebFormDelegate.

        Reviewed by Richard

        * WebCoreSupport.subproj/WebBridge.m:  Pass msgs from WC on to the controller's FormDelegate.
        (formDelegate):  Little utility function.
        (-[WebBridge controlTextDidBeginEditing:]):
        (-[WebBridge controlTextDidEndEditing:]):
        (-[WebBridge controlTextDidChange:]):
        (-[WebBridge control:textShouldBeginEditing:]):
        (-[WebBridge control:textShouldEndEditing:]):
        (-[WebBridge control:didFailToFormatString:errorDescription:]):
        (-[WebBridge control:didFailToValidatePartialString:errorDescription:]):
        (-[WebBridge control:isValidObject:]):
        (-[WebBridge control:textView:doCommandBySelector:]):
        * WebKit.exp:  New class exported.
        * WebKit.pbproj/project.pbxproj:  New WebFormDelegate files.
        * WebView.subproj/WebControllerPrivate.h:  API to set/get FormDelegate.
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _setFormDelegate:]):  simple setter
        (-[WebController _formDelegate]):  simple getter
        * WebView.subproj/WebFormDelegate.h: Added.
        * WebView.subproj/WebFormDelegate.m: Added.
        NOP impls for all these delegate methods.
        (-[WebFormDelegate controlTextDidBeginEditing:inFrame:]):
        (-[WebFormDelegate controlTextDidEndEditing:inFrame:]):
        (-[WebFormDelegate controlTextDidChange:inFrame:]):
        (-[WebFormDelegate control:textShouldBeginEditing:inFrame:]):
        (-[WebFormDelegate control:textShouldEndEditing:inFrame:]):
        (-[WebFormDelegate control:didFailToFormatString:errorDescription:inFrame:]):
        (-[WebFormDelegate control:didFailToValidatePartialString:errorDescription:inFrame:]):
        (-[WebFormDelegate control:isValidObject:inFrame:]):
        (-[WebFormDelegate control:textView:doCommandBySelector:inFrame:]):

2003-01-31  Chris Blumenberg  <cblu@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.
        * WebView.subproj/WebController.m: fixed key value

2003-01-31  Chris Blumenberg  <cblu@apple.com>

        Fixed : 3155148 - image shown when dragging gets size from image file, not size as used on page

        Reviewed by darin.

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragPromisedImage:rect:URL:fileType:title:event:]): take a rect so we know the original size and origin
        * WebKit.exp: added WebElementImageRectKey
        * WebView.subproj/WebController.h: WebElementImageRectKey
        * WebView.subproj/WebController.m: WebElementImageRectKey
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _handleMouseDragged:]): call _web_dragPromisedImage with WebElementImageRect
        * WebView.subproj/WebImageView.m: 
        (-[WebImageView menuForEvent:]): provide the WebElementImageRect since we do this for other image elements
        (-[WebImageView mouseDragged:]): call _web_dragPromisedImage with [self bounds]

=== Safari-55 ===

2003-01-30  Chris Blumenberg  <cblu@apple.com>

        Backed out my fix for 3161102. Richard and I found problems the fix. 3161102 turns out to not be an issue.

        Reviewed by rjw.

        * History.subproj/WebHistoryItem.m:
        (+[WebHistoryItem _releaseAllPendingPageCaches]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView windowWillClose:]):

2003-01-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3161102 - Avoid retain cycles by destroying plug-ins in the page cache before dealloc

        Reviewed by rjw.

        * History.subproj/WebHistoryItem.m:
        (+[WebHistoryItem _releaseAllPendingPageCaches]): iterate over all of the plug-ins and call destroy
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView windowWillClose:]): clear page cache

2003-01-30  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3160464 - Slideback sometimes happens twice

        Because we start drags in mouseDragged (which AppKit says we shouldn't), we get mouseDragged events
        after a drag (image, link, text etc) has ended. We also get mouseDragged events after we've sent the
        fake mouseUp to WebCore. That is probably bad for unknown reasons.

        Reviewed by darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView mouseDown:]): set ignoringMouseDraggedEvents to NO
        (-[WebHTMLView mouseDragged:]): check ignoringMouseDraggedEvents
        (-[WebHTMLView draggedImage:endedAt:operation:]): set ignoringMouseDraggedEvents to NO
        * WebView.subproj/WebHTMLViewPrivate.h: added ignoringMouseDraggedEvents

2003-01-30  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3160710 -- REGRESSION: bizrate.com front page ad in wrong position

        The new code to compute port coordinates was screwing up somehow.
        I had to roll it out and we'll have to try again to fix the problem Ed was fixing.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):
        Roll back changes between 1.45 and 1.47.

2003-01-29  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3158624 -- crash reentering WebBaseNetscapePluginView removeTrackingRect closing window

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView removeTrackingRect]):
        Set tracking tag to 0 before releasing the window to prevent reentering.

2003-01-29  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin.

        Fix for this bug:

        Radar 3142818 (Downloading many items quickly can cause future page loads to fail)

        The issue was with a mismatch between different object's idea about
        whether callbacks were being deferred. I have simplified the code in this
        area somewhat, and I have added some asserts to make sure that callbacks
        are not sent when deferalls are on. 

        More work will need to be done in callback deferral-land, however. This change
        fixes the bug, but it may not be a good long-term fix.  I will file a bug on 
        the need for this additonal work.

        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate defersCallbacks]): Added method.
        * WebView.subproj/WebMainResourceClient.h: Removed unneeded defersBeforeCheckingPolicy flag.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterNavigationPolicy:request:]): Unconditionally set 
        callback deferrals to NO.
        (-[WebMainResourceClient handle:willSendRequest:]): Remove all callback deferral code here.
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Unconditionally set 
        callback deferrals to NO.
        (-[WebMainResourceClient handle:didReceiveResponse:]): Assert that the handle argument
        to this method, the client (self), and the data source's controller all are not
        deferring callbacks.
        Unconditionally set callback deferrals to YES.
        (-[WebMainResourceClient handle:didReceiveData:]): Ditto
        (-[WebMainResourceClient handleDidFinishLoading:]): Ditto
        (-[WebMainResourceClient handle:didFailLoadingWithError:]): Ditto

2003-01-29  John Sullivan  <sullivan@apple.com>

        - fixed 3160116 -- REGRESSION:leak in WebBookmarkLeaf at startup

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmarkLeaf.m:
        (-[WebBookmarkLeaf initFromDictionaryRepresentation:withGroup:]):
        don't leak the _entry that was created in initWithURLString:title:group:

2003-01-29  Trey Matteson  <trey@apple.com>

        3159750 - REGRESSION: cursor is I-beam when over a standalone image

        We now reset the cursor to arrow before switching doc views.

        Also, made various replacements of "id <WebDocumentView>" with "NSView < WebDocumentView> *"
        to get better compile time checking.

        Reviewed by Darin.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _makeDocumentView]):  Use NSView*
        (-[WebFrame _transitionToCommitted:]): Use NSView*
        * WebView.subproj/WebViewPrivate.h: Use NSView*
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _setDocumentView:]): Use NSView*.  Reset cursor.
        (-[WebView _makeDocumentViewForDataSource:]): Use NSView*

2003-01-29  Chris Blumenberg  <cblu@apple.com>

        3159529 - REGRESSION: URLs with no path are saved as "-.html"

        Reviewed by darin, trey, kocienda.

        * Misc.subproj/WebResourceResponseExtras.m:
        (-[NSURL _web_suggestedFilenameForSavingWithMIMEType:]): Don't use the lastPathComponent if it is "/".

2003-01-28  Trey Matteson  <trey@apple.com>

        Removing ERROR() that isn't an error, left over from the Safari-48 download firedrill.

        Reviewed by Chris.

        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler cleanUpAfterFailure]):  Don't ERROR if we are asked to cleanup
        a file and there is nothing to cleanup.  This can happen in the rare case of the
        download being canceled before the first byte arrives, and we deal properly, no ERROR.

2003-01-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3150856 - crash with full-size plugins in frame or iframe

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView start]): added assert
        * Plugins.subproj/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView setDataSource:]): added assert
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _makeDocumentView]): Don't call setDataSource here because the view is not in the view hierarchy at this point.
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _makeDocumentViewForDataSource:]): Call setDataSource on the document view after it has been placed in the view hierarchy. This what we for the top-level view, so should do this for views in subframes as well.

2003-01-28  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3156172 - No filename correction when downloading images via drag & drop

        Reviewed by mjs, john, trey.

        * WebView.subproj/WebControllerPrivate.h:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _downloadURL:]): call _downloadURL:toDirectory:
        (-[WebController _downloadURL:toDirectory:]): call -[WebFrame _downloadRequest:toDirectory:]
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]): release the download directory
        (-[WebDataSource _setDownloadDirectory:]): new
        (-[WebDataSource _downloadDirectory]): new
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _downloadRequest:toDirectory:]): renamed
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): call -[WebController _downloadURL:toDirectory:]
        * WebView.subproj/WebImageView.m:
        (-[WebImageView namesOfPromisedFilesDroppedAtDestination:]): call -[WebController _downloadURL:toDirectory:]
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): if the data source has a download directory, use it plus the filename from the response as download path

2003-01-28  Trey Matteson  <trey@apple.com>

        2940179 - Arrow cursor should change to link cursor after click of link in non-frontmost window
        3158240 - cursor does not track when switching from panels to safari windows

        Two changes here:  First, we post fake mousemoved events to get the cursor fixed up
        without checking if the mouse is down (WC deals with that now).  That fixes 2940179,
        because the button is down when we get notified of becoming key.

        Second, we observe key window instead of main window notifications everywhere, so we
        update the cursor when clicking between a panel and our doc windows.

        Reviewed by Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addMouseMovedObserver]):  s/main/key/g
        (-[WebHTMLView addWindowObservers]):    s/main/key/g
        (-[WebHTMLView removeWindowObservers]):  s/main/key/g
        (-[WebHTMLView windowDidBecomeKey:]):  s/main/key/g
        (-[WebHTMLView windowDidResignKey:]):  s/main/key/g
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _frameOrBoundsChanged]):  Always post mousemoved event.

2003-01-28  John Sullivan  <sullivan@apple.com>

        - fixed 3158304 -- Assertion failure cancelling "Add Bookmark"
        or deleting newly-created bookmarks

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmarkGroup.m:
        (-[WebBookmarkGroup _bookmark:changedUUIDFrom:to:]):
        new method that notifies group when a bookmark that's already
        in a group changes its UUID -- the UUID to bookmark dictionary
        updates for this change.

        * Bookmarks.subproj/WebBookmarkGroupPrivate.h:
        private declaration for this method

        * Bookmarks.subproj/WebBookmark.m:
        (-[WebBookmark _setUUID:]):
        notify group when UUID changes
        (-[WebBookmark UUID]):
        ditto

2003-01-28  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3156197 -- leak in -[WebBookmarkList initFromDictionaryRepresentation:withGroup:]

        * Bookmarks.subproj/WebBookmarkList.m:
        (-[WebBookmarkList initFromDictionaryRepresentation:withGroup:]):
        Fixed storage leak by not allocating the list here, because [self init] will
        be called and that will allocate the list.

2003-01-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Ken.

        * English.lproj/StringsNotToBeLocalized.txt: Removed unused exception.

2003-01-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3156230 - REGRESSION: Java 141: Safari Does Not Stop Applets When Browser Window Closes

        Reviewed by dave.

        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController destroyAllPlugins]): renamed from HTMLViewWillBeDeallocated because it may get called before the dealloc
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addWindowObservers]): observe NSWindowWillCloseNotification
        (-[WebHTMLView removeWindowObservers]): remove observer for NSWindowWillCloseNotification
        (-[WebHTMLView windowWillClose:]): call destroyAllPlugins
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLViewPrivate dealloc]): call destroyAllPlugins

2003-01-27  Richard Williamson   <rjw@apple.com>

        Fixed 3139909.  Fake the resource load delegate messages (minus willSendRequest)
        when a page is loaded from a the page cache.
        
        Reviewed by john.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate handle:didReceiveResponse:]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]):
        (-[WebDataSource _addResponse:]):
        (-[WebDataSource _responses]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _opened]):

2003-01-27  Trey Matteson  <trey@apple.com>

        3157104 - reproducible assert in _continueFragmentScrollAfterNavigationPolicy

        Remove assertion, and it turns out the existing code will handle the case.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:request:]):

2003-01-27  Richard Williamson   <rjw@apple.com>

        Make emptying the page cache synchronous when "Empty Cache"
        is selected from menu.  More bulletproofing to ensure that
        3155781 doesn't happen.
        
        Reviewed by trey.

        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList clearPageCache]):

2003-01-27  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3156235 - change throttle for plug-in null events to 50 frames per second (when frontmost)

        Reviewed by dave.

        * Plugins.subproj/WebBaseNetscapePluginView.m:

2003-01-27  Richard Williamson   <rjw@apple.com>

        Fixed 3151241.  Cleanly handle nil return from resource:willSendRequest:fromDataSource:.
        
        Reviewed by trey.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate handle:willSendRequest:]):
        (-[WebBaseResourceHandleDelegate handleDidFinishLoading:]):
        (-[WebBaseResourceHandleDelegate handle:didFailLoadingWithError:]):
        (-[WebBaseResourceHandleDelegate cancelWithError:]):
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _mainReceivedError:fromDataSource:complete:]):

2003-01-27  John Sullivan  <sullivan@apple.com>

        - fixed 3156744 -- REGRESSION: Renaming bookmarks dragged 
        into bookmark bar does not work at first

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmarkList.m:
        (-[WebBookmarkList insertChild:atIndex:]):
        was adding self to its own group (a no-op), instead of adding
        the new child to self's group. This was a typo from the
        refactoring to fix 3152427.

2003-01-27  Chris Blumenberg  <cblu@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for changes I previously made.

2003-01-26  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3156725 - Partially selected links show extra underlining when dragged

        Reviewed by darin.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (drawLineForCharacters...): don't ignore "from" "to" parameters

2003-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3126211 -- "go back" buttons that use "history.go(-1)" doesn't work (verizonwireless.com is an example)

        Implemented new bridge functions for use by the history object.

        * History.subproj/WebBackForwardList.h: Added backListCount and entryAtIndex:.
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList backListCount]): Added.
        (-[WebBackForwardList entryAtIndex:]): Added.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge historyLength]): Added. Calls backListCount.
        (-[WebBridge goBackOrForward:]): Added. Calls entryAtIndex: and then goBackOrForwardToItem:.

2003-01-25  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3153605 - Drag image when dragging text should be the actual text

        Reviewed by darin.

        * Misc.subproj/WebNSImageExtras.m:
        (-[NSImage _web_dissolveToFraction:]): handle non-flipped images
        * Misc.subproj/WebNSViewExtras.h: moved some constants around
        * Misc.subproj/WebNSViewExtras.m:
        * Resources/text_clipping.tiff: Removed.
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _handleMouseDragged:]): cleaned-up, get text drag image from WebCore

2003-01-25  Darin Adler  <darin@apple.com>

        * Plugins.subproj/WebBaseNetscapePluginView.m: Replace some tabs with spaces.

2003-01-24  Richard Williamson   <rjw@apple.com>

        Cleaned up some stray comments.
        
        Reviewed by kocienda.

        * Misc.subproj/WebUnicode.m:
        (getShape):
        (nextChar):
        (glyphVariantLogical):
        (shapedString):

2003-01-24  Trey Matteson  <trey@apple.com>

        Chris pointed out a FIXME that led to a more contained way to make sure the cursor
        is correct during and after image/text/URL dragging.

        Reviewed by Chris.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggedImage:endedAt:operation:]):  No need to reset the cursor at
        the end of dragging.  WC deals with it.
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _handleMouseDragged:]):  No need to set the cursor to arrow, WC
        deals with it.

2003-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed 3142852 -- frame content repeatedly requested

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge incomingReferrer]):
        Added a way to get the referrer across the bridge, needed for bug fix.

2003-01-24  Ed Voas  <voas@apple.com>

        Reviewed by Darin.

        Netscape plugins were being improperly positioned. I noticed this when I
        put the web view into a window with borders around it (Carbon metal window,
        but I would imagine Cocoa metal would do it too).

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]):

2003-01-23  Trey Matteson  <trey@apple.com>

        3155162 - cursor changes to I-beam after dragging image
        3154468 - no mouseup event comes through after text snippet drag

        During AK dragging the system takes over the event stream and we never get any mouse
        move or up events.  It also changes the cursor behind out back.  When done
        cached state that thinks it knows the current cursor is wrong.

        The fix is that after the drag we reset the cursor and synthesize a mouseup event,
        which then sets the cursor based on what we're really over.

        Reviewed by Darin.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggedImage:endedAt:operation:]):  After the drag,
        reset the cursor, fake up a mouseup event.

2003-01-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView takeFindStringFromSelection:]):
        Now uses new _web_setFindPasteboardString:withOwner: to share code.

2003-01-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Trey

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard _web_setFindPasteboardString:withOwner:]):
        New method to put text on the Find pasteboard.

2003-01-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        * WebView.subproj/WebController.h: Remove unneeded declaration in
        sample code.

2003-01-23  Chris Blumenberg  <cblu@apple.com>

        Made WebTextView use the same format for context menus as the rest of WebKit.
        Implemented "Copy" context menu.

        Reviewed by john.

        * English.lproj/Localizable.strings:
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _menuForElement:]): tweak.
        * WebView.subproj/WebDefaultContextMenuDelegate.m:
        (-[WebDefaultContextMenuDelegate contextMenuItemsForElement:defaultMenuItems:]): added "Copy" context menu.
        * WebView.subproj/WebImageView.m:
        (-[WebImageView menuForEvent:]): added asserts
        * WebView.subproj/WebTextView.m:
        (-[WebTextView menuForEvent:]): implemented

2003-01-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        * WebView.subproj/WebController.m: Add missing static.

2003-01-23  Darin Adler  <darin@apple.com>

        Reviewed by John.

        * Downloads.subproj/WebBinHexDecoder.m: (-[WebBinHexDecoder fileAttributes]):
        * Downloads.subproj/WebMacBinaryDecoder.m: (-[WebMacBinaryDecoder fileAttributes]):
        Use "FinderFlags" instead of "FinderInfo" as appropriate, since these are
        just the Finder flags, not all the Finder info.

        * Downloads.subproj/WebDownloadHandler.m: (-[WebDownloadHandler createFileIfNecessary]):
        * Misc.subproj/WebNSWorkspaceExtras.m: (-[NSWorkspace _web_noteFileChangedAtPath:]):
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage pathByResolvingSymlinksAndAliasesInPath:]):
        (-[WebNetscapePluginPackage load]):
        Use fileSystemRepresentation instead of fileSystemRepresentationWithPath:
        because it's simpler and there's no good reason to use the other one.

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Improved one of the motivating comments.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

=== Safari-54 ===

2003-01-22  Chris Blumenberg  <cblu@apple.com>

        Fixed problem where we weren't stopping the Java plug-in. This problem was introduced on Jan. 1
        when the ownership of the WebPluginController was moved from WebFrame to WebDataSource. This
        change moves the WebPluginController to the WebHTMLView. Why this change?

        - The state of the plug-ins (currently only the Java plug-in) completely relies on the state of
          the WebHTMLView, not on the state of the WebDataSource.

        - WebHTMLView and WebDataSource are usually coupled via WebView and WebFrame, but not always.
          In a transitional state, the WebHTMLView may not be up to date with the WebDataSource.

        - WebPluginController controls an array of views. It makes more sense for this object to be
          owned by a view (WebHTMLView) not a model.

        Reviewed by darin.

        * Plugins.subproj/WebPluginController.h:
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController initWithHTMLView:]): renamed, take the HTML view
        (-[WebPluginController addPlugin:]): use the HTML view
        (-[WebPluginController HTMLViewWillBeDeallocated]): renamed
        (-[WebPluginController showURL:inFrame:]): use the HTML view
        (-[WebPluginController showStatus:]): use the HTML view
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge pluginViewWithPackage:attributes:baseURL:]): get the plug-in controller from the HTML view
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]): removed calls to plug-in controller 
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView initWithFrame:]): create plug-in controller
        (-[WebHTMLView viewWillMoveToWindow:]): get plug-in controller from self, data source won't be accessible here since we don't have a superview
        (-[WebHTMLView viewDidMoveToWindow]): get plug-in controller from self
        (-[WebHTMLView addSubview:]): get plug-in controller from self
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLViewPrivate dealloc]): release plug-in controller
        (-[WebHTMLView _pluginController]): added

2003-01-22  John Sullivan  <sullivan@apple.com>

        - fixed 3152427 -- Need unique IDs for bookmarks, for 
        synching's sake

        Bookmarks now have a UUID string so that each can maintain its identity
        even in the face of multi-machine synching. One known loose end is written 
        up in 3153832 (unique IDs in bookmarks aren't preserved correctly after copy/paste).
        This should be good enough now for the iSynch folks to start implementing
        the bookmarks-synching conduit.

        I also did some cleanup in this area to share more code and handle
        init methods more cleanly, inspired by earlier feedback from Trey and Darin.

        Reviewed by Trey and Darin

        * Bookmarks.subproj/WebBookmark.h:
        new _UUID ivar, UUID declaration
        * Bookmarks.subproj/WebBookmarkPrivate.h:
        new _setUUID and _hasUUID declarations

        * Bookmarks.subproj/WebBookmark.m:
        (-[WebBookmark dealloc]):
        assert that group is nil here; release _UUID
        (-[WebBookmark copyWithZone:]):
        implement the code shared by each subclass; formerly had no implementation.
        (-[WebBookmark _setUUID:]):
        private method to set the UUID
        (-[WebBookmark UUID]):
        public method to get the UUID; this lazily creates the UUID.
        (-[WebBookmark _hasUUID]):
        private method to check whether there's a UUID without creating
        one by side effect (as calling -[WebBookmark UUID] would)
        (-[WebBookmark initFromDictionaryRepresentation:withGroup:]):
        implement the code shared by each subclass; formerly had no implementation.
        (-[WebBookmark dictionaryRepresentation]):
        implement the code shared by each subclass; formerly had no implementation.

        * Bookmarks.subproj/WebBookmarkGroup.h:
        new _bookmarksByUUID ivar
        * Bookmarks.subproj/WebBookmarkGroupPrivate.h:
        declarations for new methods _addBookmark: and _removeBookmark:

        * Bookmarks.subproj/WebBookmarkGroup.m:
        (-[WebBookmarkGroup init]):
        new method, just complains that you should have called initWithFile: instead.
        (-[WebBookmarkGroup initWithFile:]):
        create _bookmarksByUUID
        (-[WebBookmarkGroup dealloc]):
        release _bookmarksByUUID
        (-[WebBookmarkGroup _addBookmark:]):
        new method, if bookmark has UUID, adds it to table, and recursively
        processes children the same way
        (-[WebBookmarkGroup _removeBookmark:]):
        new method, if bookmark has UUID, removes it from table, and recursively
        processes children the same way
        (-[WebBookmarkGroup _setTopBookmark:]):
        replace [bookmark setGroup:group] with [group _addBookmark:bookmark]
        so it runs through the UUID code
        (-[WebBookmarkGroup _bookmarkChildren:wereRemovedFromParent:]):
        retitled this from "wereRemovedToParent"

        * Bookmarks.subproj/WebBookmarkLeaf.m:
        (-[WebBookmarkLeaf init]):
        now calls initWithURLString:title:group with nil parameters so that
        there's a designated initializer
        (-[WebBookmarkLeaf initFromDictionaryRepresentation:withGroup:]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkLeaf dictionaryRepresentation]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkLeaf copyWithZone:]):
        rewritten to do only the subclasses' part now

        * Bookmarks.subproj/WebBookmarkList.m:
        (-[WebBookmarkList init]):
        now calls initWithTitle:group with nil parameters so that
        there's a designated initializer
        (-[WebBookmarkList initWithTitle:group:]):
        replace [bookmark setGroup:group] with [group _addBookmark:bookmark]
        so it runs through the UUID code
        (-[WebBookmarkList initFromDictionaryRepresentation:withGroup:]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkList dictionaryRepresentation]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkList copyWithZone:]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkList _setGroup:]):
        removed this override, which used to do the recursion to set the group
        of children; this recursion is now done by -[WebBookmarkGroup _addBookmark:]
        and _removeBookmark:
        (-[WebBookmarkList removeChild:]):
        wereRemovedToParent -> wereRemovedFromParent
        (-[WebBookmarkList insertChild:atIndex:]):
        replace [bookmark setGroup:group] with [group _addBookmark:bookmark]
        so it runs through the UUID code

        * Bookmarks.subproj/WebBookmarkProxy.m:
        (-[WebBookmarkProxy init]):
        now calls initWithTitle:group with nil parameters so that
        there's a designated initializer
        (-[WebBookmarkProxy initWithTitle:group:]):
        replace [bookmark setGroup:group] with [group _addBookmark:bookmark]
        so it runs through the UUID code
        (-[WebBookmarkProxy initFromDictionaryRepresentation:withGroup:]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkProxy dictionaryRepresentation]):
        rewritten to do only the subclasses' part now
        (-[WebBookmarkProxy copyWithZone:]):
        rewritten to do only the subclasses' part now

2003-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3153673 -- spoof as MacIE to get into http://www.mazdausa.com
        - fixed 3153678 -- spoof as MacIE for http://wap.sonyericsson.com/

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Add the two new entries.
        Also reorganize existing entries a bit.

2003-01-22  Chris Blumenberg  <cblu@apple.com>

        Removed comment that I added by mistake.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggingSourceOperationMaskForLocal:]):

2003-01-22  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3153651 - text dragging does not work to Terminal

        Reviewed by trey.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView draggingSourceOperationMaskForLocal:]): Terminal only accepts the drag if one of the operations is generic. Made the operation both generic and copy.

2003-01-21  Chris Blumenberg  <cblu@apple.com>

        Added support for text dragging.

        Reviewed by dave.

        * Resources/text_clipping.tiff: Added. Temp drag image until we can create an image of the selected text.
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge mayStartDragWithMouseDraggedEvent:]): renamed, we now ask if OK to drag during the drag
        * WebKit.exp: renamed element key for selected text
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebController.h: renamed element key for selected text
        * WebView.subproj/WebController.m: renamed element key for selected text
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _handleMouseDragged:]): added support for text dragging
        (-[WebHTMLView _mayStartDragWithMouseDragged:]): renamed, we now ask if OK to drag during the drag

2003-01-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3132120 - onchange handler not firing on mac.com webmail
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebNSTextView resignFirstResponder]): If we really resign first responder, and
        our delegate responds to filedWillBecomeFirstResponder, then call that method.
        (-[WebNSTextView becomeFirstResponder]): If we really become first responder, and
        our delegate responds to filedWillBecomeFirstResponder, then call that method.

2003-01-20  Trey Matteson  <trey@apple.com>

        Nit fix to remove a dead "cursor" ivar found while grepping.

        Reviewed by Richard.

        * WebView.subproj/WebDynamicScrollBarsView.h:
        * WebView.subproj/WebDynamicScrollBarsView.m:

2003-01-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3123041 - VIP: Spewage at bottom of oregonlive.com and other similar pages

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Added nj.com to spoof list
        below oregonlive.com (which was already in there). Added comment explaining the
        need to spoof a bit more.
        * WebView.subproj/WebUserAgentSpoofTable.c:
        (hash):
        (_web_findSpoofTableEntry): Regenerated.

2003-01-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3143656 - crash in MIMETypeForFile when a large QT movie is dragged over window

        Reviewed by darin.

        * WebView.subproj/WebControllerPrivate.m:
        (+[WebController _MIMETypeForFile:]): rewrote, now calls _web_guessedMIMEType

2003-01-17  Darin Adler  <darin@apple.com>

        - compressed all our non-compressed TIFF files

        * Resources/nullplugin.tiff:
        * Resources/url_icon.tiff:

2003-01-16  Darin Adler  <darin@apple.com>

        * WebView.subproj/WebController.h: Fixed a comment that was out of date.

2003-01-16  Chris Blumenberg  <cblu@apple.com>

        Fixed comment.

        * Plugins.subproj/WebBaseNetscapePluginView.m:

2003-01-16  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3125743 - right-click doesn't count as ctrl-click in Flash

        AppKit doesn't call mouseDown or mouseUp on right-click. Simulate control-click mouseDown and mouseUp so plug-ins get the right-click event as they do in Carbon

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView rightMouseDown:]):
        (-[WebBaseNetscapePluginView rightMouseUp:]):

2003-01-16  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - added an API for dumping the external representation of the render tree for testing

        * Misc.subproj/WebCoreStatistics.h: Added renderTreeAsExternalRepresentation.
        * Misc.subproj/WebCoreStatistics.m: (-[WebFrame renderTreeAsExternalRepresentation]): Added.

        - removed remnants of an earlier more-naive cut at this same sort of thing

        * Misc.subproj/WebTestController.h: Removed.
        * Misc.subproj/WebTestController.m: Removed.
        * WebKit.exp: Removed WebTestController.
        * WebKit.pbproj/project.pbxproj: Removed WebTestController.

        - other changes

        * WebCoreSupport.subproj/WebBridge.m: Had added new copyright date to touch a file.
        That's not needed any more, but the date should be updated anyway.

=== Safari-52 ===

2003-01-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3143418 - controller assert in WebStandardPanels _didStartLoadingURL
        - fixed 3141212 - crash in kjs garbage collection (contextimp mark)

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge startLoadingResource:withURL:]): If the data source
        doesn't have a controller, then block the load.

2003-01-15  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed problem where Content-Type was going into WebCore with suffixes like "charset"

        * WebView.subproj/WebDataSourcePrivate.m: (-[WebDataSource _commitIfReady:]):
        Pass in contentType from the response, rather than the "Content-Type" header.
        Also pass in the refresh header separately.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for above change.

2003-01-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin, Dave and Trey, and given the seal of approval by Don.

        Use new safer file removal call that does not handle directories.

        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler cleanUpAfterFailure]): Use
        _web_removeFileOnlyAtPath:
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream dealloc]): Use _web_removeFileOnlyAtPath:
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): Use _web_removeFileOnlyAtPath:

2003-01-14  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]):
        Fixed uninitialized variable warning so builds work again.

        * WebView.subproj/WebDataSourcePrivate.m: (+[WebDataSource _repTypes]): Added "application/xml".
        * WebView.subproj/WebViewPrivate.m: (+[WebView _viewTypes]): Added "application/xml".

        * English.lproj/Localizable.strings: Regenerated.
        * English.lproj/StringsNotToBeLocalized.txt: Updated for above change.

2003-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Trey, John, and Maciej, and given the seal of approval by Don.

        - fixed 3143317 -- plug-in supplied URLs cause correspondingly named files in /tmp to be deleted
        - fixed 3143330 -- plug-in supplied URLs can overwrite files used in other windows by same plug-in

        * Plugins.subproj/WebBaseNetscapePluginStream.h: Make path be a char * rather than an NSString.
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream dealloc]): Use unlink() to delete the temporary file we made.
        Since we created the file, we know it doesn't have any fancy stuff like a resource fork.
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): Create the file with mkstemp instead of
        trying to come up with our own filename. This eliminates the need to delete an old file (because we
        are guaranteed the file is new) and also mkstemp opens the file for us, so we just need to write
        the contents.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for above changes.
        
        - unrelated change to help with other bug analysis
        
        * WebView.subproj/WebBaseResourceHandleDelegate.m: Added assertions.

2003-01-12  Chris Blumenberg  <cblu@apple.com>

        Fix for checking and creating proper download filenames.

        Reviewed by mjs, kocienda, trey.

        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebControllerPolicyDelegate.h: changes for renamed savePathForResponse:andRequest: method
        * WebView.subproj/WebDefaultPolicyDelegate.m: changes for renamed savePathForResponse:andRequest: method
        (-[WebDefaultPolicyDelegate savePathForResponse:andRequest:]): renamed 
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): changes for renamed savePathForResponse:andRequest: method

2003-01-12  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3144882 -- pretend to be WinIE for abcnews.com

        * WebView.subproj/WebControllerPrivate.h: Add an enum, UserAgentStringType, with values
        Safari, MacIE, and WinIE. Also add NumUserAgentStringTypes and turn the userAgent and
        userAgentWhenPretendingToBeMacIE strings into an array indexed by type.

        * WebView.subproj/WebController.m:
        (-[WebController setApplicationNameForUserAgent:]): Use a loop to discard the user agent
        strings, since we have an array now.
        (-[WebController userAgentForURL:]): Change user agent algorithm to check two strings rather
        than once against the spoof table, allowing two dots in the "domain name", which is needed
        for "abcnews.go.com". Get a user agent string type from the table rather than just a boolean
        "pretend to be MacIE". Store a string per type rather than one for normalcy and one for MacIE.
        Add a case for WinIE to the user agent computations.

        * English.lproj/StringsNotToBeLocalized.txt: Update for change above.

        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate dealloc]): Use a loop to discard the user agent strings, since we have
        an array now.
        (-[WebController _defaultsDidChange]): Ditto.

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Add a UserAgentStringType field to the struct.
        Add MacIE to each existing table entry, and add a new one that says WinIE for abcnews.go.com.

        * Makefile.am: Pass "-F ,0" to gperf so that we don't get warnings compiling empty entries
        in the hash table.

        * WebView.subproj/WebUserAgentSpoofTable.c: Re-generated.
        
        - other changes
        
        * WebView.subproj/WebHTMLView.m: Removed some old, dead, #if 0'd code.

2003-01-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3144479 -- put TITLE from links in status bar

        * WebKit.exp: Add _WebElementLinkTitleKey and also sort this file.

        * WebCoreSupport.subproj/WebImageRenderer.m: Need to touch a file to get the above
        to have any effect, so update the copyright date here.

2003-01-09  Darin Adler  <darin@apple.com>

        * WebKit.pbproj/project.pbxproj: Add the year 2003, remove CFBundleIconFile,
        bump marketing version to 0.8.1 and version to 52u to keep up with the branch,
        remove CFHumanReadableCopyright, remove NSPrincipalClass.

        * English.lproj/InfoPlist.strings: Updated to match above changes.

2003-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2003-01-09  Richard Williamson   <rjw@apple.com>

        Fixed 3143361.  This was a regression introduced with some image
        rendering optimizations.  Don't bypass the tiling code path if
        the image needs to be rendered out-of-phase.
        
        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer tileInRect:fromPoint:]):

2003-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - second pass on 3143332 - we still need a test case to be sure this is right

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]):
        Check for "/". Also report the failure instead of just hanging on forever.

2003-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Richard.
        
        - fixed 3143332 -- if path returned is empty string (or "." or "..") it will trash the /tmp symlink

        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]):
        Check for empty string, ".", and "..", and don't create files by those names.

2003-01-09  Trey Matteson  <trey@apple.com>

        3143294 - need short-term bulletproofing of download code against bad filenames

        We protect against a download location that is not an absolute path.

        Reviewed by Darin

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        Bail on download if we don't have a abs path to write to.

2003-01-08  Trey Matteson  <trey@apple.com>

        3142201 - home directory nuked during power download session

        We add checks for various error cases that could combine to cause this problem.  While we
        never got a reproducible case, we are confident that this is the only file removal done
        in the download code, and its ability to wreak havoc has been clipped.
        Reviewed by Richard.

        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler cleanUpAfterFailure]):  Only nuke the partial download if in fact we created
        a new download file.  Never nuke a directory.
        (-[WebDownloadHandler createFileIfNecessary]):  Don't add "." to the foo-1 filenames we generate
        if the original filename doesn't have any extension.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient continueAfterContentPolicy:response:]):
        If the policyDelegate gives us a nil filename, just stop the whole load, instead of trying to
        overwrite the user's home directory.

2003-01-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3111432 - Support OBJECT tags with type text/plain or text/html

        Reviewed by dave.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge frameRequiredForMIMEType:]): added, returns YES for non-plug-in views

2003-01-08  Chris Blumenberg  <cblu@apple.com>

        FIXED: 3128098 - flash performance weak!!!

        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m: Don't throttle plug-in when in an active window.

2003-01-03  Richard Williamson   <rjw@apple.com>

        Fixed 3139129.  Added application/xhtml+xml to list of supported type.

        Reviewed by gramps.

        * WebView.subproj/WebDataSourcePrivate.m:
        (+[WebDataSource _repTypes]):
        * WebView.subproj/WebViewPrivate.m:
        (+[WebView _viewTypes]):

2003-01-03  Richard Williamson   <rjw@apple.com>

        Support for fixes to 3138743, 3138678.  Added
        isFontFixedPitch used to determine if font is fixed
        pitch.  Makes use of appkit private _isFakeFixedPitch
        (detects courier and monoca).  Updated our fakey test
        to use the appkit's version.
        
        Reviewed by darin.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory isFontFixedPitch:]):

2003-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed leak of WebIconLoader observed using leaks tool

        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]): Tell the icon loader to stop loading.
        Add a FIXME asking why we had to do this to fix the leak.
        (-[WebDataSource _loadIcon]): Add an assertion.

2003-01-03  Richard Williamson   <rjw@apple.com>

        Fix to 3131226.  Don't force a layout when the document view is set 
        on the page's scrollview.  A layout would occur indirectly as a result
        of reflectScrolledClipView: being called when the document view
        was set.  The khtmlpart/khtmlview/WebHTMLView would be out of sync
        at this point and a layout would have unintended and incorrect
        side effects.
        
        Reviewed by Darin (and tested by John).

        * WebView.subproj/WebDynamicScrollBarsView.h:
        * WebView.subproj/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):
        * WebView.subproj/WebViewPrivate.m:
        (-[WebView _setDocumentView:]):

=== Alexander-48 ===

2003-01-02  Richard Williamson   <rjw@apple.com>

        Increase the minimum font size to 9pt.  This bounds the lower
        size of the sizes array used for named sizes.  Net effect is
        to increase xx-small from 8pt to 9pt.  xx-small is used by
        www.microsoft.com.
                
        Reviewed by hyatt.

        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences load]):

2003-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - at Scott and Don's request, roll out small text anti-aliasing cutoff

        Turns out this makes small text look worse, not better. We're not going to respect
        this setting, and in Panther AppKit will almost certainly be changed not to either.

        * WebCoreSupport.subproj/WebTextRenderer.m: Rolled out yesterday's change using CVS.

2003-01-02  Darin Adler  <darin@apple.com>

        Reviewed by John and Don.

        - fixed 3137661 -- REGRESSION: autoscroll selection is broken

        The new logic in WebCore is slightly pickier, and can't abide a mouse-moved event
        coming in during a drag. Unfortunately, we were sending a fake mouse-moved event
        during a drag, so lets not do that.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView mouseDown:]): Cancel any scheduled fake mouse-moved event.
        (-[WebHTMLView mouseUp:]): Send a fake mouse-moved event because we didn't update during the drag.

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebHTMLView _frameOrBoundsChanged]):
        Don't schedule a fake mouse-moved event if the mouse is down, because that means we are in the
        middle of a drag.

2003-01-02  Darin Adler  <darin@apple.com>

        Reviewed by John and Ken.

        - fixed 3135548 -- exception in Internet Explorer bookmark import code at first startup

        * Bookmarks.subproj/WebBookmarkImporter.m:
        (_breakStringIntoLines): Break lines before a <DT> or </DL>.
        (_HREFTextFromSpec): Rewrite to simplify, search in a case-insensitive manner.
        (-[WebBookmarkImporter initWithPath:]): Change prefix checks to be case-insensitive.
        Don't discard folders altogether if the name can't be parsed as that would mess up
        nesting w.r.t the next </DL>. Make the </DL> handling robust so we misparse, but don't
        crash the whole application by raising an exception.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for this change and recent changes.

2003-01-01  Richard Williamson   <rjw@apple.com>

        Obey the font smoothing size preference (3137618).
        
        Reviewed by Don and Darin.

        * WebCoreSupport.subproj/WebTextRenderer.m:

2002-12-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3130831 - HOMEPAGE: JavaScript that tries to intercept onmousedown fails, image gets dragged instead
        - fixed 3125554 - while dragging to select text in a nested frame, you can start dragging a link or image

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge handleMouseDragged:]): New method; call through the WebHTMLView.
        (-[WebBridge mayStartDragWithMouseDown:]): Likewise.
        (-[WebBridge handleAutoscrollForMouseDragged:]): Likewise.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView mouseDragged:]): Instead of doing drag handling
        here, just pass the event to WebCore.
        (-[WebHTMLView draggedImage:endedAt:operation:]): Send a fake
        mousemove event instead of sending the current event (likely a
        mouse up as if it were a mouse move).
        * WebView.subproj/WebHTMLViewPrivate.h:
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLViewPrivate dealloc]): Release drag element if any.
        (-[WebHTMLView _dragImageForElement:]): New method. Split out the
        code to make the special drag image for links.
        (-[WebHTMLView _handleMouseDragged:]): Move all the drag handling
        here. This method will get called only if WebCore hasn't blocked
        default drag handling.
        (-[WebHTMLView _handleAutoscrollForMouseDragged:]): Do
        autoscroll. Autoscroll is still lame, we need a timer.
        (-[WebHTMLView _mayStartDragWithMouseDown:]): Determine if the element
        is a link or image and so may be dragged; remember the drag element.

2003-01-01  Richard Williamson   <rjw@apple.com>

        Correct fix for 3137430 that doesn't always effectively disable
        the cache.
        
        Reviewed by kocienda.

        * History.subproj/WebHistoryItem.m:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:request:]):

2003-01-01  Richard Williamson   <rjw@apple.com>

        Don't reset the cookie policy URL if it has already been set.  Fixes to 3109590.
        
        Reviewed by Maciej.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):

2003-01-01  Richard Williamson   <rjw@apple.com>

        Don't attempt to restore page from page cache if the cache
        doesn't contain valid page state.  This may happen after a
        redirect.  Fixes 3137430.
        
        Reviewed by kocienda.

        * History.subproj/WebHistoryItem.m:

2002-12-31  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - fixed 3137287 -- REGRESSION: Java applets don't work when you go back to them (Java 1.4.1 plug-in)

        By attaching the plug-in controller to the frame, we run into trouble.
        It really needs to be attached to the data source, which has the right lifetime
        and is kept around in the page cache.

        * Plugins.subproj/WebPluginController.h: Keep a reference to a data source, not a frame.
        Add a new _started variable. Rename addPluginView: to addPlugin:, get rid of didAddPluginView:,
        replace destroyAllPlugins with dataSourceWillBeDeallocated, add startAllPlugins and stopAllPlugins.
        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController initWithDataSource:]): Store a data source reference, not a frame reference.
        Don't bother registering for the window will close notification, WebHTMLView handles that fine.
        (-[WebPluginController startAllPlugins]): Do nothing if they are already started, call pluginStart on each otherwise.
        (-[WebPluginController stopAllPlugins]): Do nothing if they are not started, call pluginStop on each otherwise.
        (-[WebPluginController addPlugin:]): Initialize the plugin if it's not already in our list. Also start
        it if we are in "started" mode.
        (-[WebPluginController dataSourceWillBeDeallocated]): Stop all the plugins, then destroy them.
        Also nil out the fields of the object. This is always called before the controller is released so we
        don't need to override dealloc.
        (-[WebPluginController showURL:inFrame:]): Added error checking and changed now that we start with a data source.
        (-[WebPluginController showStatus:]): Ditto.

        * WebCoreSupport.subproj/WebBridge.m: (-[WebBridge pluginViewWithPackage:attributes:baseURL:]):
        Use the data source, not the view. Don't add the plugin here, wait until we are ready to start.

        * WebView.subproj/WebDataSourcePrivate.h: Store a pointer to the plug-in controller here.
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSourcePrivate dealloc]): Tell the plug-in controller to go away.
        (-[WebDataSource _makeHandleDelegates:deferCallbacks:]): Remove unused empty method.
        (-[WebDataSource _pluginController]): Create a plug-in controller if needed.

        * WebView.subproj/WebFramePrivate.h: Remove plug-in controller code.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFramePrivate dealloc]): Remove plug-in controller code.
        (-[WebFrame _detachFromParent]): Remove plug-in controller code.
        (-[WebFrame _transitionToCommitted:]): Remove plug-in controller code.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView viewWillMoveToWindow:]): Stop plug-ins when view moves out of a window.
        This includes the case when the window is being destroyed.
        (-[WebHTMLView viewDidMoveToWindow]): Start plug-ins when view moves into a window.
        (-[WebHTMLView addSubview:]): Add plug-ins to the controller as they are added to us.

        * WebView.subproj/WebController.m: Added now-needed include due to header change.
        * WebView.subproj/WebDefaultContextMenuDelegate.m: Ditto.

=== Alexander-47 ===

2002-12-30  Darin Adler  <darin@apple.com>

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2002-12-30  Trey Matteson  <trey@apple.com>

        3137110 - REGRESSION: calls from 2nd and subsequent instances of Java 1.4.1 plug-in seem to be ignored

        We had previously made changes to "numb" a plugin controller after its frame
        was tossed or changed content.  We now finish the job by making sure a new
        controller is created when we go to a new page with plugins.  To so this we
        release the old controller whenever we flush the plugins from a page.

        Reviewed by Maciej.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _detachFromParent]):  Call newly factored code.
        (-[WebFrame _transitionToCommitted:]):  Call newly factored code.
        (-[WebFrame _destroyPluginController]):  New method to tear down plugins.

2002-12-30  Trey Matteson  <trey@apple.com>

        3135025 - Assertion failure in _transitionToCommitted on espn nba scoreboard

        For blank pages we decided that there would be no b/f entry.  This means that
        subframes within such pages (created via doc.write()), should not try to make
        WebHistoryItems, since they have no parent items to attach them to.

        Reviewed by Darin.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):  Don't make a history item for a subframe
        it the parent frame has no item.

2002-12-30  Trey Matteson  <trey@apple.com>

        3135779 - REGRESSION: reproducible assertion failure, going back from ~orubin to the main spies.com page        3136218 - REGRESSION: Assertion failure in _restoreScrollPosition running browser buster
        Both were caused by subtle interactions between new code for short-circuiting loading of
        blank pages, and the WebHistoryItem manipulations we do for b/f and reload of child frames.

        Reviewed by Maciej

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadURL:intoChild:]):  Setup provisional or current item before jumping into
        the real work of loading the URL.
        (-[WebFrame _restoreScrollPosition]):  Tweaked to make the assertion message clearer.

2002-12-30  Darin Adler  <darin@apple.com>

        Reviewed by Don and Ken.

        - fixed 3136797 -- crash when Adobe SVG Viewer plug-in puts up modal dialog

        * Plugins.subproj/WebBaseNetscapePluginView.h: Add inSetWindow boolean.
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): Don't send any events to a plug-in while it's
        inside NPP_SetWindow. We don't want to implement more general reentrancy protection, because
        it could cause trouble for plugins that can handle it correctly, but it's unlikely that any
        legitimate use would require reentrant calls while inside NPP_SetWindow, and that's the case
        that crashes for the SVG viewer plug-in when it presents its registration dialog.
        (-[WebBaseNetscapePluginView setWindow]): Set boolean.

2002-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - fixed 3103287 -- body of page not rendered (page uses JavaScript trick to be both a frameset and a frame)

        Our self-reference checks prevented this page from working.
        I just removed the WebKit one, since it was really just working around a problem with the WebCore
        one that I fixed (didn't ignore #xxx suffixes).

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createChildFrameNamed:withURL:renderPart:allowsScrolling:marginWidth:marginHeight:]):
        Remove self-reference check.

2002-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - fixed 3136801 -- scrolling a page that contains a QuickTime movie leaves garbage behind

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView tellQuickTimeToChill]): Added. Calls a QuickDraw SPI
        CallDrawingNotifications to let QuickTime know it should take a nature break.
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]): Call tellQuickTimeToChill.
        (-[WebBaseNetscapePluginView viewHasMoved:]): Call tellQuickTimeToChill.

2002-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - follow-on to my fix for 3125877 that fixes a crash I observed when a plug-in fails to NPP_New
        
        I filed bug 3136870 about the fact that we don't do a good job reporting the error.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): Return quietly if this is called when
        the plug-in is not started rather than asserting (and doing bad things on Deployment).
        (-[WebBaseNetscapePluginView setWindow]): Ditto.
        (-[WebBaseNetscapePluginView viewHasMoved:]): Just call setWindow since it now checks isStarted.

2002-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - fixed 3120630 -- spacebar scrolls the page as well as pausing the QuickTime movie

        Imitate Mozilla and OmniWeb by not propagating keyboard events after passing them to
        plug-ins regardless of what the plug-in returns, rather than imitating MacIE, which
        looks at the return value from NPP_HandleEvent.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView keyUp:]): Remove call to super, add comment.
        (-[WebBaseNetscapePluginView keyDown:]): Ditto.

2002-12-29  Darin Adler  <darin@apple.com>

        Reviewed by Ken and Don.

        - fixed 3136120 -- much content missing at www.olympic.org

        This site gives modern CSS to "Internet Explorer" or "Netscape 6". Since we are neither of
        those, we need to pretend to be one or the other. So we add olympic.org to our MacIE spoofing list.

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Add olympic.org to the list of pages that give us better
        CSS if we claim to be Internet Explorer.
        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.

=== Alexander-46 ===

2002-12-28  Ken Kocienda  <kocienda@apple.com>

         Reviewed by Gramps and Richard

         Fix for this bug:

         Radar 3112233 (400 response when attaching files at mail.yahoo.com)

         I added the MIMETypeForPath method which accesses the WebFoundation mime
         file map we maintain. KHTML can now access this map by using the bridge.

         * WebCoreSupport.subproj/WebBridge.m:
         (-[WebBridge MIMETypeForPath:])

2002-12-28  Darin Adler  <darin@apple.com>

        Reviewed by Gramps and Ken
        Checked in by Ken

        - fixed 3125877 -- RealPlayer plug-in doesn't work in Safari

        * Plugins.subproj/WebBaseNetscapePluginView.h: Remove some methods that don't have
        any need to be public, getCarbonEvent:, sendEvent:, sendUpdateEvent, setUpWindowAndPort.
        Make setWindow public.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView saveAndSetPortStateForUpdate:]): Added. This replaces the
        old setUpWindowAndPort. Besides setting up the port and the window, it also sets up the
        port's origin, clip, visible, and update regions properly, and sets the current port.
        In the case of an update event, we have extra work to do, which was formerly done in drawRect:.
        (-[WebBaseNetscapePluginView saveAndSetPortState]): Calls saveAndSetPortStateForUpdate:NO.
        (-[WebBaseNetscapePluginView restorePortState:]): Undoes the port state changes done by the
        saveAndSetPortState calls.
        (-[WebBaseNetscapePluginView sendEvent:]): Call saveAndSetPortStateForUpdate: before sending
        the event to the plug-in. This is the core of fixing the bug. We need to have the port set
        up properly. Specifically, RealPlayer depended on the port's origin being set and the update
        region being set. Also added a "draw green" debugging aid to builds without NDEBUG set.
        (-[WebBaseNetscapePluginView sendNullEvent]): Update text of a FIXME.
        (-[WebBaseNetscapePluginView setWindow]): Call the new saveAndSetPortState method instead of
        the old setUpWindowAndPort method.
        (-[WebBaseNetscapePluginView drawRect:]): Remove bug workarounds that are now inside the
        saveAndSetPortStateForUpdate: method.
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]): Add missing call to super.
        (-[WebBaseNetscapePluginView windowBecameKey:]): Don't send an update event to the plugin directly.
        Instead mark this view as needing display so we'll get a drawRect later.
        (-[WebBaseNetscapePluginView windowResignedKey:]): Ditto.
        (-[WebBaseNetscapePluginView requestWithURLCString:]): Corrected handling of URLs. Absolute URLs
        are handled by the relative URL function, so there's no need to do an explicit check. Also use
        requestWithURL instead of doing a three-method dance that does the same thing.
        (-[WebBaseNetscapePluginView invalidateRect:]): Use setNeedsDisplayInRect: to schedule redrawing
        rather than forcing an update right away by doing a sendUpdateEvent directly.
        (-[WebBaseNetscapePluginView invalidateRegion:]): Ditto.
        (-[WebBaseNetscapePluginView forceRedraw]): Use setNeedsDisplay: and displayIfNeeded to do the
        drawing through the view system instead of doing a sendUpdateEvent directly.

        * Plugins.subproj/WebNetscapePluginDocumentView.m: (-[WebNetscapePluginDocumentView layout]):
        Do a setWindow rather than a setUpWindowAndPort when the size of the view changes. This matches
        what other browsers do and extends the bug fix for the Java plug-in to the resize case as well as
        the scrolling case.

        * Plugins.subproj/WebNetscapePluginPackage.m: (-[WebNetscapePluginPackage initWithPath:]):
        Remove RealPlayer antibodies.

2002-12-27  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - fixed 3136206 -- Can't display images in Ambrosia Software image viewer

        WebKit wasn't creating the frames correctly when they weren't HTML.

        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _makeDocumentView]): Added. Calls the
        WebView to make the document view and then installs the new view, as WebHTMLView used to do.
        (-[WebFrame _transitionToCommitted:]): Call _makeDocumentView instead of calling WebView
        directly. These are all the calls to _makeDocumentViewForDataSource:.

        * WebView.subproj/WebViewPrivate.h: Add return value to _makeDocumentViewForDataSource:.
        * WebView.subproj/WebViewPrivate.m: (-[WebView _makeDocumentViewForDataSource:]):
        Return the newly-created view.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView setDataSource:]): Removed the code here
        since it's done by WebFrame now.

2002-12-25  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        - fixed 3133611 -- Java "ticker" applet renders badly when scrolling page

        * Plugins.subproj/WebBaseNetscapePluginView.m: (-[WebBaseNetscapePluginView viewHasMoved:]):
        Call setWindow so we make a call to the plugin each time it moves, rather than just adjusting
        the data structure we had passed to it earlier.

2002-12-24  Darin Adler  <darin@apple.com>

        Reviewed by Richard and Don.

        - fixed 3132192 -- HOMEPAGE: Quicktime plug in with AVI content brings Plug-ins not found panel

        * Plugins.subproj/WebPluginDatabase.m: (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]):
        Lower-case the key before searching for it. This is needed for both MIME types and extensions,
        since we want case insensitive comparison in both cases.

=== Alexander-45 ===

2002-12-23  Ken Kocienda  <kocienda@apple.com>

        Reviewed by Darin and Gramps

        Workaround for this bug:

        Radar 3134219 (MPEG-4 files don't work with the QuickTime plugin in Safari, 
        work fine in Mozilla, IE)

        For beta 1, when getting the MIME information for the QuickTime plugin, we directly 
        insert the information to handle MP4.

        In the future, we will use the additional plugin entry points to dynamically load 
        this information from the plugin itself.

        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage getMIMEInformation])

2002-12-23  Darin Adler  <darin@apple.com>

        Reviewed by John and Don.

        - fixed 3134282 -- REGRESSION: text encoding setting reverts when you go to a new location

        * WebView.subproj/WebFrame.m: (-[WebFrame loadRequest:]): Propagate an override encoding if there
        was an existing data source and it had an override encoding.
        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _loadRequest:triggeringAction:loadType:]): Ditto.

=== Alexander-44 ===

2002-12-20  Trey Matteson  <trey@apple.com>

        Do not add empty URLs to the back forward list.

        Reviewed by Richard, Darin

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):

2002-12-20  Trey Matteson  <trey@apple.com>

        3133829 - crash leaving page with a running applet

        This fixes some holes in how we teardown plugins.  An additional fix is expected
        from Mike Hay to finish the issue. (3133981)

        Reviewed by Richard

        * Plugins.subproj/WebPluginController.m:
        (-[WebPluginController destroyAllPlugins]):  frame=nil, so we don't do any more
        messaging back to WK after this step.
        (-[WebPluginController showURL:inFrame:]):  bail if !frame
        (-[WebPluginController showStatus:]):  bail if !frame
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _detachFromParent]):  destroy plugins here.  We were only doing it
        in the non-frame case.

=== Alexander-43 ===

2002-12-20  Trey Matteson  <trey@apple.com>

        3131841 - crash when switching encodings on a page with frames

        Reviewed by rjw

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):  Create a docView in the LoadStale case, like
        every other kind of load does.

2002-12-20  Richard Williamson   <rjw@apple.com>

        Fixed 3133261.  This fix really has two parts.  This first part
        is here in WebTextRenderer.  The second part adds some width
        caching to RenderText.  I was using a stack allocated array,
        this would blow out the stack for large strings.

        Reviewed by john.

        * WebCoreSupport.subproj/WebTextRenderer.m:

2002-12-20  Trey Matteson  <trey@apple.com>

        We now build with symbols the B&I.  Deployment builds are without symbols,
        so it is easy to generate a non-huge app as a one-off.

        Reviewed by Darin

        * WebKit.pbproj/project.pbxproj:

=== Alexander-42 ===

2002-12-19  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for 3124949 -- Alexander recreates the 
        default set of bookmarks every time a separate app copy is launched

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmarkGroup.h:
        new _tag ivar and -tag method.

        * Bookmarks.subproj/WebBookmarkGroup.m:
        (-[WebBookmarkGroup dealloc]):
        release _tag
        (-[WebBookmarkGroup tag]):
        return _tag
        (-[WebBookmarkGroup _loadBookmarkGroupGuts]):
        read _tag from the dictionary in the file (or leave it at
        nil if there's no value in the file).

        * English.lproj/StringsNotToBeLocalized.txt:
        kept this file up to date

2002-12-19  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - corrected the name of a method that was leading to trouble elsewhere

        * WebView.subproj/WebDataSource.h: Change fileType to fileExtension for clarity.
        * WebView.subproj/WebDataSource.m: (-[WebDataSource fileExtension]): Ditto.

=== Alexander-41 ===

2002-12-19  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - probably fixed 3129395 -- Reproducible crash when running a javascript at www.scenespot.org

        * WebCoreSupport.subproj/WebViewFactory.m:
        (-[WebViewFactory runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:]):
        Close the window. Before we relied on it being released which was bad. But it's not clear this
        actually was the cause of the bug.

2002-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 31323455 -- REGRESSION: Crash in plugin code closing popup window on lordoftherings.net

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView sendEvent:]): Added an assert.
        (-[WebBaseNetscapePluginView setWindow]): Added an assert.
        (-[WebBaseNetscapePluginView stop]): Cancel perform requests, now that we are using them for
        URL navigation.
        (-[WebBaseNetscapePluginView frameStateChanged:]): Only notify if the plugin is still running.
        (-[WebBaseNetscapePluginView loadPluginRequest:]): Added. Does the actual load at idle time.
        Also fixed to only notify if plugin is loaded. Added a number of FIXMEs for other problems here.
        Also send JavaScript to the appropriate frame, not always the top level.
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]): Use loadPluginRequest:
        to do the request after a delay. Also remove the special cases for special frame names; they
        were trying to avoid calling a plugin that has gone away, but we do that a better way now.
        (-[WebBaseNetscapePluginView getURLNotify:target:notifyData:]): Added logging.
        (-[WebBaseNetscapePluginView status:]): Use Windows Latin-1 rather than MacRoman for messages.
        I guess we should test later to find out which is used by MacIE and conform to that, but for now
        this seems like a better default.
        (-[WebPluginRequest initWithRequest:frame:notifyData:]): Added.
        (-[WebPluginRequest dealloc]): Added.
        (-[WebPluginRequest request]): Added.
        (-[WebPluginRequest webFrame]): Added.
        (-[WebPluginRequest notifyData]): Added.

2002-12-18  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed fix for 3132056 -- Supply Finder bits for decoded BinHex files

        * Downloads.subproj/WebBinHexDecoder.m: (-[WebBinHexDecoder decodeHeader]):
        Mask off fewer Finder flag bits. Use the same mask as for MacBinary, in fact.

2002-12-18  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3127490 -- pages w/frames sometimes show up blank

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView drawRect:]):
        Updated the optimization where we draw the entire view if we did a layout
        so that it works properly for the case where the clip is narrower because of
        the parent WebHTMLView.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

=== Alexander-40 ===

2002-12-18  Trey Matteson  <trey@apple.com>

        3098388 - Pressing the back button goes back two levels at allmusic.com

        I rewrote the logic we use to decide whether a given redirect should be
        treated as part of the previous navigation.  We make use of WebCore's
        lockHistory setting, the delay time and the frame state.

        Reviewed by Darin.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge reportClientRedirectToURL:delay:fireDate:lockHistory:]):
        Pass lockHistory up to the frame.
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _clientRedirectedTo:delay:fireDate:lockHistory:]):
        New logic.  No quick summary, best to read the code.

2002-12-18  Chris Blumenberg  <cblu@apple.com>

        Reject the RealPlayer plug-in because we know it doesn't work.

        Reviewed by sullivan.

        * English.lproj/StringsNotToBeLocalized.txt:
        * Plugins.subproj/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage initWithPath:]): reject the RealPlayer plug-in

2002-12-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3131171 - Change Alex versions to satisfy both marketing and B&I requirements
        * English.lproj/InfoPlist.strings:

2002-12-18  Richard Williamson   <rjw@apple.com>

        Fixed 3129951.  Don't allow pages that are stopping to enter the page cache.
        (Fixed yesterday, forgot to checkin.)
         
        Reviewed by trey.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setState:]):

2002-12-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Trey.

        - fixed 3124933 - abcnews.com leads to empty window with sheet complaining about javascript: URL
        - fixed 3091248 - picture does not show up in window from epinions
        - made "about:blank" load synchronously, which I'm told is required by some sites.

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge createWindowWithURL:frameName:]): If the URL is nil
        or empty, pass a nil request - otherwise WebBrowser will try to
        load it, resulting in an extra back/forward list entry.
        (-[WebBridge loadEmptyDocumentSynchronously]): Tell the frame to
        load a request with an empty URL - this will cause a synchronous
        load of an empty html document
        * WebView.subproj/WebBaseResourceHandleDelegate.h:
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate loadWithRequest:]): Split off
        startLoading: part of method to allow behavior to be subclassed.
        (-[WebBaseResourceHandleDelegate startLoading:]): 
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _commitIfReady:]): Lie and claim the URL is
        "about:blank" if it's really empty to avoid confusing WebCore.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]): Don't put the empty URL in
        global history.
        (-[WebFrame
        _checkNavigationPolicyForRequest:dataSource:andCall:withSelector:]):
        Don't check policy if URL is empty - this is likely to confuse the
        client and we know what the right behavior here is.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient startLoading:]): Try to load
        "about:blank" and the empty URL synchronously, bypassing
        WebFoundation.
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Ditto.
        (-[WebMainResourceClient setDefersCallbacks:]): Ditto.
        * English.lproj/StringsNotToBeLocalized.txt: Updated.

2002-12-18  Chris Blumenberg  <cblu@apple.com>

        Fixed: 2862385 - need to pass browser's user agent and version to plug-ins
        Added some more error checking to the plug-in code

        Reviewed by trey.

        * Plugins.subproj/WebBaseNetscapePluginView.h:
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (+[WebBaseNetscapePluginView setCurrentPluginView:]): new, sets a global variable for the current plug-in
        (+[WebBaseNetscapePluginView currentPluginView]): new, returns the current plug-in
        (-[WebBaseNetscapePluginView start]): check if NPP_New fails, return NO if it does, set the current plug-in view. Currently, this is the only place we need to do this.
        (-[WebBaseNetscapePluginView userAgent]): made instance-specific because it depends on the plug-in view's WebController
        * Plugins.subproj/WebBaseNetscapePluginViewPrivate.h:
        * Plugins.subproj/WebNetscapePluginEmbeddedView.m:
        (-[WebNetscapePluginEmbeddedView viewDidMoveToWindow]): don't start the stream is start fails
        * Plugins.subproj/npapi.m: 
        (NPN_MemAlloc): tweak
        (NPN_RequestRead): tweak
        (pluginViewForInstance): returns the instance's plug-in view if it has one, if not, return the current plug-in view
        (NPN_GetURLNotify): get the instance from pluginViewForInstance  
        (NPN_GetURL):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_NewStream):
        (NPN_Write):
        (NPN_DestroyStream):
        (NPN_UserAgent):
        (NPN_Status):
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):
        (NPN_GetValue):
        (NPN_SetValue):
        (NPN_GetJavaEnv):
        (NPN_GetJavaPeer):

2002-12-18  Richard Williamson   <rjw@apple.com>

        Fixed 3109590.  We now set the cookie policy URL to a frame's URL if the
        contents of the frame changes as a result of user action.  The site mentioned
        is this bug branded a service by wrapping it in their own frameset.  That frameset
        had a different domain than the service, so our cookie policy prevented cookies
        from being set.
        
        Reviewed by trey.

        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:fromItem:withLoadType:]):
        (-[WebFrame _addExtraFieldsToRequest:alwaysFromRequest:]):
        (-[WebFrame _loadURL:loadType:triggeringEvent:isFormSubmission:]):
        (-[WebFrame _postWithURL:data:contentType:triggeringEvent:]):

2002-12-18  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3131714 - System becomes unresponsive while downloading

        While downloading a file, Safari and the Finder take up 30%-40% of the CPU each. This is happening because for every chunk of data we write to disk, we call -[NSWorkspace noteFileSystemChanged:]. noteFileSystemChanged is inefficient. It calls 2 AppleEven









ts each with 60 timeouts. The event also cause the Finder to do a lot of work.

        We should:
        - Send 1 AppleEvent ourselves with no timeout since we don't care about the reply
        - Call the notification/event less often. The only benefit of sending the event for every chunk written is that the file size updates in the Finder. Not worth the performance impact.

        Reviewed by kocienda.

        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler cleanUpAfterFailure]): call _web_noteFileChangedAtPath
        (-[WebDownloadHandler createFileIfNecessary]): call _web_noteFileChangedAtPath
        (-[WebDownloadHandler writeDataForkData:resourceForkData:]): don't call noteFileSystemChanged
        (-[WebDownloadHandler finishedLoading]): call _web_noteFileChangedAtPath
        * Misc.subproj/WebNSWorkspaceExtras.h: Added.
        * Misc.subproj/WebNSWorkspaceExtras.m: Added.
        (-[NSWorkspace _web_noteFileChangedAtPath:]): Notifies the Finder (or any other app that cares) that we added, removed or changed the attributes of a file. This method is better than calling noteFileSystemChanged: because noteFileSystemChanged: se









nds 2 apple events both with a 60 second timeout. This method returns immediately.
        * WebKit.pbproj/project.pbxproj:

2002-12-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3098293 -- Shockwave plug-in doesn't work

        The problem is that the Shockwave plug-in depends on being able to do LMGetCurApRefNum
        and then do a PBGetFCBInfoSync on the result, and if it gets an error it will refuse
        to initialize.

        * Plugins.subproj/WebNetscapePluginPackage.m: (+[WebNetscapePluginPackage initialize]):
        Supply a bogus CurApRefNum. Do it only if CurApRefNum is -1, so we don't screw things
        up if we are used in a Carbon application.

2002-12-17  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        * WebKit.pbproj/project.pbxproj: Remove signature.
        * WebView.subproj/WebController.m: Turn off inlining so we can build even on the
        compiler that warns about static data in inline functions.

2002-12-17  John Sullivan  <sullivan@apple.com>

        - fixed 2895826 -- ICON: Need a "no plug-in" icon

        * Resources/nullplugin.tiff:
        new plug-in icon. Blue 3-D lego with question marks.

2002-12-17  Richard Williamson   <rjw@apple.com>

        Added support for Aki's 20% boost to line height.  This is
        done with a horrible hack and should be removed when 3129490
        is fixed.
        
        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:

=== Alexander-39 ===

=== Alexander-38 ===

2002-12-17  Richard Williamson   <rjw@apple.com>

        Fixed 3127932.  Added WebFrameLoadTypeReloadAllowingStaleData to cases that do not
        get cached in the b/f cache.
        
        Reviewed by trey.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setState:]):

2002-12-17  Richard Williamson   <rjw@apple.com>

        Fixed 3128794.  Use CG directy to get font metrics rather than the appkit.  The appkit
        has a bug (3129490) that sometimes causes line height to be 20% too large.
        
        Reviewed by hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer initWithFont:]):
        (-[WebTextRenderer ascent]):
        (-[WebTextRenderer descent]):
        (-[WebTextRenderer lineSpacing]):

2002-12-17  Trey Matteson  <trey@apple.com>

        Reworking the code to update the page icon led me to roll the WebIconDB API
        for URL to NSString.  In addition, the vestigial "Site" was removed.

        Everything below is renaming, except where noted.

        Reviewed by Darin

        * English.lproj/StringsNotToBeLocalized.txt:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem _retainIconInDatabase:]):
        (-[WebHistoryItem icon]):
        * Misc.subproj/WebIconDatabase.h:
        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase init]):
        (-[WebIconDatabase iconForURL:withSize:cache:]):  Use _web_isFileURL.
        (-[WebIconDatabase iconForURL:withSize:]):
        (-[WebIconDatabase retainIconForURL:]):
        (-[WebIconDatabase releaseIconForURL:]):
        (-[WebIconDatabase _iconDictionariesAreGood]):
        (-[WebIconDatabase _loadIconDictionaries]):
        (-[WebIconDatabase _updateFileDatabase]):
        (-[WebIconDatabase _iconForFileURL:withSize:]):  Cons up a NSURL to get the path.
        Test explicitly for .htm and .html suffixes.
        (-[WebIconDatabase _setIcon:forIconURL:]):
        (-[WebIconDatabase _setIconURL:forURL:]):
        (-[WebIconDatabase _releaseIconForIconURLString:]):
        (-[WebIconDatabase _retainFutureIconForURL:]):
        (-[WebIconDatabase _releaseFutureIconForURL:]):
        (-[WebIconDatabase _sendNotificationForURL:]):
        * Misc.subproj/WebIconDatabasePrivate.h:
        * Misc.subproj/WebIconLoader.m:
        (-[WebIconLoader handleDidFinishLoading:]):
        * WebKit.exp:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _updateIconDatabaseWithURL:]):
        (-[WebDataSource _loadIcon]):

2002-12-17  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3113073 - link on http://studio.adobe.com/explore/ redirects to not found page in Alex

        Reviewed by darin.

        * Misc.subproj/WebNSPasteboardExtras.m:
        (-[NSPasteboard _web_bestURL]): don't trim whitespace because _web_URLWithString does this for us
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView pluginURLFromCString:]): tweak

2002-12-17  John Sullivan  <sullivan@apple.com>

        - to help with performance of various bookmark operations,
        added a call that returns the internal array of children,
        to complement the safer call that returns a copy.

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmark.h:
        commented -children and new -rawChildren
        * Bookmarks.subproj/WebBookmark.m:
        (-[WebBookmark rawChildren]):
        new method, returns nil at this level.
        (-[WebBookmark contentMatches:]):
        use -rawChildren instead of -children

        * Bookmarks.subproj/WebBookmarkList.m:
        (-[WebBookmarkList rawChildren]):
        new method, returns internal array without copying

2002-12-16  Darin Adler  <darin@apple.com>

        Reviewed by Don and Maciej.

        * WebView.subproj/WebUserAgentSpoofTable.gperf: Added a couple of new domains to the list we
        spoof as Mac IE, and added comments.
        * WebView.subproj/WebUserAgentSpoofTable.c: Regenerated.

        * WebKit.pbproj/project.pbxproj: Set MACOSX_DEPLOYMENT_TARGET to 10.2

2002-12-16  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3129503 - Crash cancelling download after closing browser window that started download

        Reviewed by rjw.

        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _setLoading:]): Added comment about our tragic dependence on a non-retained reference to the controller.
        (-[WebDataSource _recursiveStopLoading]): Call webFrame before calling _stopLoading because we release the controller in _stopLoading and we depend on it in webFrame.

=== Alexander-37 ===

2002-12-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by no one but it's just a version bump.

        * WebKit.pbproj/project.pbxproj: Bump version to 37u3

2002-12-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3128858 -- Supply Finder bits for decoded BinHex files

        * Downloads.subproj/WebBinHexDecoder.h: Add a _finderFlags field.
        * Downloads.subproj/WebBinHexDecoder.m:
        (-[WebBinHexDecoder decodeHeader]): Decode Finder flags.
        (-[WebBinHexDecoder fileAttributes]): Put Finder flags in dictionary.

        * Downloads.subproj/WebMacBinaryDecoder.m: Tweaked things for no good reason.
        (It is good to always import your own header first as a check that it's self-sufficient).

        * WebKit.pbproj/project.pbxproj: Let Electron wipe the slate clean of pre-Electron iniquity.

2002-12-15  Chris Blumenberg  <cblu@apple.com>
        Fixed: 3094928 - Apply Finder bits to decoded downloads

        Reviewed by darin.

        * Downloads.subproj/WebDownloadHandler.m:
        (-[WebDownloadHandler createFileIfNecessary]): call _web_createFileAtPath:contents:attributes: so we set Finder bits
        * Downloads.subproj/WebMacBinaryDecoder.h:
        * Downloads.subproj/WebMacBinaryDecoder.m:
        (-[WebMacBinaryDecoder decodeData:dataForkData:resourceForkData:]): save Finder bits
        (-[WebMacBinaryDecoder fileAttributes]): return Finder bits

=== WebKit-37u2 ===

2002-12-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed likely B&I build problem.

        * WebKit.pbproj/project.pbxproj: Get at other frameworks in B&I
        build. Bump version to 37u2.

2002-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - implemented user-agent spoofing as described in bug 3044569

        * WebView.subproj/WebController.m: (-[WebController userAgentForURL:]):
        Find the suffix of the host name that contains exactly one dot, lower-case it,
        and look it up in the user-agent spoof table. For now, anything in the table
        pretends to be MacIE. Don't fret that this table is simple. We will complicate it
        as needed. The technique is flexible, even though it may not look it now.

        * WebView.subproj/WebControllerPrivate.h: Add userAgentWhenPretendingToBeMacIE field.
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate dealloc]): Release userAgentWhenPretendingToBeMacIE.
        (-[WebController _defaultsDidChange]): Release and nil userAgentWhenPretendingToBeMacIE.

        * Makefile.am: Added rules to build WebUserAgentSpoofTable.c using gperf.
        * WebView.subproj/WebUserAgentSpoofTable.c: Added. Generated file.
        * WebView.subproj/WebUserAgentSpoofTable.gperf: Added. Table 

        * English.lproj/StringsNotToBeLocalized.txt: Update for above changes.

        - fixed a crash I saw in a simplistic way

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebHTMLView _elementAtPoint:]):
        Don't assert if the webFrame is nil, just return a partial dictionary.

2002-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - fixed 3128260 -- REGRESSION: context menus in frames are always the generic page menu

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebHTMLView hitTest:]):
        Check the control key in the mouse down event. If it's down, then do no magic.

2002-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed 3128651 -- REGRESSION: Mouse wheeling is busted on frames pages

        * WebView.subproj/WebHTMLViewPrivate.m: (-[WebHTMLView hitTest:]):
        Only do the hitTest magic for left mouse downs; the rest of the clicks end up going
        to the correct view anyway, without our help. This makes this stop making trouble for
        the scroll wheel events.

2002-12-14  Don Melton  <gramps@apple.com>

        Fixed 3127173 -- REGRESSION: fboweb.com renders incorrectly

        Reviewed by darin

        * English.lproj/StringsNotToBeLocalized.txt:
        * WebView.subproj/WebController.m:
        (-[WebController userAgentForURL:]):

        Changed "PPC" in our user agent string to "PPC Mac OS X" in order to
        match Mozilla and make the silly server-side user agent string checking
        work at fboweb.com.  Actually, just "PPC " would work fine at
        fboweb.com.  Go figure.

2002-12-13  Darin Adler  <darin@apple.com>

        Reviewed by Don.

        * WebView.subproj/WebController.m: (-[WebController userAgentForURL:]):
        Add "(like Gecko)" string and change "WebKit" to "AppleWebKit".

        * English.lproj/StringsNotToBeLocalized.txt: Update for these changes.
        * Misc.subproj/WebUnicode.h: No need for & 0xFF since we cast to unsigned char.

2002-12-13  John Sullivan  <sullivan@apple.com>

        - WebKit part of fix for 3028061 -- visiting a bookmarked site
        that now has a site icon will not update bookmark's icon

        No longer store the icon in the WebHistoryItem, since there's no
        mechanism for keeping it fresh and telling interested clients
        when it changes. Instead, the latest icon is always returned from
        the icon database, and it's up to clients to get a fresh one when
        they notice that the icon for a URL has been updated.

        Reviewed by Darin

        * History.subproj/WebHistoryItem.h:
        remove _icon and _loadedIcon ivars

        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem dealloc]):
        don't release _icon
        (-[WebHistoryItem icon]):
        just return fresh icon from database, don't store
        (-[WebHistoryItem setURL:]):
        don't set _loadedIcon to NO

=== Alexander-37u1 ===

2002-12-13  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2002-12-13  Trey Matteson  <trey@apple.com>

        3108976 - assert _private provisionalItem in -[WebFrame(WebPrivate) _transitionToCommitted
        3108865 - frames not maintained going back at directory.apple.com

        Both bugs are fixed by the same small change.  We no longer try to inherit loadType
        across redirects.  Instead we just make sure the right thing happens in _transitionToCommitted:
        for redirects in the loadType=Standard case.

        3122721 - History stores both original and redirected sites

        Easy fix while in the neighborhood.  We just don't add to History when doing a redirect.

        Reviewed by rjw

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):  On redirect, update the URL of the frame's current
        item, not the current item in the b/f list.  Also do not add to history on redirect.
        (-[WebFrame _loadURL:loadType:triggeringEvent:isFormSubmission:]):  Cut out funny business
        that tried to guess when to inherit loadtype across redirects.

2002-12-13  Richard Williamson   <rjw@apple.com>

        Fixed 3127225.  Scale page cache based on available memory.
        Also added support for setting WebCore object cache size via
        a preference.
        Fixed 3126267.  Increase CG glyph cache size if font smoothing
        is turned on.
        
        Reviewed by gramps.

        * History.subproj/WebBackForwardList.m:
        (+[WebBackForwardList pageCacheSize]):
        * Misc.subproj/WebKitLogging.h:
        * Misc.subproj/WebKitLogging.m:
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge getObjectCacheSize]):
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (getAppDefaultValue):
        (getUserDefaultValue):
        (getLCDScaleParameters):
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences load]):
        (-[WebPreferences _pageCacheSize]):
        (-[WebPreferences _objectCacheSize]):
        * WebView.subproj/WebPreferencesPrivate.h:

2002-12-13  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3105486 - c|net news.com site seems to have lost its favicon again

        Reviewed by darin.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _updateFileDatabase]): Only save icons with a size of 16 x 16 since that's the only size we use.

2002-12-13  Chris Blumenberg  <cblu@apple.com>

        Catch NULL status strings passed to NPN_Status.
        Reviewed by darin.

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView status:]): check the incoming string before calling [NSString stringWithCString]

2002-12-12  Trey Matteson  <trey@apple.com>

        3117101 - PLT slows down as history fills up

        I saw a 3% sloth effect from a huge (100k) history.  This change cut that cost in half.
        I think we still have a marginally measurable cost for our worst practical case.

        Reviewed by rjw

        * History.subproj/WebHistoryPrivate.m:
        (-[WebHistoryPrivate insertEntry:atDateIndex:]):  Comment.
        (-[WebHistoryPrivate removeEntryForURLString:]):  Use removeIdentical
        instead of remove, since we don't need to do all the equals comparisons.

2002-12-12  Richard Williamson   <rjw@apple.com>

        Changes to fix 3116584.
        Reviewed by hyatt.
        
        Changes to support emptying the page cache from the
        "Empty Cache" menu.
        Reviewed by trey.

        * ChangeLog:
        * History.subproj/WebBackForwardList.h:
        * History.subproj/WebBackForwardList.m:
        (-[WebBackForwardList clearPageCache]):
        * History.subproj/WebHistoryItem.m:
        (+[WebHistoryItem _scheduleReleaseTimer]):
        (-[WebHistoryItem _scheduleRelease]):
        (+[WebHistoryItem _releasePageCache:]):
        (-[WebHistoryItem setHasPageCache:]):
        * WebCoreSupport.subproj/WebTextRenderer.m:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _opened]):

2002-12-12  Richard Williamson   <rjw@apple.com>

        Fixed 3119693.  Restore scroll position when going back
        to item in b/f cache.
        
        Reviewed by trey.

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _opened]):

=== Alexander-36 ===

2002-12-12  Richard Williamson   <rjw@apple.com>

        Change relating to 3083287.  This doesn't fix the problem but
        flips the geometry calcs to get most incremental images to draw
        correctly.  .mac now slideshows draw with the incorrect sliding 
        behavior while loading.
        
        3083287 has been moved to 0.9/1.
        
        Reviewed by darin.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):

2002-12-12  Trey Matteson  <trey@apple.com>

        Fixed 3094525 - Need to use SPI to fix flipped drag image problem

        We call the new SPI.  I also had to rework the dissolve steps to get it
        to non flip the image in Panther in millions (but leave the old code for
        the Jaguar case).

        Reviewed by cblu

        * Misc.subproj/WebNSImageExtras.m:
        (+[NSImage load]):  Call the SPI.
        (-[NSImage _web_dissolveToFraction:]):  Add new way of building the image for Panther.

2002-12-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed most likely cause of 3125565 -- 2% regression running the PLT for uncached loads
        
        Don't recompute the user agent when it doesn't change. It almost never changes.

        * WebView.subproj/WebController.m:
        (-[WebController initWithView:controllerSetName:]): Add observer so we know when defaults change.
        (-[WebController dealloc]): Remove observer.
        (-[WebController setApplicationNameForUserAgent:]): Clear out computed user agent to force it
        to be recomputed later.
        (-[WebController applicationNameForUserAgent]): Just retain since we copied when we stored it
        so we know it's not mutable.
        (-[WebController customUserAgent]): Ditto.
        (-[WebController userAgentForURL:]): Use the cached user agent if it's good. Otherwise compute
        and cache the user agent string. This means that we will almost never recompute it.

        * WebView.subproj/WebControllerPrivate.h: Add userAgent field to cache in.
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate dealloc]): Release userAgent.
        (-[WebController _defaultsDidChange]): Release and nil userAgent.

2002-12-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3125504 -- REGRESSION: Selection not working correctly for text area on http://glish.com/css/7.asp

        The problem is that the text area lost its first responder status because WebHTMLView took the click,
        and NSWindow wanted WebHTMLView to become first responder too.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView acceptsFirstResponder]):
        Don't allow the NSWindow to make this the first responder during the early part of mouseDown event
        handling. But do allow anyone else to make this the first responder, for example from keyboard events,
        or from calls back from WebCore once we begin mouse-down event handling.

2002-12-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej and Richard.

        - fixed reentrancy crash I ran into while debugging infinite recursion bugs

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _updateMouseoverWithFakeEvent]): Added. Does part of what _frameOrBoundsChanged did.
        (-[WebHTMLView _frameOrBoundsChanged]): Schedule the mouseover update to happen soon, rather than
        doing it right away. If we do it right away, we might reenter because sending a mouse moved event
        can result in another layout since mouse moved events are the same as mouse dragged events in KHTML.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView viewWillMoveToWindow:]): Cancel the scheduled mouseover update.

        * WebKit.pbproj/project.pbxproj: Electron uber alles.

2002-12-12  Richard Williamson   <rjw@apple.com>

        Fixed 3125585.  One click crasher option clicking on
        any link.  Added additional check to curtail overly
        zealous ASSERT.
        
        Reviewed by mjs.

        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _mainReceivedError:fromDataSource:complete:]):

2002-12-11  Richard Williamson   <rjw@apple.com>

        Fixed 3125425.  Just call super if view isn't in view heirarchy,
        rather than asserting.  The assert was firing because NSText 
        was trying to perform a background layout on an item view that
        was moved to the page cache.
        
        Reviewed by gramps.

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView visibleRect]):

2002-12-11  Richard Williamson   <rjw@apple.com>

        Fixed 3124121, 3124716 (and other dupes).  Regressions related to b/f crash.
        
        Reviewed by hyatt.

        * ChangeLog:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem _scheduleRelease]):
        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge saveDocumentToPageCache:]):
        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
        (-[WebImageRenderer drawClippedToValidInRect:fromRect:]):
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _setState:]):

2002-12-11  Richard Williamson   <rjw@apple.com>

        Fixed 3123375.  Provide SPI to release all pending page caches
        
        Reviewed by kocienda.

        * History.subproj/WebBackForwardList.m:
        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        * History.subproj/WebHistoryItemPrivate.h: Added.
        * WebCoreSupport.subproj/WebBridge.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebFramePrivate.m:

2002-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3124837 -- Crash trying to handle weird javascript URL in page address field

        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:]):
        Use the new _web_scriptIfJavaScriptURL to simplify the check for JavaScript URLs,
        and to use a more tolerant unescaper.

        * English.lproj/StringsNotToBeLocalized.txt: Updated.

2002-12-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - turned on the mechanism that passes events through WebCore, now that it's working better

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView hitTest:]): Moved this function in here. Rewrote it. It has a new feature where
        you can set a global and do a normal hit test, needed for the mouse-moved handling below. Also,
        for efficiency, it does the actual hit testing of itself, rather than calling super, which recurses,
        and ignoring the result. The sum total is that it always returns self for mouse-moved events, so
        we pass them all over the bridge at the topmost frame.

        (-[WebHTMLView _updateMouseoverWithEvent:]):
        * WebView.subproj/WebHTMLView.m: Moved hitTest: out of here.

2002-12-11  John Sullivan  <sullivan@apple.com>

        - fixed 3124640 -- Crash importing IE Favorites if there 
        are no IE favorites

        Reviewed by Darin

        * Bookmarks.subproj/WebBookmarkImporter.m:
        (-[WebBookmarkImporter initWithPath:]):
        use alloc/init instead of autoreleasing constructor for error since
        it's kept around until dealloc.

2002-12-11  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3117611 -- REGRESSION: exception in mouseoverTextForElement with accented characters in status

        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[NSMutableDictionary _web_setObjectIfNotNil:forKey:]):
        Remove the object from the dictionary rather than just leaving the dictionary alone if it's nil.
        This is needed since we now are reusing an already-existing dictionary.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2002-12-11  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3118430 - crash / loop trying to copy url of link to clipboard
        Fixed: 3122585 - REGRESSION: dragging links to the desktop or a Finder window does not do anything

        Reviewed by john.

        We were reusing the drag types from the previous drag pasteboard. For example, we would declare image types when dragging URLs. This would confuse the Finder, so location files weren't being created. This would occasional cause us to crash because we wer









en't providing the declared data. 

        * Misc.subproj/WebNSPasteboardExtras.h:
        * Misc.subproj/WebNSPasteboardExtras.m:
        (+[NSPasteboard _web_dragTypesForURL]): Added more types that we handle
        (-[NSPasteboard _web_writeURL:andTitle:withOwner:declareTypes:]): declares the provided types, writes URL and title
        (-[NSPasteboard _web_writeURL:andTitle:withOwner:]): call _web_writeURL:andTitle:withOwner:types: with _web_dragTypesForURL
        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_dragPromisedImage:origin:URL:fileType:title:event:]): call _web_writeURL:andTitle:withOwner: types: plus images types

2002-12-10  Trey Matteson  <trey@apple.com>

        3092966 - going back goes to different page (can't go back to a POST page)
        3123450 - if the user refuses a navigation, the b/f menus is wrong

        We will rePOST data upon back/forward/refresh if our caches fail us.  The policy delegate
        gets a crack at confirming this operation.  Latent bugs where the policy delegate was double
        queried are fixed.  A bug in the b/f cursor when a page failed to load is fixed.

        Reviewed by Maciej.

        * English.lproj/StringsNotToBeLocalized.txt:  Usual suspects.
        * History.subproj/WebHistoryItem.h:  Add state for reposting forms.
        * History.subproj/WebHistoryItem.m:  Boilerplate changes for new state.
        (-[WebHistoryItem dealloc]):
        (-[WebHistoryItem setFormData:]):
        (-[WebHistoryItem setFormContentType:]):
        (-[WebHistoryItem formData]):
        (-[WebHistoryItem formContentType]):
        (-[WebHistoryItem description]):
        * WebView.subproj/WebController.m:
        (-[WebController _goToItem:withLoadType:]):  Tighten up an assert as I clarified an
        assumption as I worked through this task.
        * WebView.subproj/WebControllerPolicyDelegate.h:  New WebNavigationType's for back/forward,
        refresh, and repost.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):  Eliminate extra copy of a request.
        (-[WebFrame reload]):  Eliminate extra copy of a request.  Setup triggeringAction properly
        if we're about to rePOST.
        * WebView.subproj/WebFramePrivate.h:  Started moving some private methods into the .m file.
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem]):  Save form state with history items.
        (-[WebFrame _isLoadComplete]):  Fix up b/f cursor on page error before commit succeeds.
        (-[WebFrame _loadItem:fromItem:withLoadType:]):  Set up request to rePOST if that's what the
        HistoryItem demands.  Add call to _addExtraFieldsToRequest so we don't do a double
        query of the policy delegate.  Pre-flight the form post vs. WF cache to setup triggering
        action properly.
        (-[WebFrame _actionInformationForLoadType:isFormSubmission:event:originalURL:]):
        New utility method to help build action dict.
        (-[WebFrame _continueAfterNavigationPolicy:]):  Comment only.
        (-[WebFrame _loadURL:loadType:triggeringEvent:isFormSubmission:]):  Call new utility method
        instead (just code factoring).
        (-[WebFrame _postWithURL:data:contentType:triggeringEvent:]):  Call new utility method
        instead (just code factoring).  Add call to _addExtraFieldsToRequest so we don't do a double
        query of the policy delegate.
        (-[WebFrame _reloadAllowingStaleDataWithOverrideEncoding:]):  Whitespace only.
        (-[WebFrame _resetBackForwardListToCurrent]):  Utility routine to fix up b/f cursor on page error.
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:request:]):  Fix up b/f cursor on page
        error before commit succeeds.

2002-12-10  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3124302 -- REGRESSION: Can't use directory.apple.com because
        frame resize bar intercepts mouse clicks

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView hitTest:]):
        Don't steal clicks for views that are inside nested WebViews.
        This isn't the real fix, but it's good enough for now. The real fix will be in WebCore.

2002-12-10  Darin Adler  <darin@apple.com>

        - fixed fix for 3124081 -- REGRESSION: partial progress is left in address field after download

        Reviewed by Chris.

        Need to move it down one line so the data source is clear before callback.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeAndKeepLoading:]):
        Do the _clearProvisionalDataSource before the locationChangeDone: callback.

2002-12-10  John Sullivan  <sullivan@apple.com>

        Fixed more "Alexander"s that were lurking in places I forgot 
        to look before.

        Reviewed by Darin

        * Makefile.am:
        "rm -rf $(SYMROOTS)/Safari.app/Frameworks/WebKit.framework"

2002-12-10  Darin Adler  <darin@apple.com>

        - fixed 3124081 -- REGRESSION: partial progress is left in address field after download

        Reviewed by Chris.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChangeAndKeepLoading:]):
        Put in code to call the locationChangeDone: method on the location change delegate if
        keepLoading is YES. Since the data source is not finished loading WebFrame won't do it.

2002-12-10  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3124079 - REGRESSION: Downloads never complete

        Reviewed by darin.

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient handleDidFinishLoading:]): release and set to nil the download handler after calling [super handleDidFinishLoading:h]

2002-12-10  Richard Williamson   <rjw@apple.com>

        Fixed 3115427.  Page now draws instantly instead of 20 seconds.
        I added the substitution font we get from the appkit to the character to glyph
        cache.
        
        Fixed early return optimization from letter forming function.  It was too
        eager to return!
        
        Reviewed by mjs.

        * Misc.subproj/WebUnicode.m:
        (shapedString):
        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (glyphForCharacter):
        (glyphForUnicodeCharacter):
        (widthForGlyph):
        (widthForCharacter):
        (_fontContainsString):
        (-[WebTextRenderer substituteFontForString:families:]):
        (-[WebTextRenderer _computeWidthForSpace]):
        (-[WebTextRenderer _floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding:attemptFontSubstitution:widths:fonts:glyphs:numGlyphs:letterSpacing:wordSpacing:fontFamilies:]):
        (-[WebTextRenderer extendUnicodeCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer updateGlyphEntryForCharacter:glyphID:font:]):
        (-[WebTextRenderer extendCharacterToGlyphMapToInclude:]):
        (-[WebTextRenderer extendGlyphToWidthMapToInclude:]):

2002-12-10  John Sullivan  <sullivan@apple.com>

        - tweaked the API of WebBookmarkImporter while implementing
        real "Import IE Favorites" UI

        Reviewed by Ken

        * Bookmarks.subproj/WebBookmarkImporter.h:
        fixed a typo in a constant
        * Bookmarks.subproj/WebBookmarkImporter.m:
        (-[WebBookmarkImporter initWithPath:]):
        Don't pass a group here. This method now creates the topBookmark
        (as it was doing before) but does not attempt to insert it
        anywhere. It's up to the client to fetch the topBookmark and do
        something with it. Also, don't name the new folder here; leave
        that to the caller also.

        * English.lproj/Localizable.strings:
        kept this file up to date

2002-12-10  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3108912 -- onclick handlers not supported on form elements

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView hitTest:]):
        Take over hit testing so that all clicks on subviews are handled by the WebHTMLView.
        WebCore now handles getting the mouse events to the subviews after passing
        the events through the DOM.

2002-12-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Trey.

        - fixed 3123057 - SJ: DHTML doesn't always work on http://www.pixar.com/howwedoit/
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadURL:loadType:triggeringEvent:isFormSubmission:]):
        Treat a click on a link to the same URL with an anchor as a scroll
        to anchor, not a same URL load.
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:request:]): Avoid
        adding the same anchor URL to the back/forward list many times.

2002-12-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3028664 -- change user agent string to include application name and version

        * WebView.subproj/WebController.m:
        (-[WebController setApplicationNameForUserAgent:]): Remove locking, unneeded since we changed
        how WebFoundation handles user agent.
        (-[WebController setCustomUserAgent:]): Ditto.
        (-[WebController resetUserAgent]): Ditto.
        (-[WebController userAgentForURL:]): Remove locking. Also add new algorithm for computing the
        user agent which takes the preferred language into account, and incorporates the WebKit version
        and the application name.

        * WebView.subproj/WebControllerPrivate.h: No need for a lock.
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebControllerPrivate init]): Don't create a lock.
        (-[WebControllerPrivate dealloc]): Don't release a lock.

        * WebKit.pbproj/project.pbxproj: Bump versions to 0.8 and 35u.
        * English.lproj/InfoPlist.strings: In here too.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for these and other recent changes.

2002-12-09  Richard Williamson   <rjw@apple.com>

        Many changes for b/f list.
        1.  Always attempt to cache snap back items.
        2.  Lazily release resources from page cache.  This garners gains on the PLT (and presumably iBench) tests, both for uncached.
        3.  Set the page cache size to 4 (+ snap back items).  After releasing resources we hover around 28MB footprint.  Closing windows releases all resources.
        4.  Turn on the back/forward cache by default.  The menu item still allows you to toggle b/f on and off.  Useful when conducting speed comparison in the PLT.
        5.  Addition of lazy update to PLT memory statistics to show footprint after lazy release of page cache resources.
        6.  Delayed to leak detector to account for lazy release of resources.
        7.  A change when saving a page to back/forward cache to clear and restore the documents root renderer.  Without this fix pages would appear to 'flicker' more when content arrived.
        8.  A change to ensure a layout when restoring a page from the b/f cache.  Without this fix scrollbars wouldn't appear correctly.
        9.  A change to ensure that khtmlview layout and paint timers are unscheduled when a page is placed in the b/f cache.
        10.  A fix to decouple of khtmlview from it's part when placed in the b/f cache.  This fixed a crash caused by inappropriate deference of the part when a page cache item was released.
        11.  A comment in KHTMLPageCache.h explaining the that our page cache is not the same as the khtml page cache.  (Their cache just cached the html source.)
        12.  Reapply styles when loading page from cache.  This ensures that visited link get the appropriate style.

        Reviewed by kocienda.

        * History.subproj/WebBackForwardList.m:
        (+[WebBackForwardList pageCacheSize]):
        (+[WebBackForwardList setUsesPageCache:]):
        (+[WebBackForwardList usesPageCache]):
        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setAlwaysAttemptToUsePageCache:]):
        (-[WebHistoryItem alwaysAttemptToUsePageCache]):
        (+[WebHistoryItem _invalidateReleaseTimer]):
        (-[WebHistoryItem _scheduleRelease]):
        (+[WebHistoryItem _releaseAllPendingPageCaches]):
        (-[WebHistoryItem _releasePageCache:]):
        (-[WebHistoryItem setHasPageCache:]):
        (-[WebWindowWatcher windowWillClose:]):
        * WebView.subproj/WebDataSourcePrivate.h:
        * WebView.subproj/WebDataSourcePrivate.m:
        (-[WebDataSource _startLoading:]):
        (-[WebDataSource _commitIfReady:]):
        (-[WebDataSource _loadingFromPageCache]):
        * WebView.subproj/WebDynamicScrollBarsView.h:
        * WebView.subproj/WebFramePrivate.h:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _purgePageCache]):
        (+[WebFrame _timeOfLastCompletedLoad]):
        (-[WebFrame _setState:]):
        (-[WebFrame _opened]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:request:]):
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences load]):

2002-12-09  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        - fixed 3122608 -- REGRESSION: Downloads can't be cancelled

        When I fixed the leak for other categories of policy interruption, I messed
        things up for downloads. Added new parameters to handle this right.

        * WebView.subproj/WebBaseResourceHandleDelegate.h: Remove isDownload flag.
        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate isDownload]): Return NO, override in subclass.
        (-[WebBaseResourceHandleDelegate handle:didReceiveResponse:]): Call isDownload
        method instead of looking at flag directly.

        * WebView.subproj/WebControllerPrivate.h: Add complete: parameter to _mainReceivedError:.
        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _mainReceivedError:fromDataSource:complete:]): If complete is NO, then
        don't mark the primary load as complete.
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient isDownload]): Added. Returns YES if downloadHandler is non-nil.
        (-[WebMainResourceClient receivedError:complete:]): Added complete parameter. Call the
        _setPrimaryLoadComplete: method in the download case (fixes a possible leak), and pass
        the complete parameter through to the controller.
        (-[WebMainResourceClient cancel]): Pass complete:YES.
        (-[WebMainResourceClient interruptForPolicyChangeAndKeepLoading:]): Added the keepLoading
        flag, and pass complete:!keepLoading.
        (-[WebMainResourceClient stopLoadingForPolicyChange]): Pass keepLoading:NO.
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): Pass keepLoading:YES,
        and remove the call to the now-obsolete setIsDownload:.
        (-[WebMainResourceClient handle:didFailLoadingWithError:]): Pass complete:YES.

2002-12-08  Darin Adler  <darin@apple.com>

        Reviewed by Don and Dave.

        - fixed 3120578 -- REGRESSION: going to about:blank creates null view

        This part of the fix makes sure that a renderer is created, even when there are no bytes
        of data passed through. This makes the empty document about:blank case work just like the
        "document with just whitespace in it case". There's another part of the fix in WebCore that
        takes care of the remaining problem. 

        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):
        Call receivedData:withDataSource: on the bridge with nil for the data. It would be even more
        elegant to add a new call for the case where we finish, but it's not necessary, since the
        existing receivedData: call does all the right things if passed nil.

        * WebView.subproj/WebDataSourcePrivate.m: (-[WebDataSource _finishedLoading]):
        Call finishedLoadingWithDataSource: here, to make sure it's done after committing.
        This parallels what we already do for the didReceiveData call.
        * WebView.subproj/WebMainResourceClient.m: (-[WebMainResourceClient handleDidFinishLoading:]):
        Remove the call to finishedLoadingWithDataSource: because it's handled by _finishedLoading now.
        This parallels what we already do for the didReceiveData call.

        - fixed long standing problem where resizing could make you see a "null view"

        * WebView.subproj/WebView.m:
        (-[WebView drawRect:]): Add a "paint cyan" feature in development builds.
        Null view problems are particularly hard to debug without something like this,
        and we don't care if development builds are slightly slower. No change in deployment.
        (-[WebView setFrameSize:]): Tell the scroll view to draw the background if we are
        resized. We can't do our "let the old bits show through" thing any more if we have to
        redraw because of resizing.

        - other changes

        * WebKit.pbproj/project.pbxproj: Remove the old -DAPPLE_CHANGES and -DHAVE_CONFIG_H that we
        once needed when WebKit used to compile  C++ headers from the KHTML part of WebCore.
        We haven't needed those for ages. Also sort things a bit, using the new Electron feature for
        sorting lists of files alphabetically, and some by hand.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

2002-12-08  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3121627 - REGRESSION: partial progress is left in address field after download

        Reviewed by: darin

        In WebMainResourceClient, make sure to always call receivedError before _clearProvisionalDataSource so that
        receivedError works. This is done in multiple places, so I factored this out into one method interuptForPolicyChange.

        * WebView.subproj/WebControllerPrivate.m:
        (-[WebController _mainReceivedError:fromDataSource:]): added asserts for nil error, dataSource and frame
        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient interruptForPolicyChange]): renamed from notifyDelegatesOfInterruptionByPolicyChange because it now also sets the provisionalDataSource on the frame to nil. 
        (-[WebMainResourceClient stopLoadingForPolicyChange]): call interruptForPolicyChange, stop load
        (-[WebMainResourceClient continueAfterContentPolicy:response:]): call interruptForPolicyChange

2002-12-06  Trey Matteson  <trey@apple.com>

        Clean up some printfs.  Use WebKitLogPageCache for page cache info.

        Reviewed by: rjw

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _transitionToCommitted:]):
        (-[WebFrame _purgePageCache]):
        (-[WebFrame _setState:]):
        (-[WebFrame _continueLoadRequestAfterNavigationPolicy:request:]):

2002-12-06  Trey Matteson  <trey@apple.com>

        3118584 - implement desired behavior for load - reload - b/f
        3119241 - page cache needs to be refreshed after reload
        3118096 - isTargetItem:NO saved to disk with every bookmark

        The most noticeable changes are the addition of the "Same" loadType, and that reload
        does not restore form state.  3119241 was noticed in passing, and is related.
        3118096 is a nit with a possible small perf benefit.

        Reviewed by: rjw

        * History.subproj/WebHistoryItem.h:
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem dealloc]):  New originalURL field.
        (-[WebHistoryItem originalURL]):  New getter.
        (-[WebHistoryItem setOriginalURL:]):  New setter.
        (-[WebHistoryItem dictionaryRepresentation]):  Dont save isTarget.
        (-[WebHistoryItem initFromDictionaryRepresentation:]):  Dont save isTarget.
        * WebView.subproj/WebFrame.m:
        (-[WebFrame loadRequest:]):  Test for going to same URL, invoke loadTypeSame case.
        * WebView.subproj/WebFramePrivate.h:  Add loadTypeSame
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _addBackForwardItemClippedAtTarget:]):  Remove a line of dead code.
        (-[WebFrame _createItem]):  Set originalURL when item is created.
        (-[WebFrame _transitionToCommitted:]):  For loadTypeSame, clear page cache
        (-[WebFrame _purgePageCache]):  Added logging.
        (-[WebFrame _setState:]):  Don't add to page cache if doing a reload.
        (-[WebFrame _isLoadComplete]):  LoadTypeSame is a NOP.
        (-[WebFrame _loadItem:fromItem:withLoadType:]):  LoadTypeSame is an ASSERT.
        (-[WebFrame _loadURL:loadType:triggeringEvent:isFormSubmission:]):  In
        the LoadTypeSame case load from origin and never do anchor nav.  If asked to load
        the same URL, invoke LoadTypeSame case.
        (-[WebFrame _loadURL:intoChild:]):  Latent bug: WebFrameLoadTypeReloadAllowingStaleData
        should restore child frame content like reload does.
        (-[WebFrame _itemForRestoringDocState]):  Prevent form state restore on reload and loadSame.
        (-[WebFrame _shouldTreatURLAsSameAsCurrent:]):  New utility function.

2002-12-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by: Darin Adler

        - made framework embedding work correctly with buildit

        * WebKit.pbproj/project.pbxproj: Give framework a relative
        install path, don't install it the normal way, and copy it
        manually to /AppleInternal/Library/Frameworks if installing. Also
        look for other frameworks in
        ${DSTROOT}/AppleInternal/Library/Frameworks.

2002-12-05  Darin Adler  <darin@apple.com>

        Reviewed by Trey.

        - fixed 3103691 -- assertion in WebHTMLView addMouseMovedObserver at versiontracker

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView addMouseMovedObserver]): Instead of asserting, do the checks here to
        determine if the observer should be installed.
        (-[WebHTMLView viewDidMoveToWindow]): Remove checks, since addMouseMovedObserver now checks.
        (-[WebHTMLView windowDidBecomeMain:]): Remove checks, since addMouseMovedObserver now checks.

2002-12-05  Richard Williamson   <rjw@apple.com>

        Don't ceil spaces if not a fixed pitch font.  This make sites
        that have hard coded block widths have less wrapping beyond what the
        designer expected.  Fixes 3117225.
        
        Reviewed by: mjs

        * WebCoreSupport.subproj/WebTextRenderer.h:
        * WebCoreSupport.subproj/WebTextRenderer.m:
        (widthForGlyph):
        (-[WebTextRenderer _computeWidthForSpace]):
        (-[WebTextRenderer initWithFont:]):
        (-[WebTextRenderer _floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding:attemptFontSubstitution:widths:fonts:glyphs:numGlyphs:letterSpacing:wordSpacing:fontFamilies:]):

2002-12-05  Chris Blumenberg  <cblu@apple.com>

        Added WebDocumentText protocol. Made WebHTMLView and WebTextView implement it.

        Reviewed by: rjw

        * WebView.subproj/WebController.m:
        (-[WebController supportsTextEncoding]): check if protocol is WebDocumentText
        * WebView.subproj/WebDocument.h:
        * WebView.subproj/WebHTMLView.h:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView hasSelection]): call selectedString
        (-[WebHTMLView takeFindStringFromSelection:]): call selectedString
        (-[WebHTMLView selectAll:]): call selectAll
        (-[WebHTMLView string]): part of WebDocumentText protocol
        (-[WebHTMLView attributedString]): part of WebDocumentText protocol
        (-[WebHTMLView selectedString]): part of WebDocumentText protocol
        (-[WebHTMLView selectedAttributedString]): part of WebDocumentText protocol
        (-[WebHTMLView selectAll]): part of WebDocumentText protocol
        (-[WebHTMLView deselectAll]): part of WebDocumentText protocol
        * WebView.subproj/WebHTMLViewPrivate.m:
        (-[WebHTMLView _writeSelectionToPasteboard:]): call selectedAttributedString
        * WebView.subproj/WebTextView.h:
        * WebView.subproj/WebTextView.m:
        (-[WebTextView string]): part of WebDocumentText protocol
        (-[WebTextView attributedString]): part of WebDocumentText protocol
        (-[WebTextView selectedString]): part of WebDocumentText protocol
        (-[WebTextView selectedAttributedString]): part of WebDocumentText protocol
        (-[WebTextView selectAll]): part of WebDocumentText protocol
        (-[WebTextView deselectAll]): part of WebDocumentText protocol

2002-12-05  Darin Adler  <darin@apple.com>

        Reviewed by Richard.

        - fixed 3107240 -- world leak: reproducible, trying to open TIFF file

        * WebView.subproj/WebMainResourceClient.m:
        (-[WebMainResourceClient notifyDelegatesOfInterruptionByPolicyChange]):
        Send error to the delegate using receivedError: rather than directly.
        This results in the frame properly stopping the load and fixes the leak.

2002-12-05  Darin Adler  <darin@apple.com>

        Reviewed by Chris.

        * Downloads.subproj/WebDownloadHandler.m: (-[WebDownloadHandler initWithDataSource:]):
        Add WebGZipDecoder to the list.

        * Downloads.subproj/WebGZipDecoder.h: Finished this.
        * Downloads.subproj/WebGZipDecoder.m: Finished this.

        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.

2002-12-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by: Darin

        * English.lproj/InfoPlist.strings: removed letters from
        CFBundleShortVersionString to make buildit happy.

=== Alexander-35 ===

2002-12-05  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 3118647 -- REGRESSION: click policy no longer works

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _actionInformationForNavigationType:event:originalURL:]):
        Allow mouse up events too. Those are usually the ones that trigger navigation.

2002-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed assert when you choose an item from a menu, for example, and that navigates

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _actionInformationForNavigationType:event:originalURL:]):
        If the event is over some other element, just don't include the element info.

2002-12-04  Chris Blumenberg  <cblu@apple.com>

        Fixed: 3116294 - Need "Reload" feature in Downloads window

        Reviewed by: rjw

        * WebKit.pbproj/project.pbxproj: made WebFramePrivate.h private so that WebBrowser can call _downloadRequest:toPath:
        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadDataSource:withLoadType:]): commented out assert that complains about lack of WebView. Long-term solution is to catch this earlier and have a lone datasource download mechanism 3118355.

2002-12-04  Trey Matteson  <trey@apple.com>

        3097585 - Crash in -[WebFrame(WebPrivate) _isLoadComplete] at result of google image search

        The root of this problem was that we would detach child frames by calling detach
        on them all, then clearing the whole array.  This would fail because detaching a
        frame might have to stop a load, which calls checkLoadComplete, which visits the
        entire frame tree.  But if a previously detached child is still sitting in that
        tree, we end up with an assertion failure.  The solution is to remove the kids as
        they are detached.

        Reviewed by: Darin Adler

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _createItem]):   Method rename (a nit I missed from an earlier change)
        (-[WebFrame _createItemTreeWithTargetFrame:clippedAtTarget:]):  Method rename
        (-[WebFrame _detachChildren]):   new method to do detaching right
        (-[WebFrame _detachFromParent]):  call new method
        (-[WebFrame _setDataSource:]):  call new method
        (-[WebFrame _transitionToCommitted:]):    Method rename

2002-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Trey and Maciej.

        - fixed 3117558 -- Assertion failure in KWQKHTMLPart::slotData after typing "amazon.com" twice
        - update NSEvent handling in preparation for NSView mouse event handling going through WebCore

        * WebView.subproj/WebFramePrivate.m:
        (-[WebFrame _loadItem:fromItem:withLoadType:]): Added FIXME comments about matching the _loadURL
        case more closely.
        (-[WebFrame _actionInformationForNavigationType:event:originalURL:]): Only use the event if it's
        a mouse down event. This prevents trouble when we have other kinds of events coming through.
        (-[WebFrame _continueFragmentScrollAfterNavigationPolicy:request:]): Call the new scrollToAnchorWithURL:
        instead of openURL:. This fixes the assertion failure in the bug above.
        (-[WebFrame _loadURL:loadType:triggeringEvent:isFormSubmission:]): Update checks here to more closely
        match the ones in KHTMLPart::openURL that we are replacing. Add more comments.

        * WebView.subproj/WebHTMLView.m: (-[WebHTMLView hitTest:]): Function to intercept all clicks at the
        WebHTMLView level, disabled for now because we are not yet ready.

        - started a gzip download decoder, not yet hooked up

        * Downloads.subproj/WebGZipDecoder.h: Added.
        * Downloads.subproj/WebGZipDecoder.m: Added.
        * WebKit.pbproj/project.pbxproj: Add WebGZipDecoder and zlib.

        - other changes

        * Panels.subproj/WebAuthenticationPanel.m: Fixed screwed-up indentation.

2002-12-04  Richard Williamson   <rjw@apple.com>

        Cache the fallback font in the same way we cache other
        fonts.
        
        Reviewed by: Darin

        * WebCoreSupport.subproj/WebTextRendererFactory.h:
        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory fallbackFontWithTraits:size:]):
        (-[WebTextRendererFactory fontWithFamilies:traits:size:]):
        (-[WebTextRendererFactory cachedFontFromFamily:traits:size:]):

2002-12-04  Richard Williamson   <rjw@apple.com>

        Fixed massive performance regression.
        We were leaking WebFontCacheKey.
        Added a cache of missing fonts to avoid
        expensive appkit lookup.
        
        Reviewed by: Maciej

        * WebCoreSupport.subproj/WebTextRendererFactory.m:
        (-[WebTextRendererFactory cachedFontFromFamily:traits:size:]):
        (-[WebTextRendererFactory cachedFontFromFamilies:traits:size:]):

2002-12-03  Darin Adler  <darin@apple.com>

        - fixed 3117193 -- REGRESSION: Hang on Hixie's weblog

        Reviewed by Maciej.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer substituteFontForString:families:]):
        Do the operation on the whole string at once instead of a character at a time.
        I decided to do this rather than correct the bug in the character-at-a-time version.

== Rolled over to ChangeLog-2002-12-03 ==
