2008-05-29  Mark Rowe  <mrowe@apple.com>

        Merge r34154 to Safari-3-1-branch.

    2008-05-27  Timothy Hatcher  <timothy@apple.com>

        Fixes a bug where unplugging the monitor from a video card and
        moving it to another video card would no longer show OpenGL plugins
        until you relaunched Safari.

        <rdar://problem/5790983> Add AllowOfflineDisplays pixel format
        attribute to OpenGL contexts

        Reviewed by Kevin Decker.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView _createWindowedAGLContext]): Added
        AGL_ALLOW_OFFLINE_RENDERERS for non-Tiger builds.
        (-[WebBaseNetscapePluginView _createWindowlessAGLContext]): Ditto.

2008-03-24  Mark Rowe  <mrowe@apple.com>

        Merge the modifier key part of r31236 to Safari-3-1-branch.

    2008-03-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Minimal fix for <rdar://problem/5642990> REGRESSION: shift key in Gmail Rich Text changes focus (16381)

        If a document is present we prevent the flagsModified event from propagating up the frame tree,
        this is correct behaviour and prevents us hitting the gmail code that incorrectly changes focus.
        This is a subset of r31236

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView flagsChanged:]):

2008-02-21  Mark Rowe  <mrowe@apple.com>

        Merge r30433 to Safari-3-1-branch.

    2008-02-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin and Geoff.

        - WebKit part of <rdar://problem/5754378> work around missing video on YouTube front page with a site-specific hack

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Added a call to Settings::setNeedsSiteSpecificQuirks.
        There are currently no site-specific quirks on Mac, but we will propagate the state
        to WebCore to avoid possible mistakes later.

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Unreviewed.  Really make WebKit's FEATURE_DEFINES match WebCore's.

        * Configurations/WebKit.xcconfig:

2008-02-17  Mark Rowe  <mrowe@apple.com>

        Merge r30323 to Safari-3-1-branch.

    2008-02-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - WebKit part of fixing http://bugs.webkit.org/show_bug.cgi?id=17360
          <rdar://problem/5743131> REGRESSION: mp4 file downloaded from server is downloaded as html

        * WebView/WebDataSource.mm:
        (+[WebDataSource _representationClassForMIMEType:]):
        (-[WebDataSource _responseMIMEType]):
        (-[WebDataSource subresources]):
        (-[WebDataSource subresourceForURL:]):
        * WebView/WebResource.mm:
        (-[WebResource _initWithData:URL:response:]):
        * WebView/WebResourcePrivate.h:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30276 to Safari-3-1-branch.

    2008-02-15  Adam Roben  <aroben@apple.com>

        Make WebKit's FEATURE_DEFINES match WebCore's

        Reviewed by Mark.

        * Configurations/WebKit.xcconfig:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30239 to Safari-3-1-branch.

    2008-02-14  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff.

        Update order files.

        * WebKit.order:

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30120 to Safari-3-1-branch.

    2008-02-10  Darin Adler  <darin@apple.com>

        - fix http://bugs.webkit.org/show_bug.cgi?id=17274
          REGRESSION: User Agent string broken in r30119

        * WebView/WebView.mm:
        (-[WebView _userAgentWithApplicationName:andWebKitVersion:]):
        Fix wrong variable name. Doh!

2008-02-15  Mark Rowe  <mrowe@apple.com>

        Merge r30119 to Safari-3-1-branch.

    2008-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5725996> crash every time you open the Xcode documentation window

        * WebView/WebView.mm:
        (-[WebView _userAgentWithApplicationName:andWebKitVersion:]): Work around a bug in the
        garbage collector's Objective C++ support by not initializing a static to an object
        that needs to be marked when running under GC.

2008-02-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebKit part of <rdar://problem/5724303> Should implement writing direction shortcuts

        The key bindings are Command-Control-left arrow and
        Command-Control-right arrow. To match AppKit, the bindings are enabled
        only when certain user defaults are set.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView toggleBaseWritingDirection:]): Changed to call
        Frame::baseWritingDirectionForSelectionStart() and
        Editor::setBaseWritingDirection() directly.
        (-[WebHTMLView changeBaseWritingDirection:]): Ditto.
        (writingDirectionKeyBindingsEnabled): Added.
        (-[WebHTMLView _changeBaseWritingDirectionTo:]): Added this helper
        method.
        (-[WebHTMLView changeBaseWritingDirectionToLTR:]): Added.
        (-[WebHTMLView changeBaseWritingDirectionToRTL:]): Added.
        * WebView/WebView.mm:

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Unreviewed build fix.

        * WebView/WebView.mm: Add missing #import.

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Update versioning to support the mysterious future.

        * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.

2008-01-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/5708115> REGRESSION: Words selected with a double click and copied won't paste into Mail

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _smartInsertForString:replacingRange:beforeString:afterString:]): Brought 
        this back, it's used by Mail.
        (-[WebHTMLView _canSmartReplaceWithPasteboard:]): This WebInternal method is
        also used by Mail.  Moved to WebPrivate.
        * WebView/WebHTMLViewPrivate.h: Expose two methods that Mail uses here, so that we don't
        accidently remove them in the future.

2008-01-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Move off deprecated NSTableView methods.

        * WebView/WebHTMLView.mm:
        (-[WebTextCompleteController _buildUI]): Switch from -setDrawsGrid: to -setGridStyleMask:.
        (-[WebTextCompleteController _placePopupWindow:]): Switch from -selectRow:byExtendingSelection: to -selectRowIndexes:byExtendingSelection:.
        (-[WebTextCompleteController filterKeyDown:]): Ditto.

2008-01-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix leaks seen after loading <http://www.funnyordie.com/videos/d70b5a11cb>.

        * Misc/WebNSDataExtras.m:
        (-[NSString _web_capitalizeRFC822HeaderFieldName]): Transfer ownerhip of the allocated buffers
        to the new CFString so that they will be freed when no longer needed.

2008-01-26  Greg Bolsinga  <bolsinga@apple.com>

        <rdar://problem/5708388> WebDashboardRegion.h duplicated between WebCore / WebKit

        Reviewed by Darin.

        * WebCoreSupport/WebDashboardRegion.h: Removed.
        * WebView/WebView.mm: Updated #import to use copy of WebDashboardRegion.h from WebCore.

2008-01-21  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/5644324> Delegate-less WebKit clients should have no databases
        - add a missing export of WebDatabaseExpectedSizeKey
        - implement deleteOrigin: and remove deleteDatabasesWithOrigin:

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]): Updated to check for a null
        name instead of calling isValid().
        (-[WebDatabaseManager deleteOrigin:]): Implemented.
        (WebKitInitializeDatabasesIfNecessary): Updated for name change.

        * Storage/WebDatabaseManagerPrivate.h: Removed deleteDatabasesWithOrigin:.

        * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota): Replaced the two different client functions
        we had before with a single one.

        * WebKit.exp: Added missing export for WebDatabaseExpectedSizeKey.

        * WebView/WebPreferenceKeysPrivate.h: Removed WebKitDefaultDatabaseQuotaKey.
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]): Removed the default for WebKitDefaultDatabaseQuotaKey.
        * WebView/WebPreferencesPrivate.h: Removed defaultDatabaseQuota and
        setDefaultDatabaseQuota:.

        * WebView/WebUIDelegatePrivate.h: Replaced the two different database quota delegate
        methods we had before with a single one.

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Removed the code to set the
        default database origin quota in WebCore::Settings based on WebPreferences.

        * WebView/WebViewInternal.h: Removed delegate method dispatch functions for unusual
        types of parameters that the database UI delegate methods had before.

2008-01-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Remove code bracketed by REMOVE_SAFARI_DOM_TREE_DEBUG_ITEM as we are no longer
        interested in supporting Safari 2 with TOT WebKit.

        * WebView/WebView.mm:
        (+[WebView initialize]):

2008-01-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/5693558> REGRESSION (r29581): no form field focus rings
        and inactive text selection after loading a page
        Bug 16917: REGRESSION (r29581/2): Google Maps search box loses focused appearance

        The problem was other frames were changing the FocusController's active
        status to false after the first responder frame set it to true. The last
        frame to call _updateActiveState would win.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateActiveState]): Only call page->focusController()->setActive()
        if the first responder is the current WebHTMLView or the WebFrameView.
        (-[WebHTMLView _web_firstResponderCausesFocusDisplay]): Removed, inlined code in _updateActiveState.

2008-01-18  Adam Roben  <aroben@apple.com>

        Rename _updateActiveState to _updateFocusedAndActiveState

        Also renamed any related methods/members similarly.

        Reviewed by Adele.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]):
        (-[WebHTMLView _cancelUpdateFocusedAndActiveStateTimer]):
        (-[WebHTMLView close]):
        (_updateFocusedAndActiveStateTimerCallback):
        (-[WebHTMLView viewWillMoveToWindow:]):
        (-[WebHTMLView viewDidMoveToWindow]):
        (-[WebHTMLView windowDidBecomeKey:]):
        (-[WebHTMLView windowDidResignKey:]):
        (-[WebHTMLView becomeFirstResponder]):
        (-[WebHTMLView resignFirstResponder]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebHTMLViewPrivate.h:

2008-01-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/5692068> -1 WebFrameView world leaks reported after closing view source window

        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithCoder:]):
        override to bump the global WebFrameView count

