2009-02-26  Mark Rowe  <mrowe@apple.com>

        Merge r41190.

    2009-02-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Related to <rdar://problem/6590295>
        Allow disabling javascript: urls.

        * WebView/WebView.mm:
        (-[WebView _setJavaScriptURLsAreAllowed:]):
        * WebView/WebViewPrivate.h:

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

        Merge r31925.

    2008-04-15  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.

        <rdar://problem/5412759> CrashTracer: [USER] 22 crashes in Safari at com.apple.quicktime.webplugin: NPN_SetValue + 15403
        
        In certain situations, code in WebBasePluginPackage would load a plug-in only for the explicit reason of asking it to create a
        preference file, but wouldn't actually unload the bundle. This created problems for the QuickTime WebKit plug-in by unloading
        a bundle out from underneath itself.

        * Plugins/WebBasePluginPackage.h: Added unload method.
        * Plugins/WebBasePluginPackage.m:
        (-[WebBasePluginPackage unload]): Added new method. Currently, only Netscape plug-ins support unload.
        (-[WebBasePluginPackage pListForPath:createFile:]): Added a call to unload.
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage unload]): Added.

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

        Merge r31577.

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

        Reviewed by Oliver Hunt.

        Ensure that debug symbols are generated for x86_64 and ppc64 builds.

        * Configurations/Base.xcconfig:

2008-10-18  Mark Rowe  <mrowe@apple.com>

        Merge r37606.

    2008-10-15  Timothy Hatcher  <timothy@apple.com>

        Clean up user agent generation to simplify the _standardUserAgentWithApplicationName:
        class method to not require a WebKit version.

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (+[WebView _standardUserAgentWithApplicationName:]): Create the WebKit version.
        (-[WebView WebCore::_userAgentForURL:]): Use the simplified _standardUserAgentWithApplicationName:.
        Remove code that created the WebKit version.
        * WebView/WebViewPrivate.h: Change the method name of _standardUserAgentWithApplicationName:.

2008-10-18  Mark Rowe  <mrowe@apple.com>

        Merge r37598.

    2008-10-14  Timothy Hatcher  <timothy@apple.com>

        Make the user agent generation method a class method and cache the WebKit
        version in a static to prevent generating it every time. This is needed
        clean up to fix <rdar://problem/6292331>. Moved all code to WebPrivate so
        the class method can be in the WebViewPrivate.h header.

        Reviewed by John Sullivan.

        * WebView/WebView.mm:
        (callGestalt): Moved. Same code.
        (createMacOSXVersionString): Moved. Same code.
        (createUserVisibleWebKitVersionString): Moved from _userVisibleBundleVersionFromFullVersion:
        and returns a copied string.
        (+[WebView _standardUserAgentWithApplicationName:andWebKitVersion:]): Made into a class method.
        (-[WebView WebCore::_userAgentForURL:]): Changed to cache the WebKit version.
        * WebView/WebViewPrivate.h: Added +_standardUserAgentWithApplicationName:andWebKitVersion:.

2008-10-06  Mark Rowe  <mrowe@apple.com>

        Merge r37008.

    2008-09-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21178
        <rdar://problem/6248651>

        Check if the plug-in is allowed to load the resource. This matches Firefox.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):

2008-10-06  Mark Rowe  <mrowe@apple.com>

        Merge r36810.

    2008-09-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        - fix <rdar://problem/6233388> Crash beneath -[WebFrameView keyDown:]

        Test: fast/events/keydown-remove-frame.html

        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:]): Added a null check.

2008-10-04  Mark Rowe  <mrowe@apple.com>

        Merge r35278.

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

        Reviewed by Sam Weinig.

        <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.

        * Configurations/Version.xcconfig:
        * Info.plist:

2008-09-14  Mark Rowe  <mrowe@apple.com>

        Merge r36126.

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

        Correct a typo in the setApplicationChromeModeEnabledEnabled:
        method name, remove the extra "Enabled".

        * WebView/WebPreferences.mm:
        * WebView/WebPreferencesPrivate.h:

2008-09-14  Mark Rowe  <mrowe@apple.com>

        Merge r35950.

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

        Add support for support for -webkit-appearance: default-button on the Mac platform.

        <rdar://problem/6173530>

        Reviewed by Dave Hyatt.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Init AdvanceDefaultButtonPulseAnimation.
        * WebView/WebPreferenceKeysPrivate.h: Added WebKitApplicationChromeModeEnabledPreferenceKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set WebKitApplicationChromeModeEnabledPreferenceKey to NO.
        (-[WebPreferences applicationChromeModeEnabled]): Added.
        (-[WebPreferences setApplicationChromeModeEnabledEnabled:]): Added.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Call Settings::setApplicationChromeMode
        with the value of -[WebPreferences applicationChromeModeEnabled].

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 ==