2008-01-16  Adam Roben  <aroben@apple.com>

        Updated for renames/removal of WebCore methods.

        Reviewed by Darin.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController webPlugInContainerSelectionColor]): Changed to
        ask isFocusedAndActive directly, instead of going through the frame
        bridge.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateActiveState]): Updated for method renames.

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

        Reviewed by Adam and Dan
        
        - cleaned up some existing logging

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView setNeedsDisplay:]):
        add method name to log, use "YES" and "NO" instead of (int)flag
        (-[WebHTMLView setNeedsLayout:]):
        ditto
        (-[WebHTMLView setNeedsToApplyStyles:]):
        ditto

2008-01-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Andre Boule.

        Fixed <rdar://problem/5667627> [WebCache empty] implementation should
        not disable/enable the cache
        
        Toggle the cache model instead -- toggling disable/enable just causes
        the cache to forget about resources, not reclaim their memory.

        * Misc/WebCache.mm:
        (+[WebCache empty]):
        * WebView/WebView.mm:
        * WebView/WebViewInternal.h:

2008-01-15  Adele Peterson  <adele@apple.com>

        Reviewed by Adam and Antti.

        WebKit part of fix for <rdar://problem/5619062> Add load progress indicator to video controls

        * WebCoreSupport/WebSystemInterface.m: (InitWebCoreSystemInterface):
          Removed initialization for GetMediaControlBackgroundImageData.  Added initialization for DrawMediaSliderTrack.

2008-01-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan.

        Fixed some world leak reports:
        * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
        Interpreter after running cvs-base suite

        * <rdar://problem/5669423> PLT complains about world leak if browser
        window is open when PLT starts
        
        These were both bugs in the reporting mechanism, so I took the
        opportunity to do some house cleaning there.

        * Misc/WebCoreStatistics.h: Did a little renaming, to match
        JavaScriptCore better. I kept the methods with the old names around,
        though, because old versions of Safari need them.

        * Misc/WebCoreStatistics.mm: Removed dependence on
        WebCore::JavaScriptStatistics, which is gone now. 
        
        These two methods are now distinct, for the sake of world leak reporting:
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):

2008-01-10  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed. Build fix.
        
        - Attempt to fix mac build.

        * Storage/WebDatabaseManager.mm:

2008-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager origins]):
        (-[WebDatabaseManager databasesWithOrigin:]):
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]):
        (-[WebDatabaseManager deleteDatabasesWithOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        * Storage/WebDatabaseTrackerClient.h:
        * Storage/WebDatabaseTrackerClient.mm:
        (WebDatabaseTrackerClient::dispatchDidModifyOrigin):
        (WebDatabaseTrackerClient::dispatchDidModifyDatabase):
        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin initWithProtocol:domain:port:]):
        (-[WebSecurityOrigin protocol]):
        (-[WebSecurityOrigin domain]):
        (-[WebSecurityOrigin port]):
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        (-[WebSecurityOrigin isEqual:]):
        (-[WebSecurityOrigin dealloc]):
        (-[WebSecurityOrigin finalize]):
        (-[WebSecurityOrigin _initWithWebCoreSecurityOrigin:]):
        (-[WebSecurityOrigin _core]):
        * Storage/WebSecurityOriginInternal.h:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation):

2008-01-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=16522
        <rdar://problem/5657355>

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView loadPluginRequest:]): call findFrameForNavigation
        to ensure the shouldAllowNavigation check is made.

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mark.

        Enable SVG_FONTS by default.

        * Configurations/WebKit.xcconfig:

2008-01-07  Adele Peterson  <adele@apple.com>

        Reviewed by Antti, Adam, and Mitz.

        WebKit part of fix for 
        <rdar://problem/5619073> Updated look for <video> controls
        <rdar://problem/5619057> Add volume control to video controls

        * WebCoreSupport/WebSystemInterface.m: (InitWebCoreSystemInterface):

2008-01-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - <rdar://problem/5665216> Support the unicode-range property in @font-face rules

        * Misc/WebNSAttributedStringExtras.mm:

2008-01-03  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5463489> A number of layout tests should be using execCommand instead of textInputController

        * WebView/WebView.mm:
        (-[WebView _executeCoreCommandByName:value:]):
        * WebView/WebViewPrivate.h:
        Added an SPI to implement layoutTestController.execCommand.

2008-01-03  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        Fixed: <rdar://problem/4106190> Include "Where from" metadata in drag-and-dropped images
        
        * Misc/WebNSFileManagerExtras.h:
        * Misc/WebNSFileManagerExtras.m:
        (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]): Added new method. Uses WebKitSystemInterface to set
        "Where from:" metadata information.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Added "Where from:" metadata for drag and dropped images.
        
2008-01-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin.

        This fixes pageup/down in iframes.  test for this is fast/frames/iframe-scroll-page-up-down.html

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView doCommandBySelector:]):
        Have the editor handle all the commands it supports instead of just text commands.
        If not handled by the editor, the webview will handle the command. 

2008-01-02  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.
        
        Fixed: <rdar://problem/5660603> QuickDraw plug-ins can cause a 100% reproducible assertion failure in AppKit (breaks Safari UI)

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView updateAndSetWindow]): Simplified an early return for non-QuickDraw plug-ins and switched
        to using the more NSView friendly version of lockFocus, lockFocusIfCanDraw.

2008-01-01  David D. Kilzer  <ddkilzer@webkit.org>

        Reviewed by Dan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16700
          Fix -[WebDefaultPolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]

        * DefaultDelegates/WebDefaultPolicyDelegate.m: Check return value of
        -[NSFileManager fileExistsAtPath:isDirectory:] before using the value
        of isDirectory.

2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric.

        Add DOMSVGFontElement/DOMSVGGlyphElement/DOMSVGMissingGlyphElement to MigrateHeaders.make

        * MigrateHeaders.make:

2007-12-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix an assertion failure when pressing the num lock key

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView flagsChanged:]): Avoid passing key code 10 down to
        WebCore.

2007-12-20  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/5658787> Selector -[WebView insertLineBreak:] is not implemented

        * WebView/WebView.mm: Added all selectors implemented by WebHTMLView to the list of
        selectors to forward here. The new ones are: changeBaseWritingDirection:, changeSpelling:,
        deleteToMark:, insertLineBreak:, moveParagraphBackwardAndModifySelection:,
        moveParagraphForwardAndModifySelection:, pageDownAndModifySelection:, pageUpAndModifySelection:,
        selectToMark:, setMark:, swapWithMark:, takeFindStringFromSelection:, toggleBaseWritingDirection:,
        and transpose:.

2007-12-20  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.
        
        Fixed: <rdar://problem/5638288> REGRESSION: Flash movies show up in other tabs above the page (16373)

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView updateAndSetWindow]): QuickDraw plug-ins must manually be told when to stop
         writing to the window backing store. The problem was that change-set 28400 introduced an early return 
         which prevented this necessary operation. The fix is to limit the scope of the early return to CG and GL
         plug-ins and to tweak the needsFocus check to prevent an exception from occurring in QuickDraw-based plug-ins.

2007-12-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Build fix.

        * ForwardingHeaders/kjs/SymbolTable.h: Added.
        * ForwardingHeaders/wtf/VectorTraits.h: Added.

2007-12-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Refactor Mac plugin stream code to use the shared NetscapePlugInStreamLoader implementation.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.mm:
        (-[WebNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        (-[WebNetscapePluginStream dealloc]):
        (-[WebNetscapePluginStream finalize]):
        * Plugins/WebPlugInStreamLoaderDelegate.h: Moved from WebCore.
        * WebCoreSupport/WebNetscapePlugInStreamLoaderClient.h: Added.
        (WebNetscapePlugInStreamLoaderClient::WebNetscapePlugInStreamLoaderClient):
        * WebCoreSupport/WebNetscapePlugInStreamLoaderClient.mm: Added.
        (WebNetscapePlugInStreamLoaderClient::didReceiveResponse): Call through to the equivalent WebPlugInStreamLoaderDelegate method.
        (WebNetscapePlugInStreamLoaderClient::didReceiveData): Ditto.
        (WebNetscapePlugInStreamLoaderClient::didFail): Ditto.
        (WebNetscapePlugInStreamLoaderClient::didFinishLoading): Ditto.

2007-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=14140
        <rdar://problem/5270958> REGRESSION: Complex system KeyBindings don't work properly

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _interceptEditingKeyEvent:shouldSaveCommand:]): Made command replaying work
        when handling keypress, too.
        (-[WebHTMLView doCommandBySelector:]): Adapted for the new way to store commands in events.
        (-[WebHTMLView insertText:]): Append a command, not replace the whole existing vector. Also,
        restore the state for additional commands to be saved correctly.

2007-12-14  David D. Kilzer  <ddkilzer@apple.com>

        <rdar://problem/5647272> Remove user agent string hack for flickr.com

        Reviewed by Darin.

        * WebView/WebView.mm:
        (-[WebView _userAgentForURL:]): Removed hack.

2007-12-14  David D. Kilzer  <ddkilzer@apple.com>

        <rdar://problem/5647261> Remove user agent string hack for yahoo.com

        Reviewed by Darin.

        * WebView/WebView.mm:
        (-[WebView _userAgentForURL:]): Removed hack.

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16296
          <rdar://problem/5635641> -[WebFrameLoadDelegate didReceiveIcon:forFrame:] never called

        * WebView/WebView.mm:
        (-[WebView setFrameLoadDelegate:]): Call [WebIconDatabase sharedIconDatabase] if the
        a didReceiveIcon method is present.

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        - Changed a few more editing operations to use WebCore instead of WebKit.
        - Removed some obsolete unused code.

        * WebCoreSupport/WebFrameBridge.h: Moved declarations of methods that are both
        defined and used on the WebKit side to here. These no longer belong on the bridge
        and should be moved to the WebFrame class (or elsewhere).
        * WebCoreSupport/WebFrameBridge.mm: Removed some unused methods.

        * WebView/WebFrameView.mm:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]): Fix typo in comment.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]): Removed unused firstResponderTextViewAtMouseDownTime.
        (-[WebHTMLViewPrivate clear]): Ditto.
        (-[WebHTMLView _setMouseDownEvent:]): Ditto.
        (commandNameForSelector): Added special cases for pageDown:, pageDownAndModifySelection:,
        pageUp:, and pageUpAndModifySelection:, since those names probably aren't specific enough
        to be used in WebCore (what AppKit calls scrollPageDown: vs. pageDown: needs to be
        disambiguated with the word "Move"). Added deleteBackward:,
        deleteBackwardByDecomposingPreviousCharacter:, deleteForward:, deleteToBeginningOfLine:,
        deleteToBeginningOfParagraph:, deleteToEndOfLine:, deleteToEndOfParagraph:, pageDown:,
        pageDownAndModifySelection:, pageUp:, pageUpAndModifySelection:, selectLine:,
        selectParagraph:, selectSentence:, and selectWord: to the list of commands that are
        forwarded to WebCore.
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Eliminated the long list of
        operations that we forward to WebCore. Instead, look up any command that WebCore can
        handle, after any that we handle specially in WebHTMLView. Also fixed a bug where
        an item that's not a menu item with changeBaseWritingDirection:NSWritingDirectionNatural
        would end up enabled instead of disabled and streamlined the logic for toggleGrammarChecking:.
        (-[WebHTMLView mouseDown:]): Removed unused firstResponderTextViewAtMouseDownTime.
        (-[WebHTMLView becomeFirstResponder]): Removed unused willBecomeFirstResponderForNodeFocus.
        (-[WebHTMLView resignFirstResponder]): Ditto.
        (-[WebHTMLView checkSpelling:]): Took unneeded extra initialization of NSSpellChecker.

        * WebView/WebHTMLViewInternal.h: Removed unused willBecomeFirstResponderForNodeFocus,
        firstResponderTextViewAtMouseDownTime, _textViewWasFirstResponderAtMouseDownTime: and
        _willMakeFirstResponderForNodeFocus.

2007-12-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        Turn on keyboard event processing quirks for feed views and old applications on Mac OS X.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (-[WebView _needsKeyboardEventHandlingQuirks]):
        (-[WebView _preferencesChangedNotification:]):

2007-12-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fix for <rdar://problem/4886844> and lay groundwork for <rdar://problem/4516170> (Back/Forward Cache on Windows)

        * WebCoreSupport/WebCachedPagePlatformData.h: Added.
        (WebCachedPagePlatformData::WebCachedPagePlatformData): Constructor takes a WebDocumentView for later restoration
        (WebCachedPagePlatformData::clear):
        (WebCachedPagePlatformData::webDocumentView):

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::savePlatformDataToCachedPage):
        (WebFrameLoaderClient::transitionToCommittedFromCachedPage): Don't set the DocumentLoader to the Frame here, 
          because that is now done in WebCore.
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2007-12-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dave Kilzer.

        Remove abuse of projectDirPath from WebKit.xcodeproj to fix Production builds.

        * Configurations/WebKit.xcconfig:

2007-12-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Scrub URL out of the tree in preparation for renaming KURL to URL.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary):
        * WebView/WebDataSource.mm:
        (-[WebDataSource _URL]):
        * WebView/WebView.mm:
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):

2007-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - change more editing commands to use WebCore::Editor
        - change to use the new WebCore::Editor::command() function

        * WebView/WebHTMLView.mm: Changed alignCenter, alignJustified, alignLeft,
        alignRight, cut, copy, deleteToMark, indent, insertNewlineIgnoringFieldEditor,
        insertTabIgnoringFieldEditor, outdent, selectAll, selectToMark, setMark,
        subscript, superscript, swapWithMark, underline, unscript, yank, and yankAndSelect
        to use the "forward to WebCore" macro instead of having hand-written implementations.
        (kit): Added function to change a TriState to an AppKit-style tri-state value.
        (-[WebHTMLView coreCommandBySelector:]): Added. No longer converts case of the
        first character or copies the selector name, since the Editor commands are not case
        sensitive any more. Returns a command object.
        (-[WebHTMLView coreCommandByName:]): Added.
        (-[WebHTMLView executeCoreCommandBySelector:]): Renamed from callWebCoreCommand:,
        and changed to use the new coreCommandBySelector: method.
        (-[WebHTMLView executeCoreCommandByName:]): Added.
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Changed all the
        methods that call through to WebCore to also use the state() and isEnabled()
        functions on the commands for the menu item state and user interface item enabling.
        (-[WebHTMLView _handleStyleKeyEquivalent:]): Use ToggleBold and ToggleItalic by
        name rather than having local methods for them; no need for methods with a single
        call site.
        (-[WebHTMLView insertParagraphSeparator:]): Use executeCoreCommandByName: rather
        than the deprecated execCommand().
        (-[WebHTMLView doCommandBySelector:]): Changed to use command().execute() rather
        than the deprecated execCommand().
        * WebView/WebHTMLViewInternal.h: Removed some unneeded method declarations.

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        * WebCoreSupport/WebEditorClient.h:
        Renamed handleKeypress() to handleKeyboardEvent(), as it gets both keydowns and keypresses.
        Renamed handleInputMethodKeypress() to handleInputMethodKeydown().
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::handleKeyboardEvent): This change makes sense only remotely, but it helped
        to get tests working. I guess Mac keyboard event handling needs further refactoring.

        * WebView/WebHTMLView.mm:
        (selectorToCommandName): Convert AppKit editing selector name to Editor command name - extracted
        from callWebCoreCommand:.
        (_interceptEditingKeyEvent:shouldSaveCommand:): Insert text from keypress.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):
        Convert incoming platform KeyDown into RawKeyDown, as this is what the view is interested in.

2007-12-10  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Fix for <rdar://problem/5640080> - Database UI delegate calls need to specify WebFrame

        This is because a common UI case is to want to know the originating URL of a Database

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation):

        * WebView/WebUIDelegatePrivate.h:

        * WebView/WebView.mm:
        (CallDelegateReturningUnsignedLongLong):
        (CallUIDelegateReturningUnsignedLongLong):
        * WebView/WebViewInternal.h:

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

        Reviewed by Mark Rowe.

        <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x

        * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
          so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.

2007-12-10  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        Fixed: <rdar://problem/4290098> Right-mouse click on element doesn't call onmousedown handler
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView menuForEvent:]): Match behavior of other browsers by sending an onmousedown event for right clicks.

2007-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
        
        Fixes <rdar://problem/5620249> Must disable SVG animation
        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
        
        Minor updates to the feature flags used.

        * Configurations/WebKit.xcconfig:
        * DOM/WebDOMOperations.mm:

2007-12-07  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker and Tim Hatcher.

        - speculative fix for <rdar://problem/5400159> CrashTracer: [USER] 726 crashes
          in Safari at com.apple.WebKit: -[WebHTMLView(WebPrivate) _updateMouseoverWithFakeEvent] + 389

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]): Only schedule the mouseover timer if we are in a window
        and not closed. That's because viewDidMoveToWindow and close are the entry points for cancelling.
        (-[WebHTMLView close]): Add code to cancel both timers. Needed for the case where the entire
        window goes away, and the view is never removed from the window.
        (-[WebHTMLView viewDidMoveToWindow]): Don't do work if the view is closed.

2007-12-07  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - http://bugs.webkit.org/show_bug.cgi?id=15981
          speed up visited-link code a bit

        * History/WebHistory.mm: Removed unused Latin-1 code path.
        (-[_WebCoreHistoryProvider containsURL:length:]): Updated for method name change.

2007-12-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added a forwarding header, since we now #include nodes.h through some
        JavaScriptCore headers.

        * ForwardingHeaders/wtf/ListRefPtr.h: Added.

2007-12-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver's rubber stamp

        Let's go ahead and call the correct UI Delegate method, shall we?

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation): Call the correct UI delegate

2007-12-06  Adam Roben  <aroben@apple.com>

        Remove some assertions we know can fire and replace them with a FIXME

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2007-12-06  Timothy Hatcher  <timothy@apple.com>

        Change the ASSERT added for the previous fix. The ASSERT was firing for 10.5.0.
        Only assert if the major version is zero, since zero is handled in the other cases.

        * WebView/WebView.mm:
        (callGestalt): Remove the ASSERT.
        (createMacOSXVersionString): ASSERT that major is not zero.

2007-12-06  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - fix <rdar://problem/5513394> No way to detect Tiger vs Leopard from Safari's user agent string

        * WebView/WebView.mm:
        (callGestalt): Added.
        (createMacOSXVersionString): Added.
        (-[WebView _userAgentWithApplicationName:andWebKitVersion:]): Added Mac OS X version string,
        right after the string "Mac OS X", but with underscores instead of dots to avoid the dreaded
        "4." problem (old libraries that think a "4." anywhere in the user agent means Netscape 4).
        (-[WebView _userAgentForURL:]): Fixed incorrect bug numbers.

2007-12-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Third step in refactoring JSGlobalObject: Moved data members and data
        member access from Interpreter to JSGlobalObject.
        
        * WebView/WebFrame.mm:
        (-[WebFrame _attachScriptDebugger]):

2007-12-04  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://5621435>
        - Security Fix. Instead of having it off by default, WebKit now must
        explicitly turn off local-resource restriction when needed for backwards
        coimpatibility reasons.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2007-12-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin Deckers rubberstamp

        Disclose and export the Databases Directory defaults key

        * Storage/WebDatabaseManager.mm:
        * Storage/WebDatabaseManagerPrivate.h:
        * WebKit.exp:

2007-12-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.

        <rdar://problem/5629125> PluginInfoStore needs the ability to return the name of a plug-in for a given MIME type

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory pluginNameForMIMEType:]): Added.

2007-12-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Tweaked the way we typedef and cast these objc_msgSend calls

        * WebView/WebView.mm:
        (CallDelegateReturningUnsignedLongLong):

2007-12-04  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady Eidson (with help from Mark Rowe)
        
        Fixed return values for unsigned-long-long delegate methods

        * WebView/WebView.mm:
        (CallDelegateReturningUnsignedLongLong):
        redid the change that Brady did at home over the weekend but forgot to check in

2007-11-27  Adam Roben  <aroben@apple.com>

        Remove -[WebFrameBridge setNeedsReapplyStyles]

        This functionality is now WebCore's responsibility.

        Reviewed by Hyatt.

        * WebCoreSupport/WebFrameBridge.mm:
        * WebKit.order:

2007-12-04  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        Added deleteOrigin: SPI, which isn't fully implemented

        * Storage/WebDatabaseManagerPrivate.h:
        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager deleteOrigin:]):
        just calls deleteDatabasesWithOrigin: for now, but needs to delete origin itself too

2007-12-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Remove a check for early versions of Leopard CFNetwork now that
        Leopard has shipped.

        * Misc/WebKitVersionChecks.h: Remove WEBKIT_FIRST_CFNETWORK_VERSION_WITH_LARGE_DISK_CACHE_FIX.
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]): Remove the early Leopard CFNetwork check.

2007-12-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        Revised fix for: <rdar://problem/5586978> REGRESSION (Safari 2-3): WebKit sometimes doesn't invoke Flash's NPP_SetWindow function and causes a hang

        This fix is exactly the same as chageset 28359 with the exception of an added early return in
        updateAndSetWindow to cover the additional case of when a plug-in isn't drawable.
        
        The CG-based Flash player would sometimes hang because (for CoreGraphics-based plug-ins) our code would
        only call into the NPP_SetWindow() function when we tell the plug-in to draw. This created havoc with 
        Flash because Flash expects the browser to call NPP_SetWindow() and provide a valid graphics context 
        regardless of whether or not it actually needs to draw. 
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]): Removed an incorrect comment and toned
        down an ASSERT that was too strict. 
        (-[WebBaseNetscapePluginView updateAndSetWindow]): Removed an early return for CoreGraphics-based plug-ins
        which would sometimes altogether prevent updating the PortState and calling into a plug-ins NPP_SetWindow()
        function. Also tweaked a comment and added an early return if the plug-in can't draw.

2007-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        * WebCoreSupport/WebFrameLoaderClient.h: Removed obsolete privateBrowsingEnabled.
        * WebCoreSupport/WebFrameLoaderClient.mm: Ditto.
        * WebKit.order: Ditto.

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5346452> Resize event doesn't fire on body element inside a frame

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]): Removed the code
        that checked if the view had resized and sent the resize event, since
        FrameView sends resize events now.
        * WebView/WebHTMLViewInternal.h:

2007-12-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Change WebViewGetResourceLoadDelegateImplementations and WebViewGetFrameLoadDelegateImplementations
        to return a pointer to the implementation struct instead of a copy of the struct. This changes
        all of the callers to dereference the pointer to access the struct fields.

        * Plugins/WebNullPluginView.mm:
        (-[WebNullPluginView reportFailure]):
        * WebCoreSupport/WebFrameBridge.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebFrameLoaderClient::dispatchWillSendRequest):
        (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebFrameLoaderClient::dispatchDidReceiveResponse):
        (WebFrameLoaderClient::willCacheResponse):
        (WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebFrameLoaderClient::dispatchDidFinishLoading):
        (WebFrameLoaderClient::dispatchDidFailLoading):
        (WebFrameLoaderClient::dispatchDidHandleOnloadEvents):
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebFrameLoaderClient::dispatchDidCancelClientRedirect):
        (WebFrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebFrameLoaderClient::dispatchWillClose):
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebFrameLoaderClient::dispatchDidFailLoad):
        (WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        * WebView/WebView.mm:
        (WebViewGetResourceLoadDelegateImplementations):
        (WebViewGetFrameLoadDelegateImplementations):
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):
        * WebView/WebViewInternal.h:

2007-12-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/5539913> 188 crashes in WebViewGetFrameLoadDelegateImplementations
        <rdar://problem/5586095> CrashTracer: [USER] 5000+ crashes in Safari and Dashboard in dispatchDidFailLoading
        <rdar://problem/5607081> CrashTracer: [USER] 2150 crashes in Safari at com.apple.WebKit:
        WebViewGetResourceLoadDelegateImplementations + 28

        * WebView/WebView.mm:
        (-[WebView _cacheResourceLoadDelegateImplementations]): If the delegate is nil, bzero the
        implementation cache. This just prevents us from calling getMethod() multiple times just to zero.
        (-[WebView _cacheFrameLoadDelegateImplementations]): Ditto.
        (WebViewGetResourceLoadDelegateImplementations): Return a zeroed implementations struct
        if the WebView is nil. This fixes the crashes.
        (WebViewGetFrameLoadDelegateImplementations): Ditto.

2007-12-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel.

        Updated to match the JavaScriptCore change to move virtual methods from
        Interpreter to JSGlobalObject.

        * WebView/WebFrame.mm:
        (-[WebFrame globalContext]): Use the toRef function instead of manually
        casting.

2007-12-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim

        Added a default database quota of 5mb to the default WebPreferences

        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]):

2007-11-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen
        
        Added another symbol for WebDatabaseManager clients

        * WebKit.exp:
        added .objc_class_name_WebSecurityOrigin

2007-11-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff

        Add isEqual operator to WebSecurityOrigin

        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin isEqual:]):

2007-11-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin
        
        Tweaks to newly-declared NSString * constants to make them usable from clients

        * Storage/WebDatabaseManagerPrivate.h:
        * Storage/WebDatabaseManager.mm:
        removed "const" from new NSNotification names and userInfo keys; these generate compiler warnings when used
        
        * WebKit.exp:
        export new NSNotification names and userInfo keys so clients can use them

2007-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        Rename WebKitShrinksStandaloneImagesToFitKey to WebKitShrinksStandaloneImagesToFit.
        
        This is safe to do because the preference is off by default and Safari 3, which is the only client that turns it on,
        is using the setter and not messing around with NSUserDefaults.
        
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]):
        (-[WebPreferences shrinksStandaloneImagesToFit]):
        (-[WebPreferences setShrinksStandaloneImagesToFit:]):

2007-11-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Support for <rdar://problem/5556381> and <rdar://problem/5556379>

        Hook up UI Delegate calls for the database engine feature and other small tweaks

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]): Renamed databaseName parameter to databaseIdentifier for clarity
        (-[WebDatabaseManager deleteDatabase:withOrigin:]): Renamed databaseName parameter to databaseIdentifier for clarity
        * Storage/WebDatabaseManagerPrivate.h:

        * Storage/WebDatabaseTrackerClient.h:
        * Storage/WebDatabaseTrackerClient.mm:
        (WebDatabaseTrackerClient::dispatchDidModifyDatabase): Renamed databaseName parameter to databaseIdentifier for clarity

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase): Call through to the UI Delegate
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation): Ditto

        * WebView/WebUIDelegatePrivate.h: Added the two UI Delegate methods

        * WebView/WebView.mm:
        (CallDelegateReturningUnsignedLongLong):
        (CallUIDelegateReturningUnsignedLongLong):
        * WebView/WebViewInternal.h:

2007-11-28  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Added recursive runloop guards.

        * DefaultDelegates/WebScriptDebugServer.m:
        (-[WebScriptDebugServer suspendProcessIfPaused]):

2007-11-29  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix an assertion failure seen on the layout tests, and when closing the window after
        visiting <http://www.coudal.com/losalamos/>.

        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream _destroyStream]): Unlink the file and close the file
        descriptor even when the stream is being destroyed without the load completing. This
        avoids leaking the path and file descriptor, and leaving the temporary file on disk.

2007-11-28  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/5524216> CrashTracer: [USER] 496 crashes in Safari at com.apple.WebCore: WebCore::Frame::eventHandler const + 6

        The CrashTracer shows a variety of crashes in different methods (including keyDown and keyUp). This change adds nil checks for the frame in 
        WebHTMLView to prevent future problems in other methods as well.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView keyDown:]):
        (-[WebHTMLView keyUp:]):
        (-[WebHTMLView flagsChanged:]):
        (-[WebHTMLView _selectionStartFontAttributesAsRTF]):
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        (-[WebHTMLView checkSpelling:]):
        (-[WebHTMLView showGuessPanel:]):
        (-[WebHTMLView indent:]):
        (-[WebHTMLView outdent:]):
        (-[WebHTMLView paste:]):
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView insertText:]):
        (-[WebHTMLView selectionTextRects]):

2007-11-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        - fix <rdar://problem/5596160> fast/events/objc-event-api.html fails when run alone (or first)

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView setDataSource:]): This method calls addMouseMovedObserver
        because addMouseMovedObserver returns early if the dataSource
        is not nil. But if the dataSource is already set (which happens when
        a WebHTMLView is being reused) then addMouseMovedObserver must not
        be called again.

2007-11-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        * Storage/WebDatabaseManager.mm:
        * Storage/WebDatabaseManagerPrivate.h:
        * Storage/WebDatabaseTrackerClient.mm:
        (WebDatabaseTrackerClient::dispatchDidModifyOrigin):
        (WebDatabaseTrackerClient::dispatchDidModifyDatabase):
        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin _initWithWebCoreSecurityOriginData:]):
        * Storage/WebSecurityOriginInternal.h:

2007-11-27  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin, landed by Anders.

        Fixed: <rdar://problem/4610818> CrashTracer: 1533 crashes in Safari at com.macromedia.Flash Player.plugin: native_ShockwaveFlash_TCallLabel + 271131

        The problem was that some Leopard users were still inadvertently using the old Flash 8 plug-in, even though Leopard
        shipped with Flash 9. To avoid loading an older version of a plug-in when a newer version is installed, the plug-in
        database will compare bundle versions and always load the latest version.

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.m:
        (-[WebBasePluginPackage versionNumber]): New method. CFBundleGetVersionNumber doesn't work with all possible versioning schemes,
        but we think for now it's good enough for us.
        * Plugins/WebPluginDatabase.m:
        (considerCandidate): Added a C utility function which compares the current plug-in against a candidate plug-in's version number.
        If both plug-ins have the same bundle ID and the candiate is newer, the current plug-in becomes the candidate.
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]): Calls the new considerCandidate() function.

2007-11-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/5569233> Add the ability to disable author and user CSS styles

        * WebView/WebPreferenceKeysPrivate.h: Define WebKitRespectStandardStyleKeyEquivalentsPreferenceKey.
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]): Default WebKitRespectStandardStyleKeyEquivalentsPreferenceKey to YES.
        (-[WebPreferences authorAndUserStylesEnabled]): Return the setting's BOOL value.
        (-[WebPreferences setAuthorAndUserStylesEnabled:]): Set the setting's BOOL value.
        * WebView/WebPreferencesPrivate.h: Add authorAndUserStylesEnabled and setAuthorAndUserStylesEnabled:.
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Update WebCore::Settings::authorAndUserStylesEnabled.

2007-11-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Provide API for setting the default storage quota per database origin

        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        (-[NSMutableDictionary _webkit_setUnsignedLongLong:forKey:]): Helper for UINT64 preferences

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.m:
        (-[WebPreferences _unsignedLongLongValueForKey:]): Helper for UINT64 prefs
        (-[WebPreferences _setUnsignedLongLongValue:forKey:]): Ditto
        (-[WebPreferences defaultDatabaseQuota]):
        (-[WebPreferences setDefaultDatabaseQuota:]):
        * WebView/WebPreferencesPrivate.h:

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Set the WebCore Settings version of the default storage pref

2007-11-26  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - some middle-mouse-button-related fixes

        These don't affect Safari since it maps the middle mouse button to the command key,
        but that might not always be the case for future versions.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView otherMouseDown:]): Pass through middle mouse down events to WebCore.
        (-[WebHTMLView otherMouseDragged:]): Ditto, for drag events.
        (-[WebHTMLView otherMouseUp:]): Ditto, for up events.

        * WebView/WebPolicyDelegate.h: Fixed inaccurate documentation of WebActionButtonKey.

2007-11-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        Get rid of the WebSecurityOriginPrivate object and store 
        the WebCore::SecurityOriginData pointer in the _private field of
        the WebSecurityOrigin object instead.
        
        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager databasesWithOrigin:]):
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]):
        (-[WebDatabaseManager deleteDatabasesWithOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin initWithProtocol:domain:port:]):
        (-[WebSecurityOrigin protocol]):
        (-[WebSecurityOrigin domain]):
        (-[WebSecurityOrigin port]):
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        (-[WebSecurityOrigin dealloc]):
        (-[WebSecurityOrigin finalize]):
        (-[WebSecurityOrigin _initWithWebCoreSecurityOriginData:]):
        (-[WebSecurityOrigin _core]):
        * Storage/WebSecurityOriginInternal.h:

2007-11-26  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam Roben.

        Bug 16137: Web Inspector window on Leopard should have a unified toolbar and window title
        http://bugs.webkit.org/show_bug.cgi?id=16137

        Create the Web Inspector window with the textured style. Set the content border
        thickness for the top of the window or the height of the toolbar. Also make the
        window's bottom corners square, since a normal textured window normally has
        rounded bottom corners.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]):

2007-11-24  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.

        * Plugins/WebBaseNetscapePluginStream.mm:
        (CarbonPathFromPOSIXPath): Use WebCFAutorelease as this also works on Tiger.

2007-11-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Fix <rdar://problem/5432686> 333MB RPRVT seems to leak @ www.43folders.com (1hr plug-in stream).
        http://bugs.webkit.org/show_bug.cgi?id=13705

        Have NP_ASFILE and NP_ASFILEONLY streams write the data to disk as they receive it rather than
        dumping the data to disk in a single go when the stream has completed loading.  On a test case
        involving a 150MB Flash movie being streamed from a local web server this reduces memory consumption
        on page load from around 400MB to 22MB.

        The only plugin I have found that uses NP_ASFILE or NP_ASFILEONLY on the Mac is our NetscapeMoviePlugin
        example code so the NP_ASFILE portion of this change has not had any testing with a real-world plugin.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (-[WebBaseNetscapePluginStream _destroyStream]): Update to work with paths as NSStrings.
        (-[WebBaseNetscapePluginStream _deliverDataToFile:]): Open the file if it is not already open, and write any data
        to disk.
        (-[WebBaseNetscapePluginStream finishedLoading]): If the stream is NP_ASFILE or NP_ASFILEONLY we need to ensure
        that the file exists before _destroyStream passes it to the plugin.  Simulating the arrival of an empty data block
        ensure that the file will be created if it has not already.
        (-[WebBaseNetscapePluginStream receivedData:]):
        (CarbonPathFromPOSIXPath):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginViewFinishedLoading:]): Data is dealt with incrementally so there's no need to pass
        it to finishedLoading.
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]): Ditto.

2007-11-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.
        
        Fixed <rdar://problem/3759190> allow input methods the option of processing mouse events themselves

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView mouseDown:]):

2007-11-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto.

        - http://bugs.webkit.org/show_bug.cgi?id=15811
          WebKit plug-ins can re-enter WebKit under attach()
          <rdar://problem/5577978>

        * Plugins/WebNullPluginView.mm:
        (-[WebNullPluginView viewDidMoveToWindow]): Removed workaround for the
        above bug that added as part of fixing
        <http://bugs.webkit.org/show_bug.cgi?id=15804>.

2007-11-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Fix WebKit to build without warnings under GCC 4.2.

        * Configurations/Base.xcconfig:

2007-11-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Changes due to <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings

        Update format strings to use format specifiers that match the argument types.

        * Misc/WebGraphicsExtras.c:
        (WebConvertBGRAToARGB):

2007-11-19  Brady Eidson <beidson@apple.com>

        Reviewed by Maciej

        Finished hooking up the WebKit API for database management.
        Most of the API is actually implemented in WebCore and some of those methods might
        only be stubs for now.

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager origins]): Call through to the WebCore tracker and construct an API result
        (-[WebDatabaseManager databasesWithOrigin:]): Ditto
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]): Ditto

        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]): Call through to WebCore
        (-[WebSecurityOrigin quota]): Ditto
        (-[WebSecurityOrigin setQuota:]): Ditto
        (-[WebSecurityOrigin _core]): Get WebCore version of this object
        * Storage/WebSecurityOriginInternal.h:

2007-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 13470: i18n: The Web Inspector is not localizable
        http://bugs.webkit.org/show_bug.cgi?id=13470

        Implement the localizedStringsURL() client method to return the
        localized URL of InspectorLocalizedStrings.js in WebCore.

        * WebCoreSupport/WebInspectorClient.h: Added localizedStringsURL.
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::localizedStringsURL): Added.
        (WebInspectorClient::updateWindowTitle): Localized the window title.
        (-[WebInspectorWindowController init]): Remove a FIXME that dosen't make sense anymore.
        (-[WebInspectorWindowController initWithInspectedWebView:]): Code style cleanup.

2007-11-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15969
        Eliminate Editor::deleteRange()

        * WebView/WebHTMLView.mm:
        (+[WebHTMLView initialize]):
        (-[WebHTMLView yank:]):
        (-[WebHTMLView yankAndSelect:]):
        (-[WebHTMLView setMark:]):
        (-[WebHTMLView deleteToMark:]):
        (-[WebHTMLView selectToMark:]):
        (-[WebHTMLView swapWithMark:]):
        Pushed all kill ring methods to WebCore. They were guilty of using Editor::deleteRange()!

2007-11-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Build WebCore as a sub-framework of WebKit in all configurations.

        * Configurations/WebKit.xcconfig:

2007-11-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Brady

        * WebKit.exp:
        Exported some new database-related symbols

2007-11-16  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        Database management API tweaks

        Fleshed out "WebSecurityOrigin" to be the API object representing an origin.  This relieves some
        burden off WebDatabaseManager and allows usage/quota operations on the SecurityOrigin object itself

        Also added a new subdirectory for Storage related API - Why are we afraid to add new directories to
        the WebKit tree?

        * Misc/WebSecurityOrigin.mm: Removed.
        * Misc/WebSecurityOriginInternal.h: Removed.
        * Misc/WebSecurityOriginPrivate.h: Removed.

        * Storage/WebDatabaseManager.mm: Work in terms of WebSecurityOrigin
        * Storage/WebDatabaseManagerPrivate.h:

        * Storage/WebSecurityOrigin.mm: Added.
        (-[WebSecurityOriginPrivate initWithProtocol:domain:port:]):
        (-[WebSecurityOriginPrivate initWithWebCoreSecurityOrigin:]):
        (-[WebSecurityOriginPrivate finalize]):
        (-[WebSecurityOriginPrivate dealloc]):
        (-[WebSecurityOrigin initWithProtocol:domain:]):
        (-[WebSecurityOrigin initWithProtocol:domain:port:]):
        (-[WebSecurityOrigin protocol]):
        (-[WebSecurityOrigin domain]):
        (-[WebSecurityOrigin port]):
        (-[WebSecurityOrigin usage]): 
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]): Clients will set quotas on the WebSecurityOrigin object itself
        (-[WebSecurityOrigin dealloc]):
        (-[WebSecurityOrigin _initWithWebCoreSecurityOriginData:]):
        * Storage/WebSecurityOriginInternal.h: Added.
        * Storage/WebSecurityOriginPrivate.h: Added.

2007-11-15  Brady Eidson  <beidson@apple.com>

        Reviewed by John

        Stubbing out everything required for a WebKit API for databases

        These interfaces seem to provide everything we need for UI and management at the browser level

        * Misc/WebDatabaseManager.h: Removed.
        * Misc/WebDatabaseManager.mm: Removed.
        * Misc/WebDatabaseManagerPrivate.h: Removed.

        * Misc/WebSecurityOrigin.mm: Added. Object that acts as a container for the "SecurityOrigin tuple"
          (protocol, domain, and port)
        (-[WebSecurityOriginPrivate initWithProtocol:domain:port:]):
        (-[WebSecurityOriginPrivate dealloc]):
        (-[WebSecurityOrigin initWithProtocol:domain:]):
        (-[WebSecurityOrigin initWithProtocol:domain:port:]):
        (-[WebSecurityOrigin protocol]):
        (-[WebSecurityOrigin domain]):
        (-[WebSecurityOrigin port]):
        (-[WebSecurityOrigin dealloc]):
        (-[WebSecurityOrigin _initWithWebCoreSecurityOriginData:WebCore::]):
        * Misc/WebSecurityOriginInternal.h: Added.
        * Misc/WebSecurityOriginPrivate.h: Added.

        * Storage/WebDatabaseManager.mm: Added.
        (+[WebDatabaseManager sharedWebDatabaseManager]):
        (-[WebDatabaseManager origins]):  Get a list of all origins currently tracked
        (-[WebDatabaseManager detailsForOrigin:]): Get the current usage and current quota for the given origin
        (-[WebDatabaseManager databasesWithOrigin:]): Get all databases for a certain origin
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]): Get all details about a specific database
        (-[WebDatabaseManager setQuota:forOrigin:]): Change origin-wide quota
        (-[WebDatabaseManager deleteAllDatabases]):
        (-[WebDatabaseManager deleteAllDatabasesWithOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        * Storage/WebDatabaseManagerPrivate.h: Added.
        * Storage/WebDatabaseManagerInternal.h: Added.
        (WebKitInitializeDatabasesIfNecessary): One-time initialization of database-related things

        * Storage/WebDatabaseTrackerClient.h: Added. Stubbed out client for notifications
        * Storage/WebDatabaseTrackerClient.mm: Added.
        (WebDatabaseTrackerClient::sharedWebDatabaseTrackerClient):
        (WebDatabaseTrackerClient::WebDatabaseTrackerClient):
        (WebDatabaseTrackerClient::~WebDatabaseTrackerClient):
        (WebDatabaseTrackerClient::dispatchDidModifyOrigin):
        (WebDatabaseTrackerClient::dispatchDidModifyDatabase):

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Do one-time initialization of
          Database-related things here

2007-11-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.
        
        Renamed Shared to RefCounted.

        * ForwardingHeaders/wtf/RefCounted.h: Copied from WebKit/mac/ForwardingHeaders/wtf/Shared.h.
        * ForwardingHeaders/wtf/Shared.h: Removed.
        * WebCoreSupport/WebContextMenuClient.h:

2007-11-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Moved Shared.h into wtf so it could be used in more places.

        * ChangeLog:
        * WebCoreSupport/WebContextMenuClient.h:

2007-11-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin.

        removed recently-added PreferredType concept; we found a better way to do what
        ths was accomplishing

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):
        removed use of PreferredType

2007-11-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.
        
        - fixed <rdar://problem/5567954> REGRESSION (Safari 2-3): Autofill no longer automatically fills in 
        form fields other than the one you're typing into

        * WebCoreSupport/WebEditorClient.mm:
        (selectorForKeyEvent):
        correct the key identifier strings for Tab and Esc; these were updated in WebCore as part of r21445
        but didn't get updated here.

2007-11-12  Josh Aas  <joshmoz@gmail.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=15946
          add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView setVariable:value:]):

2007-11-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15954
        Move DOM Selection operations out of SelectionController

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _expandSelectionToGranularity:]):
        (-[WebHTMLView selectToMark:]):
        (-[WebHTMLView swapWithMark:]):
        * WebView/WebView.mm:
        (-[WebView setSelectedDOMRange:affinity:]):
        Adapted for SelectionController::setSelectedRange() now returning a bool.

2007-11-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin and Geoff.

        <rdar://problem/5522011> The content of the password field of 
        Safari is displayed by reconversion.

        Some input methods (notably Kotoeri) can incorrectly provide 
        access to the raw text of a password field.  To work around 
        this we forcefully override the inputContext whenever a password
        field is active.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView inputContext]):

2007-11-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher
        
        - speculative fix for <rdar://problem/5509989> CrashTracer: [USER] 1 crash in Safari at com.apple.WebKit: 
        -[WebPDFView(FileInternal) _updatePreferencesSoon] + 56
        
        The crash is probably due to messaging a dealloc'ed dataSource ivar. The dataSource ivar isn't retained
        by this class, but should be. (It is retained by WebHTMLView, e.g.).

        * WebView/WebPDFView.mm:
        (-[WebPDFView dealloc]):
        release dataSource ivar
        (-[WebPDFView setDataSource:]):
        retain dataSource ivar

2007-11-09  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Timothy Hatcher.
        
        This patch is for the WebKit side of <rdar://problem/5591115>.
        We need a way to tell context menu navigations, such as "Open in New Window"
        to override any sort of browser preference for tab based navigation.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):
        Pass up the new preferredType parameter as a string.
        
2007-11-09  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        <rdar://problem/5103720> REGRESSION: [WebView stringByEvaluatingJavaScriptFromString:] fails if "return" is used

        Extend the linked on or after check to every application when a script passed to
        stringByEvaluatingJavaScriptFromString: has a return statement. Before the check
        was limited to VitalSource Bookshelf, but other developers are running into this.

        * Misc/WebKitVersionChecks.h: Add the WEBKIT_FIRST_VERSION_WITHOUT_JAVASCRIPT_RETURN_QUIRK define.
        * WebView/WebDocumentLoaderMac.mm:
        (needsDataLoadWorkaround): Use WEBKIT_FIRST_VERSION_WITHOUT_ADOBE_INSTALLER_QUIRK sicne the
          WebKitLinkedOnOrAfter check here was about the Adobe installer, not VitalSource.
        * WebView/WebView.mm:
        (-[WebView stringByEvaluatingJavaScriptFromString:]): Remove the bundle ID check and use
          WEBKIT_FIRST_VERSION_WITHOUT_JAVASCRIPT_RETURN_QUIRK for the WebKitLinkedOnOrAfter call.

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Build Fix.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::windowObjectCleared):

2007-11-07  Darin Adler  <darin@apple.com>

        Reviewed by Steve.

        - removed some unused WebCore bridge methods

        * WebCoreSupport/WebFrameBridge.mm: Removed issueTransposeCommand and overrideMediaType.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::overrideMediaType): Changed to call WebView directly instead of
        using the bridge object.

2007-11-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dave Kilzer.

        Move Mac files from WebKit into WebKit/mac.

        * Carbon: Copied from WebKit/Carbon.
        * ChangeLog: Copied from WebKit/ChangeLog.
        * ChangeLog-2002-12-03: Copied from WebKit/ChangeLog-2002-12-03.
        * ChangeLog-2006-02-09: Copied from WebKit/ChangeLog-2006-02-09.
        * ChangeLog-2007-10-14: Copied from WebKit/ChangeLog-2007-10-14.
        * Configurations: Copied from WebKit/Configurations.
        * DOM: Copied from WebKit/DOM.
        * DefaultDelegates: Copied from WebKit/DefaultDelegates.
        * ForwardingHeaders: Copied from WebKit/ForwardingHeaders.
        * History: Copied from WebKit/History.
        * Info.plist: Copied from WebKit/Info.plist.
        * MigrateHeaders.make: Copied from WebKit/MigrateHeaders.make.
        * Misc: Copied from WebKit/Misc.
        * Panels: Copied from WebKit/Panels.
        * Plugins: Copied from WebKit/Plugins.
        * PublicHeaderChangesFromTiger.txt: Copied from WebKit/PublicHeaderChangesFromTiger.txt.
        * Resources: Copied from WebKit/Resources.
        * WebCoreSupport: Copied from WebKit/WebCoreSupport.
        * WebInspector: Copied from WebKit/WebInspector.
        * WebKit.exp: Copied from WebKit/WebKit.exp.
        * WebKit.order: Copied from WebKit/WebKit.order.
        * WebKitPrefix.h: Copied from WebKit/WebKitPrefix.h.
        * WebView: Copied from WebKit/WebView.
        * icu: Copied from WebKit/icu.

2007-11-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15847
        Some editing cleanup

        No change in functionality.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView deleteToEndOfLine:]):
        (-[WebHTMLView deleteToEndOfParagraph:]):
        WebCore had a duplicate of the same logic already. We are passing a boundary value to
        a function that expects granularity, this may need to be straightened out in the future.

2007-11-05  John Sullivan  <sullivan@apple.com>

        * WebView/WebView.mm:
        (-[WebView _searchWithSpotlightFromMenu:]):

        Teeny style tweak to test svn access on other machine

2007-11-05  John Sullivan  <sullivan@apple.com>

        * WebView/WebView.mm:
        (-[WebView computedStyleForElement:pseudoElement:]):
        
        Teeny style tweak to test svn access

2007-11-02  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Darin Adler.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:createWebViewWithRequest:windowFeatures:]):
        Forward the UI delegate to call webView:createWebViewWithRequest: if
        this method doesn't exist.
        
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchCreatePage):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        * WebView/WebView.mm:
        (-[WebView _openNewWindowWithRequest:]):
        Revised to use new webView:createWebViewWithRequest:windowFeatures: callback.
        
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):
        Added a new createWindow that accepts 3 parameters, so we can pass up windowFeatures to the chrome.
        Removed createModalDialog to use new createWindow function.
        
        * WebView/WebUIDelegatePrivate.h:
        Added new webView:createWebViewWithRequest:windowFeatures: method.

2007-11-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        http://bugs.webkit.org/show_bug.cgi?id=15835

        Small adaptations to new KJS::List class.

        * ForwardingHeaders/kjs/value.h: Added.

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Sort files(...); sections of Xcode project files.

        Rubber-stamped by Darin.

        * WebKit.xcodeproj/project.pbxproj:

2007-11-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin.
        
        Add method to enable video composition.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix problem I ran into while doing some testing on Mac for
          <rdar://problem/5530185> WebKit does not show <object>
          fallback content when both URL and MIME type is omitted

        I don't know how to reproduce this failure in DumpRenderTree, so there is no
        regression test.

        * Plugins/WebNullPluginView.h: Removed some unneeded declarations, including
        the didSendError local variable. Instead we just set the error to nil once
        we've sent it.
        * Plugins/WebNullPluginView.mm:
        (-[WebNullPluginView initWithFrame:error:DOMElement:]): Refactored so that
        the null plug-in image code is separate from the rest of the function and
        so that the whole thing is not inside an if statement. Also don't hold a
        reference to the DOM element if there is no error to report.
        (-[WebNullPluginView reportFailure]): Added. Does the actual delegate
        callback. Happens back at the top level of the run loop so it doesn't
        fire deep inside layout. Also wrote this so that it is guaranteed not to
        reenter and so that it can handle the case where the delegate destroys
        the world (including this object). NOTE: This is not a real, general
        solution to the problem of plug-ins that do work inside layout. We will need
        a more general fix that works for other plug-ins, and we'll track that with
        a separate bug report.
        (-[WebNullPluginView viewDidMoveToWindow]): Removed most of the code;
        changed so it just does a performSelector:afterDelay:0.

2007-11-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15780
        Bug 15780: WebFrameLoaderClient: WebActionElementKey wrong if view is scrolled

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary): Retrieve the mouse event coordinates
        in the page coordinate system rather than the client area coordinate system.

2007-11-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix an assertion failure when Command-Tabbing out of Safari

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView flagsChanged:]): Avoid passing key code 0 down to
        WebCore.

2007-11-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Oliver Hunt.
        
        <rdar://problem/5195056> Huge plain text pastes are slow, time spent in ApplyStyleCommand::doApply
        
        No need to match style when pasting plain text, since the fragment we build for plain text
        won't have any style information on it.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]): There's no
        longer a need to know whether this function chosePlaintext.
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        (-[WebHTMLView _documentFragmentFromPasteboard:]):

2007-10-31  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.

        Move the developer extras preference to WebPreferences.

        * WebView/WebPreferenceKeysPrivate.h: Add WebKitDeveloperExtrasEnabledPreferenceKey
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]): Initialize WebKitDeveloperExtrasEnabledPreferenceKey to NO.
        (-[WebPreferences developerExtrasEnabled]): Check DisableWebKitDeveloperExtras, WebKitDeveloperExtras
          and IncludeDebugMenu in addition to WebKitDeveloperExtrasEnabledPreferenceKey.
        (-[WebPreferences setDeveloperExtrasEnabled:]): Set WebKitDeveloperExtrasEnabledPreferenceKey.
        * WebView/WebPreferencesPrivate.h: Add developerExtrasEnabled and setDeveloperExtrasEnabled:.
        * WebView/WebView.mm:
        (+[WebView _developerExtrasEnabled]): Removed.
        (-[WebView _preferencesChangedNotification:]): Check the WebPreferences object for developerExtrasEnabled.
        * WebView/WebViewPrivate.h: Removed _developerExtrasEnabled.

2007-10-30  David D. Kilzer  <ddkilzer@webkit.org>

        Generated files missing from WebCore's Xcode project file
        <http://bugs.webkit.org/show_bug.cgi?id=15406>

        Reviewed by Darin.

        Added the following private header files to MigrateHeaders.make:

        - DOMCSSStyleSheetPrivate.h
        - DOMEventPrivate.h
        - DOMHTMLCollectionPrivate.h
        - DOMHTMLEmbedElementPrivate.h
        - DOMHTMLIFrameElementPrivate.h
        - DOMHTMLObjectElementPrivate.h
        - DOMHTMLSelectElementPrivate.h

        * MigrateHeaders.make:

2007-10-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Some SPIs for media support.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2007-10-29  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John Sullivan.

        Various semi-related changes:
        - A WebView can now be asked for it's WebInspector. There is one
          WebInspector per WebView. 
        - Refactor the WebInspector class and move obsolete methods to
          a special category.
        - Add new WebInspector methods to show, hide and show the
          console/timeline panels.
        - Add an isDisabled method to WebCache.
        - Allow WebLocalizableStrings.h to be used in C files.

        * Misc/WebCache.h: Add isDisabled.
        * Misc/WebCache.mm:
        (+[WebCache isDisabled]): New method.

        * Misc/WebLocalizableStrings.h: Changes to allow use in plain C files.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): Call super if already visible
          so the window will be ordered front.
        (-[WebInspectorWindowController showWebInspector:]): Method used by menu items,
          so they are enabled and work when the Inspector window is key.
        (-[WebInspectorWindowController showErrorConsole:]): Ditto.
        (-[WebInspectorWindowController showNetworkTimeline:]): Ditto.

        * WebInspector/WebInspector.h: Add and remove methods.
        * WebInspector/WebInspector.mm:
        (-[WebInspector webViewClosed]): Called when the WebView is closed/dealloced.
          Clears the _webView pointer.
        (-[WebInspector show:]): Calls thru to the Page's InspectorController.
        (-[WebInspector showConsole:]): Ditto.
        (-[WebInspector showTimeline:]): Ditto.
        (-[WebInspector close:]): Ditto.
        (-[WebInspector attach:]): Ditto.
        (-[WebInspector detach:]): Ditto.
        (+[WebInspector sharedWebInspector]): Moved to the obsolete category.
        (+[WebInspector webInspector]): Ditto.
        (-[WebInspector setWebFrame:]): Ditto.
        (-[WebInspector window]): Ditto.
        (-[WebInspector showWindow:]): Ditto.

        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]): Release the WebInspector.
        (-[WebView _close]): Call webViewClosed on the WebInspector.
        (-[WebView inspector]): Create a WebInspector if needed and return it.
        * WebView/WebViewPrivate.h: Add the inspector method.

2007-10-30  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebKit part of fix for http://bugs.webkit.org/show_bug.cgi?id=10577
        <rdar://problem/5103625> REGRESSION: Caps lock icon should show in password fields

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView flagsChanged:]): Call capsLockStateMayHaveChanged so WebCore knows it may have to update a password field.
        (+[WebHTMLView _postFlagsChangedEvent:]): Added a comment with a Radar number for why this isn't just in flagsChanged.
        (-[WebHTMLView scrollWheel:]): Instead of calling the next responder explicitly, we can just call super, which will take care of this.

2007-10-27  Mark Ambachtsheer  <mark.a@apple.com>

        Reviewed by Darin.

        Fix for bug 15710, When QD plugins draw to an offscreen bitmap and the plugin is not at 
        (0, 0) the clipping rectangle is not correct.
        Added the origin to the window clip rectangle coordinates to account for plugins that
        don't originate at (0,0); affects code for offscreen GWorlds only.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):

2007-10-26  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        Adding WebKitSystemInterface support for the caps lock indicator

        * WebCoreSupport/WebSystemInterface.m: (InitWebCoreSystemInterface):

2007-10-25  David Hyatt  <hyatt@apple.com>

        Fix for bug 15672, backgrounds don't tile properly inside transforms.  This patch fixes tiling
        of backgrounds inside CSS transforms and also of HTML content with background images inside SVG
        transforms.

        Reviewed by aroben and mmitz

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):
        * WebKit.xcodeproj/project.pbxproj:

2007-10-25  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher
        
        Removed the support for toggling whether WebKit uses the 10.5 PDFKit improvements. Now it
        always does, when available.

        * WebView/WebPreferencesPrivate.h:
        removed _usePDFPreviewView and _setUsePDFPreviewView:. Note that these were guarded with
        a comment that says that they can be removed when no longer needed. That time is now.

        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]):
        removed WebKitUsePDFPreviewViewPreferenceKey
        (-[WebPreferences _usePDFPreviewView]):
        removed
        (-[WebPreferences _setUsePDFPreviewView:]):
        removed

        * WebView/WebPDFView.mm:
        (-[WebPDFView initWithFrame:]):
        don't check _usePDFPreviewView
        
        * WebView/WebPreferenceKeysPrivate.h:
        removed WebKitUsePDFPreviewViewPreferenceKey
        
2007-10-24  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/5069711> OpenSource version of libWebKitSystemInterface.a is Tiger only, causes issues if used on Leopard

        Use the WebKitSystemInterface that matches the system version.

        * Configurations/DebugRelease.xcconfig:
        * WebKit.xcodeproj/project.pbxproj:

2007-10-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/5554130> DatabaseTracker.o has a global initializer

        * Misc/WebDatabaseManager.mm:
        (WebKitSetWebDatabasesPathIfNecessary): Call the member function instead of a static one

2007-10-23  Mark Rowe  <mrowe@apple.com>

        Build fix for Eric's build fix in r26916.

        * MigrateHeaders.make:

2007-10-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        * MigrateHeaders.make: copy over font-face related DOM headers

2007-10-22  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.
        
        Fix for local database support after r26879
        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set

        * Configurations/WebKit.xcconfig:

2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Tim Hatcher

        Added support for Chrome prompts required by the Storage API
        Added support API for future managing of databases from the WebKit client
        Added preference and initialization for the databases path

        * Misc/WebDatabaseManager.h: Added.  WebDatabaseManager is how a WebKit application can list and
          remove the current available databases
        * Misc/WebDatabaseManager.mm: Added.
        (+[WebDatabaseManager origins]):
        (+[WebDatabaseManager databasesWithOrigin:]):
        (+[WebDatabaseManager deleteAllDatabases]):
        (+[WebDatabaseManager deleteAllDatabasesWithOrigin:]):
        (+[WebDatabaseManager deleteDatabaseWithOrigin:named:]):
        (WebKitSetWebDatabasesPathIfNecessary): Setup the database path
        * Misc/WebDatabaseManagerPrivate.h: Added.

        * WebCoreSupport/WebChromeClient.h: Support for calling the delegate to run the prompt for 
          an origin exceeding its size limit
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runDatabaseSizeLimitPrompt):
        * WebKit.xcodeproj/project.pbxproj:
        * WebView/WebUIDelegate.h:

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Setup the database path
        * WebView/WebViewInternal.h:

2007-10-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher
        
        - fixed <rdar://problem/5540325> REGRESSION (2.0.4-3): History menu looks odd after clearing history

        * History/WebHistory.mm:
        (-[WebHistoryPrivate removeAllItems]):
        This was fallout from r25275. We need to clear the orderedLastVisitedDays cache here, in addition
        to the other places where it's cleared.

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Tiger build fix.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _MIMETypeOfResponse:]):

2007-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - fix <rdar://problem/5313523>
        REGRESSION(Leopard): http/tests/incremental/slow-utf8-text.pl fails on Leopard

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::makeDocumentView): Changed to use _responseMIMEType.
        * WebView/WebDataSource.mm:
        (-[WebDataSource _MIMETypeOfResponse:]): Added. Works around
        <rdar://problem/5321972> by testing for the case of an NSHTTPURLResponse
        with a MIMEType of application/octet-stream and a Content-Type header
        starting with text/plain and returning text/plain as the MIME type in
        that case.
        (-[WebDataSource _responseMIMEType]): Added. Used to get the correct
        response MIME type.
        (-[WebDataSource _isDocumentHTML]): Changed to use _responseMIMEType.
        (-[WebDataSource _makeRepresentation]): Ditto.
        (-[WebDataSource mainResource]): Ditto.
        (-[WebDataSource subresources]): Changed to use _MIMETypeOfResponse and
        pass the MIME type explicitly.
        (-[WebDataSource subresourceForURL:]): Ditto.
        * WebView/WebDataSourcePrivate.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView _makeDocumentViewForDataSource:]): Changed to use
        _responseMIMEType.
        * WebView/WebResource.mm:
        (-[WebResource _initWithData:URL:response:MIMEType:]): Changed this
        method to take a MIME type instead of extracting it from the response,
        so that WebDataSource could pass the correct MIME type.
        * WebView/WebResourcePrivate.h:

2007-10-17  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix <rdar://problem/5183775> Uninitialized memory in -[WebDynamicScrollBarsView updateScrollers]

        * WebView/WebDynamicScrollBarsView.m: (-[WebDynamicScrollBarsView updateScrollers]):
        Change code path so it doesn't dispatch a method that returns an NSSize passing a nil object.
        It's safe to do that for functions that return integers or pointers, but not structures.

2007-10-16  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Timothy.

        <rdar://problem/5544354> Wrong delegate method called in
        WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad()

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad): Fixed selector name.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - moved transpose command implementation into WebCore

        * WebView/WebHTMLView.mm: Removed transpose: and replaced it with standard WebCore forwarding.

2007-10-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej and Geoff (and looked over by Eric).

        - http://bugs.webkit.org/show_bug.cgi?id=15519
          eliminate use of <ctype.h> for processing ASCII

        * ForwardingHeaders/wtf/ASCIICType.h: Added.
        * ForwardingHeaders/wtf/DisallowCType.h: Added.

        * WebKitPrefix.h: Include DisallowCType.h.

        * Misc/WebNSURLExtras.mm: (-[NSURL _web_URLWithLowercasedScheme]): Use toASCIILower.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView callWebCoreCommand:]): Use toASCIIUpper.
        (-[WebTextCompleteController filterKeyDown:]): Add a list of specific character codes,
        instead of using ispunct.

2007-10-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben
        
        Cleaned up localizable strings

        * English.lproj/Localizable.strings:
        updated
        * StringsNotToBeLocalized.txt:
        updated
        * WebKit.xcodeproj/project.pbxproj:
        StringsNotToBeLocalized.txt recently moved but project file wasn't updated to match; now it is

2007-10-15  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin Adler.
        
        Fixed: <rdar://problem/5520541> REGRESSION: Broken image when forwarding certain email on Tiger
        
        * WebCoreSupport/WebFrameBridge.mm: The problem was that we were loading Mail's WebKit plug-in
        too soon, which borked some necessary housekeeping on behalf of Mail. The fix is to add a quirk
        that treats Tiger Mail's WebKit plug-in like a Netscape plug-in, thus ensuring the plug-in will
        load during first layout and not attach time. For this plug-in, loading at first layout is 
        expected and is consistent with Safari 2 behavior.

2007-10-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Geoff Garen
        
        Replaced NS_DURING/NS_HANDLER with @try/@catch throughout WebKit

        I made the following changes:
        - replaced NS_DURING with @try, and added opening brace if there wasn't one
        - replaced NS_HANDLER with @catch (NSException *localException), and added braces if there weren't any
        - removed NS_ENDHANDLER, and added a closing brace if there wasn't one
        - in a couple of places, fixed indentation therein

        * Misc/WebIconDatabase.mm:
        (objectFromPathForKey):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawSingleRect:]):
        (-[WebHTMLView beginDocument]):
        (-[WebHTMLView deleteToMark:]):
        * WebView/WebView.mm:
        (-[WebView initWithCoder:]):

== Rolled over to ChangeLog-2007-10-14 ==
