2010-02-09  Mark Rowe  <mrowe@apple.com>

        Merge r54447.

    2010-02-05  Kevin Decker  <kdecker@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=34661
        <rdar://problem/7614067> REGRESSION (Safari 4.0-> Safari 4.0.4): NPP_SetWindow no longer sets a clipRect of (0,0,0,0) when it becomes hidden
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
        * Plugins/WebBaseNetscapePluginView.h: Moved superviewsHaveSuperviews to the base class.
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView superviewsHaveSuperviews]): Added to the base class; extracted from WebNetscapePluginView.
        (-[WebBaseNetscapePluginView shouldClipOutPlugin]): Added new method with code extracted from WebNetscapePluginView.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48363.

    2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        Adopt the new WebCore::CredentialStorage in WebKit/Mac.

        * Misc/WebDownload.mm:
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebKit::getAuthenticationInfo):

2010-01-27  Mark Rowe  <mrowe@apple.com>

        Merge r53512.

    2010-01-19  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: The child <option> elements of a non-multiple <select> are not
        exposed

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

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory AXMenuListPopupActionVerb]):
        Stubbed.
        (-[WebViewFactory AXMenuListActionVerb]):
        Stubbed.

2010-01-25  Mark Rowe  <mrowe@apple.com>

        Merge r53520.

    2009-12-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7068584> Crash at NetscapePluginHostProxy::processRequests

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::waitForReply): Wrapped with calls
        to willCallPluginFunction/didCallPluginFunction. This prevents the plug-in
        from being stopped while waiting for reply.
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance): Protect the
        instance proxy in case the plug-in host crashes while waiting for reply.
        * Plugins/Hosted/ProxyInstance.h:
        (WebKit::ProxyInstance::waitForReply): Added. Calls through to
        NetscapePluginInstanceProxy::waitForReply(), but returns a null reply if the
        proxy gets invalidated while waiting for the reply.
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke): Use ProxyInstance::waitForReply().
        (WebKit::ProxyInstance::supportsInvokeDefaultMethod): Ditto.
        (WebKit::ProxyInstance::supportsConstruct): Ditto.
        (WebKit::ProxyInstance::getPropertyNames): Ditto.
        (WebKit::ProxyInstance::methodsNamed): Ditto.
        (WebKit::ProxyInstance::fieldNamed): Ditto.
        (WebKit::ProxyInstance::fieldValue): Ditto.
        (WebKit::ProxyInstance::setFieldValue): Ditto.

2010-01-25  Mark Rowe  <mrowe@apple.com>

        Merge r53195.

    2010-01-13  Kevin Decker  <kdecker@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=33610
        <rdar://problem/7288546> Silverlight full screen performance problem seen on Snow Leopard.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _workaroundSilverlightFullScreenBug:]): Added. Work around Silverlight full screen
         performance issue by maintaining an accelerated GL pixel format. We can safely remove this at some point in
         the future when both Microsoft releases a genuine fix for 7288546 and enough Silverlight users update to the
         new Silverlight. For now, we'll distinguish older broken versions of Silverlight by asking the plug-in if it
         resolved its full screen badness.
        (-[WebNetscapePluginView _createPlugin]): Call _workaroundSilverlightFullScreenBug:YES if this is Silverlight.
        (-[WebNetscapePluginView _destroyPlugin]): Call _workaroundSilverlightFullScreenBug:NO if this is Silverlight.

2010-01-25  Mark Rowe  <mrowe@apple.com>

        Merge r51616.

    2009-12-02  Timothy Hatcher  <timothy@apple.com>

        Fixes a crash when scrolling a frame that goes away mid-scroll.

        <rdar://problem/7400263>

        Reviewed by John Sullivan.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]): Retain self incase the last
        reference is released when calling super.

2010-01-25  Mark Rowe  <mrowe@apple.com>

        Merge r52749.

    2010-01-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * Info.plist:

2009-10-16  Mark Rowe  <mrowe@apple.com>

        Merge r48683.

    2009-09-22  Timothy Hatcher  <timothy@apple.com>

        Prevent scrolling multiple frames during latched wheel events.

        Reviewed by Anders Carlsson.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]):

2009-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r48689.

    2009-09-23  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Speed up access to history items by caching date computation.

        * History/WebHistory.mm:
        (getDayBoundaries): Refactored from timeIntervalForBeginningOfDay.
        Returns the beginning of the day that the passed time is within and
        the beginning of the next day.
        (beginningOfDay): Added. Uses getDayBoundaries so it can be fast for
        multiple dates within the same day, which is the common case.
        (dateKey): Added. Calls beginningOfDay and converts to an integer.
        (-[WebHistoryPrivate findKey:forDay:]): Changed to call dateKey
        insetad of timeIntervalForBeginningOfDay.

2009-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r46645.

    2009-07-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.
        
        Accelerated animations stutter on pages with lots of animations and 3d transforms
        https://bugs.webkit.org/show_bug.cgi?id=27884
        
        This patch changes the strategy for synchronizing painting view the view,
        and compositing layer updates. Previously the strategy was to disable screen
        updates between the time we updated the layer tree, and painted the view. That
        left screen updates disabled for too long (hundreds of milliseconds) in some
        cases, causing animation stutter.
        
        The new strategy is to batch up changes to the CA layer tree, and commit them
        all at once just before painting happens (referred to as a "sync" in the code).
        GraphicsLayerCA now keeps a bitmask of changed properties, and then migrates
        the values stored in GraphicsLayer into the CA layer tree at commit time.
        
        Compositing layers are then synced in FrameView::paintContents(). However, not
        all style/layout changes will result in painting; to deal with style changes that
        touch only compositing properties, we set up a runloop observer that takes care
        of comitting layer changes when no painting happens.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scheduleCompositingLayerSync):
        scheduleViewUpdate() renamed to syncCompositingStateRecursive()
        
        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView _clearLayerSyncLoopObserver]):
        "viewUpdateRunLoopObserver" is now "layerSyncLoopObserver".

        (-[WebView _syncCompositingChanges]):
        Helper method that calls syncCompositingStateRecursive() on the FrameView.
        
        (layerSyncRunLoopObserverCallBack):
        (-[WebView _scheduleCompositingLayerSync]):
        This is all about layer sycning now. Also, the run loop observer is repeating,
        because it has to keep firing until syncCompositingStateRecursive() says that it
        has completed.
        
        * WebView/WebViewData.h:
        "viewUpdateRunLoopObserver" is now "layerSyncLoopObserver".

        * WebView/WebViewInternal.h:
        _scheduleViewUpdate is now _scheduleCompositingLayerSync

2009-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r49111.

    2009-10-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adele Peterson.

        Add functionality to pause/throttle CSS transitions/animations in a WebView
        https://bugs.webkit.org/show_bug.cgi?id=29942

        Added both a setter and getter function

        * WebView/WebView.mm:
        (-[WebView cssAnimationsSuspended]):
        (-[WebView setCSSAnimationsSuspended:]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        * WebView/WebViewPrivate.h:

2009-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r49133.

    2009-10-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.
       
        WebKit side of <rdar://problem/7179166>
       
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        Add an m_pluginIsWaitingForDraw member variable.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Initialize m_pluginIsWaitingForDraw.
        
        (WebKit::NetscapePluginInstanceProxy::invalidateRect):
        Set m_pluginIsWaitingForDraw to true.
        
        (WebKit::NetscapePluginInstanceProxy::didDraw):
        If m_pluginIsWaitingForDraw is true, call _WKPHPluginInstanceDidDraw.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]):
        Call didDraw.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add PHPluginInstanceDidDraw.

2009-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r49433.

    2009-10-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7294267> REGRESSION (r48492): Gmail voice and video chat
        doesn’t work
        https://bugs.webkit.org/show_bug.cgi?id=30295

        Test: plugins/setProperty.html

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::setFieldValue): Fixed a typo. The function
        should return early if m_instanceProxy is null.

2009-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r48492.

    2009-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7007541> 
        CrashTracer: 4800+ crashes in Safari at com.apple.WebKit • WTF::HashTableIterator...

        Add null checks for m_instanceProxy (It will be null when a plug-in has crashed).
        
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::supportsInvokeDefaultMethod):
        (WebKit::ProxyInstance::supportsConstruct):
        (WebKit::ProxyInstance::getPropertyNames):
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        (WebKit::ProxyInstance::fieldValue):
        (WebKit::ProxyInstance::setFieldValue):
        (WebKit::ProxyInstance::invalidate):

2009-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48946.

    2009-09-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7259706>
        Need WebKit API or SPI on Mac and Windows to test whether it's safe to load a page in a new tab/window

        * WebView/WebFrame.mm:
        (-[WebFrame _allowsFollowingLink:]):
        * WebView/WebFramePrivate.h:

2009-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47551.

    2009-08-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <http://webkit.org/b/28484> Plug-in-related leaks seen on the build bot

        When the plug-in data is being loaded manually there is a reference cycle between the
        NetscapePluginInstanceProxy and the HostedNetscapePluginStream.  We need to explicitly
        break the reference cycle in NetscapePluginInstanceProxy::cleanup so that both objects
        will be destroyed.

        Take the opportunity to add RefCountedLeakCounter support to HostedNetscapePluginStream
        and NetscapePluginInstanceProxy to simplify tracking down leaks of these objects in the future.

        * Plugins/Hosted/HostedNetscapePluginStream.h:
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        (WebKit::HostedNetscapePluginStream::~HostedNetscapePluginStream):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::~NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::cleanup): Clear m_manualStream to break the reference
        cycle.

2009-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47300.

    2009-08-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Fix leaks of HostedNetscapePluginStream and NetscapePlugInStreamLoader objects seen during layout tests.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::didFail): Disconnect the stream from the plug-in instance proxy
        when the load fails.

2009-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47657.

    2009-08-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7162480>
        Sometimes WebKit does not layout correctly when a WebView is embedded in an HICocoaView
        
        Add a null check for the current context when reflectScrolledClipView: is called from outside a 
        draw operation.
        
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):

2009-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48394.

    2009-09-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7224378> REGRESSION(r48360): Dragging a tab with a plug-in out of a window, the plug-in gets slow and confused

        In r48360, the fix for <rdar://problem/7090444>, I neglected to consider the case where the plug-in had already been started and
        -start would do an early-return rather than calling -restartTimers and -addWindowObservers itself.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]): Reinstate the call to -restartTimers and -addWindowObservers, but guard them
        with a check that the view is still in the window.

2009-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48360.

    2009-09-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Fix <rdar://problem/7090444> Crashes in-[WebBaseNetscapePluginView stop] handling NSWindowWillCloseNotification.

        It's not valid to call -addWindowObservers when the view is not in a window, but this can happen when -start
        initializes a plug-in and the plug-in removes itself from the document during initialization.  -viewDidMoveToWindow
        calls -start and then calls -addWindowObservers without ensuring that the view is still in a window.

        If -[WebBaseNetscapePluginView addWindowObservers] is incorrectly called when the view is not in a window, it will
        observe NSWindowWillCloseNotification on all windows.  This unexpected observer registration is not balanced by an
        unregistration so the notification can be delivered after the view is deallocated, causing the crash seen in
        <rdar://problem/7090444>.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView start]): Only call -updateAndSetWindow if we still have a current window.
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]): Remove unnecessary calls to -restartTimers and -addWindowObservers
        from -[WebBaseNetscapePluginView viewDidMoveToWindow].  They are already called from within -start with the extra benefit
        of ensuring that the view is still in a window when they are called.

2009-07-27  Mark Rowe  <mrowe@apple.com>

        Merge r46449.

    Reviewed by Darin Adler.

        <rdar://problem/7091036> REGRESSION: Microsoft Messenger crashes during file send/receive due to use of WebKit on non-main thread

        In some situations Microsoft Messenger can attempt to manipulate the DOM from a secondary thread while
        updating its file transfer progress bar.  This results in corruption of WebCore data structures that is
        quickly followed by a crash.  We can work around this by having -[WebFrame DOMDocument] return nil when
        called from a secondary thread by Microsoft Messenger, which has the effect of turning its attempts at
        DOM manipulation in to no-ops.

        * WebView/WebFrame.mm:
        (needsMicrosoftMessengerDOMDocumentWorkaround):
        (-[WebFrame DOMDocument]):

2009-07-14  Mark Rowe  <mrowe@apple.com>

        Merge r45834.

    2009-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Kevin Decker.

        <rdar://problem/7053687> Core Animation plug-ins continue to grow larger and larger when opening new tabs (32 bit-only)

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView setLayer:]):
        Add a FIXME.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setLayer:]):
        Make sure to set the size of the layer before changing the autoresizing mask so it won't grow everytime it's inserted
        into the layer tree.

2009-07-12  Mark Rowe  <mrowe@apple.com>

        Merge r45745.

    2009-07-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        Flashing as hardware layers are created and destroyed in some content
        <rdar://problem/7032246>
        
        There's a window of time between the end of one runloop cycle, after CA layers changes
        have been committed, and the window display at the start of the next cycle when 
        CA may push updates to the screen before AppKit has drawn the view contents. If
        we know that we need to do drawing synchronization (which we do when content moves
        between a layer and the view), then we need to call -disableScreenUpdatesUntilFlush
        from the existing runloop observer that is set up when layers need repainting to
        ensure that layer updates don't reach the screen before view-based painting does.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawRect:]):
        Tweak the comments
        
        * WebView/WebView.mm:
        (viewUpdateRunLoopObserverCallBack):
        (-[WebView _scheduleViewUpdate]):
        Add a big comment to explain the timing of things.
        Call -disableScreenUpdatesUntilFlush when the view _needsOneShotDrawingSynchronization.

 2009-07-09  Brian Weinstein  <bweinstein@apple.com>
 
         Reviewed by Tim Hatcher.
2009-07-11  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/7047403> Disable channel messaging

        * Configurations/FeatureDefines.xcconfig:

2009-07-11  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/7048551> Disable datagrid

        * Configurations/FeatureDefines.xcconfig:

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=26903

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        can now be implemented for Web Workers and is reasonably stable.

        * Configurations/FeatureDefines.xcconfig:

2009-07-09  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson and Dan Bernstein.

        <rdar://problem/7024972> Cannot set font to Helvetica Neue Light in Mail compose window

        No regression test because this only affects the font panel.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _addToStyle:fontA:fontB:]): Fix code that detects whether the font would
        survive a round trip by using the weight corresponding to "bold" or "normal" rather than
        the actual weight number.

2009-07-09  Beth Dakin and Jon Honeycutt <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

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

2009-07-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Roll out r43848. The quirk is no longer necessary.

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

2009-07-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        <rdar://problem/6921671> Visit count shouldn't be incremented by redirects.

        * WebCoreSupport/WebFrameLoaderClient.mm: (WebFrameLoaderClient::updateGlobalHistory):
        Do not increase visit count if there is a redirect source. As a result, only pages that were
        explicitly visited by the user (by typing a URL, choosing one from bookmarks, or clicking
        a link) will be counted.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:increaseVisitCount:]):
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:increaseVisitCount:]):
        * History/WebHistoryInternal.h:
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem _visitedWithTitle:increaseVisitCount:]):
        * History/WebHistoryItemInternal.h:
        Marshal this new argument all the way down to WebCore.

2009-07-08  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        Add -[WebView _isProcessingUserGesture]
        https://bugs.webkit.org/show_bug.cgi?id=27084

        Add -_isProcessingUserGesture that calls into WebCore::FrameLoader::isProcessingUserGesture()
        so that WebView code can determine if a user gesture is in progress.

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

2009-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        - Fix <rdar://problem/6544693>.
        
        For Flash, don't cache which methods or fields in an object are missing, since they can
        be added at any time.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::shouldCacheMissingPropertiesAndMethods):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27006: Build fix when MAC_JAVA_BRIDGE is disabled

        <https://bugs.webkit.org/show_bug.cgi?id=27006>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createJavaAppletWidget): Wrap contents of
        the method in #if ENABLE(MAC_JAVA_BRIDGE)/#endif and return 0
        when this feature is disabled.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27005: Build fixes when NETSCAPE_PLUGIN_API is disabled

        <https://bugs.webkit.org/show_bug.cgi?id=27005>

        Reviewed by Geoff Garen.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController destroyPlugin:]): Wrap call to
        ScriptController::cleanupScriptObjectsForPlugin() in
        #if ENABLE(NETSCAPE_PLUGIN_API)/#endif macro.
        (-[WebPluginController destroyAllPlugins]): Ditto.
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase removePluginInstanceViewsFor:]): Wrap
        WebBaseNetscapePluginView class checks in
        #if ENABLE(NETSCAPE_PLUGIN_API)/#endif macro.
        (-[WebPluginDatabase destroyAllPluginInstanceViews]): Ditto.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Use ENABLE(NETSCAPE_PLUGIN_API) instead of USE(PLUGIN_HOST_PROCESS)

        In r45579, #if/#endif macros for USE(PLUGIN_HOST_PROCESS) were
        used, but ENABLE(NETSCAPE_PLUGIN_API) should have been used
        instead.

        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.mm:
        * Plugins/WebNetscapeContainerCheckPrivate.mm:

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27004: Build fix for ENABLE(PLUGIN_PROXY_FOR_VIDEO) after r42618

        <https://bugs.webkit.org/show_bug.cgi?id=27004>

        Reviewed by Geoff Garen.

        * Plugins/WebPluginController.mm:
        (mediaProxyClient): Use core() method to convert from
        DOMElement to WebCore::Element.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27003: Build fix when USE(PLUGIN_HOST_PROCESS) is disabled

        <https://bugs.webkit.org/show_bug.cgi?id=27003>

        Reviewed by Geoff Garen.

        * Plugins/WebNetscapeContainerCheckContextInfo.h: Added #if
        USE(PLUGIN_HOST_PROCESS)/#endif guards.
        * Plugins/WebNetscapeContainerCheckContextInfo.mm: Ditto.
        * Plugins/WebNetscapeContainerCheckPrivate.mm: Ditto.

2009-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        Initialize wkIsLatchingWheelEvent.
        
        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2009-07-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix <rdar://problem/6964278> REGRESSION (r42118): Scrolling redraw
          problem in FileMaker Pro

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Perform layout if needed, even on Mac OS X versions that have
        -viewWillDraw. This prevents attempts to draw without layout in case
        -viewWillDraw was not called due to NSView issues or the client
        did something during the display operation that re-invalidated the
        layout.

2009-07-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6978783> 
        Software-rendered plug-in does not update correctly when inside a hardware layer
        
        Replace calls to setNeedsDisplay: and setNeedsDisplayInRect: with a call to the new method
        invalidatePluginContentRect:. This new method will ask WebCore to do the repainting, taking
        transforms into account.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invalidateRect):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView windowBecameKey:]):
        (-[WebBaseNetscapePluginView windowResignedKey:]):
        (-[WebBaseNetscapePluginView preferencesHaveChanged:]):
        (-[WebBaseNetscapePluginView invalidatePluginContentRect:]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView invalidateRect:]):
        (-[WebNetscapePluginView invalidateRegion:]):
        (-[WebNetscapePluginView forceRedraw]):

2009-07-02  Adam Roben  <aroben@apple.com>

        Fix warnings from update-webkit-localizable-strings

        Rubber-stamped by Eric Carlson.

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory mediaElementLoadingStateText]):
        (-[WebViewFactory mediaElementLiveBroadcastStateText]):
        Changed the localization comments to match the comments in the Windows
        version of this file, to avoid warnings about different comments for
        the same localized string.

2009-07-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.
        
        Compositing-related preference methods are not public API; should move to WebPreferencesPrivate.h
        <rdar://problem/7027363>

        Move accelerated-compositing pref to WebPreferencesPrivate.h

        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences acceleratedCompositingEnabled]):
        (-[WebPreferences setAcceleratedCompositingEnabled:]):
        * WebView/WebPreferencesPrivate.h:

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6518119>

        Add localized strings for media controller status messages.

        * WebCoreSupport/WebViewFactory.mm: Add new localized text.
        (-[WebViewFactory mediaElementLoadingStateText]):
        (-[WebViewFactory mediaElementLiveBroadcastStateText]):

2009-07-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add a preference/setting to toggle whether content sniffing is enabled for file URLs.

        * WebView/WebPreferenceKeysPrivate.h:

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences localFileContentSniffingEnabled]):
        (-[WebPreferences setLocalFileContentSniffingEnabled:]):
        * WebView/WebPreferencesPrivate.h:

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

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/6998524> REGRESSION (r44474): Form text field has focus ring, looks focused,
        even though the field is not actually focused for keyboard input
        
        Add the concept of whether or not the Page is focused by adding a boolean to the focusController.  This allows the
        focused frame and focused node to both be cached and changed programmatically without causing errors when the Page doesn't
        have focus.

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

2009-06-30  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7014389> REGRESSION(4-TOT): Hyperlinks have no tooltips in Mail unless you first click in the message body

        Updated these new methods (added as part of the viewless WebKit effort) that call through to WebHTMLView to use _selectedOrMainFrame, 
        instead of just selectedFrame.  When the selection changes, I don't think there is a situation where there's no selected frame, but
        it seems better to keep these two uses the same, since if there is a case, this will be more like the old behavior, before there was
        a version of _selectionChanged in WebView. 

        * WebView/WebView.mm:
        (-[WebView _setToolTip:]):
        (-[WebView _selectionChanged]):

2009-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        <rdar://problem/7006959> 'Save as…’ does not work in Mail

        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]): Call _needMailThreadWorkaroundIfCalledOffMainThread rather than
        needMailThreadWorkaround, as the latter is intended to be used at the point which a workaround would
        be applied and thus contains a main thread check.  Since -initWithFrame: is called on the main thread,
        this was causing us to not switch from exception-throwing to logging for the thread violation behavior.

2009-06-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6946611> REGRESSION (r30673): Shade10:" D_Snap
          to Grid" window is clipping

        * Misc/WebKitVersionChecks.h: Added
            WEBKIT_FIRST_VERSION_WITHOUT_SHADE10_QUIRK
        * WebView/WebView.mm:
        (-[WebView _needsLinkElementTextCSSQuirk]): Added. Returns YES if the
            client app is a version of Shade 10 earlier than 10.6 and it was
            linked against a version of WebKit earlier than 531.2.
        (-[WebView _preferencesChangedNotification:]): Added a call to
            Settings::setTreatsAnyTextCSSLinkAsStylesheet().

2009-06-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7014813> Ask media engine if a movie is streamed or downloaded.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):
            Add QTMovieGetType.

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Put datagrid behind an #ifdef.

        * Configurations/FeatureDefines.xcconfig:

2009-06-26  John Sullivan  <sullivan@apple.com>

        Added support for disabling Stop Speaking when there is no speaking to stop.
        Also fixed Stop Speaking so that it works (formerly it would throw an exception, and
        selecting it from the menu would perform a web search instead (!)).

        Reviewed by Tim Hatcher.

        * WebCoreSupport/WebContextMenuClient.h:
        declare isSpeaking()
        
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::isSpeaking):
        implement by calling through to NSApplication
        (WebContextMenuClient::stopSpeaking):
        fixed implementation by correcting the signature of the NSApplication method

2009-06-26  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        Additional fix for https://bugs.webkit.org/show_bug.cgi?id=26651

        The flag should always default to true to avoid it getting set
        to false in a build with accelerated compositing turned off
        and then disabling accelerated compositing when subsequently
        running a build with it turned on.

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

2009-06-26  Brady Eidson  <beidson@apple.com>

        Fix SnowLeopard build.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::didReceiveResponse):

2009-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        Replace all usage of the now obsolete [NSURLResponse _webcore_MIMEType].

        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::didReceiveResponse):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView pluginView:receivedData:]):
        * Plugins/WebPluginController.mm:
        (-[WebPluginController pluginView:receivedResponse:]):
        * WebView/WebDataSource.mm:
        (-[WebDataSource _responseMIMEType]):
        * WebView/WebResource.mm:
        (-[WebResource _initWithData:URL:response:]):

2009-06-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        <rdar://problem/6651201> Update lookalike character list.

        * Misc/WebNSURLExtras.mm: (isLookalikeCharacter): Added more characters to the list.

2009-06-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6989017> 
        REGRESSION (SnowLeopard): RealPlayer content replays when opening a new tab or switching back to the RealPlayer tab
        
        If a plug-in fails in NPP_New, we would try to recreate it whenever the preferences for a web view would change. 
        
        Fix this by setting a flag when we fail to instantiate the plug-in, so we only try once.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView start]):

2009-06-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        https://bugs.webkit.org/show_bug.cgi?id=26651
        
        Preference is named "WebKitAcceleratedCompositingEnabled"
        and is a boolean value. When false, prevents compositing layers from
        being created, which prevents hardware animation from running.
        Also forces video to do software rendering. Added a cache for
        the flag in RenderLayerCompositing and made it all work
        on-the-fly when the flag is changed while a page is loaded.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences acceleratedCompositingEnabled]):
        (-[WebPreferences setAcceleratedCompositingEnabled:]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Fix the most recently seen kind of crash in <rdar://problem/5983224>

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Null-check the
        Frame.

2009-06-24  Jeff Johnson  <opendarwin@lapcatsoftware.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26638 WebKitErrors.m: _initWithPluginErrorCode: does not set localizedDescription

        Add localized descriptions for plugin errors.
        The localized strings already existed but were unused; now NSLocalizedDescriptionKey is added to the NSError userInfo.

        * Misc/WebKitErrors.m:
        (-[NSError _initWithPluginErrorCode:contentURL:pluginPageURL:pluginName:MIMEType:]):

2009-06-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6950660> REGRESSION: iSale 5.5.3 crashes after I click a template to load

        Due to some subtle WebKit changes - presumably some delegate callback behavior - a latent bug in 
        iSale was uncovered where they aren't properly retaining their FrameLoadDelegate, and we ended up
        calling back to a dealloc'ed object.

        * WebView/WebView.mm:
        (-[WebView _needsAdobeFrameReloadingQuirk]): Use more intelligent C++-style initialization.
        (-[WebView _needsKeyboardEventDisambiguationQuirks]): Ditto.
        (-[WebView _needsFrameLoadDelegateRetainQuirk]): YES for iSale versions under 5.6
        (-[WebView dealloc]): Release the delegate if the quirk is in effect.
        (-[WebView setFrameLoadDelegate:]): Retain the new delegate if the quirk is in effect.

2009-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        - Fix <rdar://problem/6965672>
        
        Defer calls to WKPCInvalidateRect, so we don't try to invalidate while waiting for a reply, since
        that is too early.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::isProcessingRequests):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::processRequests):
        (WKPCInvalidateRect):

2009-06-22  Timothy Hatcher  <timothy@apple.com>

        Add Mail on Tiger and Leopard to the list of applications that need the WebView init thread workaround.

        <rdar://problem/6929524> Console shows WebKit Threading Violations from Mail

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (clientNeedsWebViewInitThreadWorkaround): Return true for com.apple.Mail.

2009-06-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - speculative fix for <rdar://problem/6889082>
          Crash at -[WebHTMLView(WebPrivate) _updateMouseoverWithEvent:]

        The crash seems to happen because lastHitView points to a deleted
        object. Since -close calls -_clearLastHitViewIfSelf, I speculate that
        lastHitView has been set to an already-closed view.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView hitTest:]): Return nil if the view is closed.

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by John Sullivan.

        <rdar://problem/6956606> REGRESSION (S4Beta -> Final): After the password is input,
        Japanese can't be input.

        * WebView/WebHTMLView.mm: (-[WebHTMLView _updateSelectionForInputManager]): Removed an
        unnecessary check - the function has an early return for null frame.

2009-06-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6990938> REGRESSION (r42787): After showing and
          hiding the Find banner, the WebHTMLView's height is not restored

        * WebView/WebFrameView.mm:
        (-[WebFrameView setFrameSize:]): Mark the FrameView for layout when the
        WebFrameView's size changes.
        * WebView/WebView.mm:
        (-[WebView setFrameSize:]): Left the resize logic here, but only for
        the single view model.

2009-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6964221> Need more processing of pluginspage.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Check protocolInHTTPFamily.

2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26199

        Added preference to enable the XSSAuditor.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences isXSSAuditorEnabled]):
        (-[WebPreferences setXSSAuditorEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6926859>
        NPN_ConvertPoint doesn't give the right value when converting to/from NPCoordinateSpaceFlippedScreen
        
        When inverting Y, use the height of the first screen instead of the screen the window is on.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::windowFrameChanged):
        (WebKit::NetscapePluginInstanceProxy::mouseEvent):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView convertFromX:andY:space:toX:andY:space:]):

2009-06-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/6976766> Control-click on pages with accelerated compositing
        content does not work.
        
        Part deux. #ifdef the use of _private->layerHostingView with 
        USE(ACCELERATED_COMPOSITING)

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

2009-06-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/6976766> Control-click on pages with accelerated compositing
        content does not work.
        
        Remove the WebLayerHostingView subclass of NSView, with its attempts to
        forward events to the WebHTMLView, and just fix -[WebHTMLView hitTest:]
        to ignore the layerHostingView.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView hitTest:]):
        (-[WebHTMLView attachRootLayer:]):

2009-06-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6974857>
        
        Define ENABLE_3D_RENDERING when building on 10.6, and move ENABLE_3D_RENDERING
        switch from config.h to wtf/Platform.h.

        * Configurations/FeatureDefines.xcconfig:
        * WebKitPrefix.h:

2009-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6967569>
        CrashTracer: 15 crashes in Safari at com.apple.WebKit • WebKit::NetscapePluginHostManager::didCreateWindow + 85
        
        Make sure to remove the entry from the plug-in host map so we won't end up with an entry that has a null value.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):

2009-06-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Tim Hatcher.

        - make the source code font in the Web Inspector match Mac defaults

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]): Set the default monospace font
        to 11px Menlo, except on Leopard and Tiger where it is 10px Monaco.

2009-06-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Eric Seidel.  Landed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26281

        REGRESSION: Copying from TextEdit/OmniGraffle and pasting into editable
        region loses images
        
        Prefer RTFD (RTF with inline images) over RTF.  In
        http://trac.webkit.org/changeset/19745 I accidently reversed their
        order.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]): 

2009-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24492

        Move registerURLSchemeAsLocal from FrameLoader to SecurityOrigin

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

2009-06-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        * ChangeLog-2007-10-14: Change pseudonym "Don Gibson" to me (was used while Google Chrome was not public); update my email address.

2009-06-08  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        - gave Objective-C++ files the .mm extension

        * Carbon/HIWebView.m: Removed.
        * Carbon/HIWebView.mm: Copied from WebKit/mac/Carbon/HIWebView.m.
        * Misc/WebKitNSStringExtras.m: Removed.
        * Misc/WebKitNSStringExtras.mm: Copied from WebKit/mac/Misc/WebKitNSStringExtras.m.
        * Misc/WebStringTruncator.m: Removed.
        * Misc/WebStringTruncator.mm: Copied from WebKit/mac/Misc/WebStringTruncator.m.
        * WebInspector/WebNodeHighlight.m: Removed.
        * WebInspector/WebNodeHighlight.mm: Copied from WebKit/mac/WebInspector/WebNodeHighlight.m.
        * WebInspector/WebNodeHighlightView.m: Removed.
        * WebInspector/WebNodeHighlightView.mm: Copied from WebKit/mac/WebInspector/WebNodeHighlightView.m.
        * WebView/WebDynamicScrollBarsView.m: Removed.
        * WebView/WebDynamicScrollBarsView.mm: Copied from WebKit/mac/WebView/WebDynamicScrollBarsView.m.

2009-06-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=26220

        Update a WebView's active state when it moves to a different window.

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

2009-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice Liu.

        Move WebView internal data into WebViewData.h/mm.

        * WebView/WebDelegateImplementationCaching.mm:
        * WebView/WebView.mm:
        * WebView/WebViewData.h: Copied from mac/WebView/WebViewInternal.h.
        * WebView/WebViewData.mm: Copied from mac/WebView/WebViewInternal.mm.
        * WebView/WebViewInternal.h:
        * WebView/WebViewInternal.mm: Removed.

2009-06-04  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Remove _updateFocusedStateForFrame, since it's actually not even necessary now that I made
        setFocusedFrame get called explicitly from become/ResignFirstResponder.  setFocusedFrame does
        the work of focusing the selection already.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView becomeFirstResponder]):
        (-[WebHTMLView resignFirstResponder]):
        * WebView/WebView.mm:
        * WebView/WebViewInternal.h:

2009-06-04  Dan Bernstein  <mitz@apple.com>

        - build fix

        * WebView/WebViewInternal.mm:

2009-06-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Reworking of focus and active state updating for WebHTMLViews so that it actually works instead of reporting wrong answers.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        WebHTMLViews become first responders before they are able to reach their Frames/Pages.  This happens because the NSClipView
        becomes first responder when the WebHTMLView gets destroyed, and then we transfer the responder state back to the new WebHTMLView
        when it is first connected.  Once we have transitioned to a new page and have the Frame/Page available, go ahead and explicitly
        focus the frame in WebCore and update our focused state.  This change allows us to remove the updateFocusedActive timer and the
        code from viewDidMoveToWindow.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView close]):
        (-[WebHTMLView addWindowObservers]):
        (-[WebHTMLView viewWillMoveToWindow:]):
        (-[WebHTMLView viewDidMoveToWindow]):
        (-[WebHTMLView _removeWindowObservers]):
        Remove all the updateFocusedActiveState timer code, since it no longer exists.

        (-[WebHTMLView windowDidBecomeKey:]):
        (-[WebHTMLView windowDidResignKey:]):
        Active state updating is no longer done by WebHTMLViews.   It is handled by the WebView instead.
    
        (-[WebHTMLView becomeFirstResponder]):
        (-[WebHTMLView resignFirstResponder]):
        Reworking of WebHTMLView's code for gaining/losing responder status.  No longer update active state here, since the active state
        can never change just because of responder changes.  Make sure that the focused frame gets updated properly (and most importantly
        actually cleared when a WebHTMLView resigns responder status).

        * WebView/WebHTMLViewInternal.h:
        * WebView/WebHTMLViewPrivate.h:
        State updating for focused and active states has been made independent.

        * WebView/WebView.mm:
        (-[WebView _updateActiveState]):
        WebView now handles updating of active state in _updateActiveState.  It is now purely based off whether the window is key and nothing
        else.

        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        Start listening for the window becoming/losing key even in the usesDocumentViews case.

        (-[WebView _updateFocusedStateForFrame:]):
        Focused state updating is split into its own method now and called when WebHTMLViews gain and lose responder status.

        (-[WebView _windowDidBecomeKey:]):
        (-[WebView _windowDidResignKey:]):
        Make sure to call _updateActiveState as the window gains/loses key.

        (-[WebView _windowWillOrderOnScreen:]):
        Run this code now that WebHTMLView no longer does it.

        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:
        Updating for the split of focused and active state updating into separate methods.

2009-06-04  Mark Rowe  <mrowe@apple.com>

        Speculative Tiger build fix.

        * WebView/WebDelegateImplementationCaching.h:

2009-06-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Move delegate implementation caching logic into its own files.

        * WebView/WebDelegateImplementationCaching.h: Copied from mac/WebView/WebViewInternal.h.
        * WebView/WebDelegateImplementationCaching.mm: Copied from mac/WebView/WebView.mm.
        (WebViewGetResourceLoadDelegateImplementations):
        (WebViewGetFrameLoadDelegateImplementations):
        (WebViewGetScriptDebugDelegateImplementations):
        * WebView/WebView.mm:
        * WebView/WebViewInternal.h:

2009-06-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Move WebViewPrivate structure to WebViewInternal.h/mm.

        * WebView/WebView.mm:
        * WebView/WebViewInternal.h:
        * WebView/WebViewInternal.mm: Added.
        (+[WebViewPrivate initialize]):
        (-[WebViewPrivate init]):
        (-[WebViewPrivate dealloc]):
        (-[WebViewPrivate finalize]):

2009-06-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Small cleanup in WebView.
        - Move global data initialization to WebView's initialization method.
        - Move _clearViewUpdateRunLoopObserver from WebViewPrivate to WebView (FileInternal)

        * WebView/WebView.mm:
        (-[WebViewPrivate init]): Remove global initializers.
        (-[WebViewPrivate dealloc]): Cleanup whitespace.
        (-[WebViewPrivate finalize]): Ditto.
        (-[WebView _close]): Call [self _clearViewUpdateRunLoopObserver] instead of
        [_private _clearViewUpdateRunLoopObserver]
        (+[WebView initialize]): Move global initializers here.
        (-[WebView _clearViewUpdateRunLoopObserver]): Moved from WebViewPrivate.
        (viewUpdateRunLoopObserverCallBack): Call [self _clearViewUpdateRunLoopObserver]
        instead of [_private _clearViewUpdateRunLoopObserver]

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - WebKit part of eliminating WebCoreTextRenderer

        * Misc/WebKitNSStringExtras.m:
        (webkit_CGCeiling): Added.
        (-[NSString _web_drawAtPoint:font:textColor:]): Replaced the malloc()ed
            string buffer with a Vector. Moved code from
            WebCoreDrawTextAtPoint() to here.
        (-[NSString _web_drawDoubledAtPoint:withTopColor:bottomColor:font:]):
        (-[NSString _web_widthWithFont:]): Replaced the malloc()ed string buffer
            with a Vector. Moved code from WebCoreTextFloatWidth() to here.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _addToStyle:fontA:fontB:]): Replaced call to
            WebCoreFindFont() with use of
            +[WebFontCache fontWithFamily:traits:weight:size:].
        * WebView/WebView.mm:
        (+[WebView _setAlwaysUsesComplexTextCodePath:]): Changed to call
            Font::setCodePath() directly.
        (+[WebView _setShouldUseFontSmoothing:]): Changed to call
            Font::setShouldUseSmoothing().
        (+[WebView _shouldUseFontSmoothing]): Changed to call 
            Font::shouldUseSmoothing().

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        - remove a private method that was used only by Safari 3.0.

        * WebView/WebView.mm: Removed +_minimumRequiredSafariBuildNumber.
        * WebView/WebViewPrivate.h: Ditto.

2009-06-03  Dan Bernstein  <mitz@apple.com>

        - build fix

        * WebView/WebHTMLView.mm:

2009-06-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - build fix

        * WebView/WebHTMLView.mm:
        * WebView/WebView.mm:

2009-06-02  Darin Adler  <darin@apple.com>

        Reviewed by David Hyatt.

        Bug 26112: viewless WebKit -- make events work
        https://bugs.webkit.org/show_bug.cgi?id=26112

        One change here is to make the -[WebFrame frameView] function assert if ever called
        in viewless mode, and fix many callers that would trip that assertion.

        A major change is to put some methods and data in WebView that are currently in
        WebHTMLView, used only in viewless mode. A next step will be to use the WebView
        methods whenever possible, even when not in the viewless mode.

        Also fix FrameView to do normal reference counting instead of a strange model with
        an explicit deref near creation time.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView): Add code to start in the appropriate place
        when dealing with viewless mode. This gets triggered when visiting the Google home page.
        (WebChromeClient::setToolTip): Changed to call WebView instead of WebHTMLView.
        (WebChromeClient::print): Changed to use a new selector that doesn't require a
        WebFrameView if present. Also don't even try to use the old selector in viewless mode.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::respondToChangedSelection): Changed to call WebView instead of WebHTMLView.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Added more code paths for
        viewless mode to skip things we can't do in that mode, with appropriate FIXME.
        Use Frame::create and RefPtr and eliminate the strange reference counting of FrameView.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _receivedData:]): Added a _usesDocumentViews guard around code that's
        specific to document views.

        * WebView/WebFrame.mm:
        (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]): Added a _usesDocumentViews
        guard around code that's specific to document views.
        (-[WebFrame _hasSelection]): Added an implementation for viewless mode.
        (-[WebFrame _clearSelection]): Assert we're not in viewless mode; it doesn't really
        make sense to clear the selection in only one frame in viewless mode. Later we can
        decide what to do.
        (-[WebFrame _dragSourceMovedTo:]): Assert we're not in viewless mode; the dragging
        code for viewless mode shouldn't have to involve the WebFrame object at all.
        (-[WebFrame _dragSourceEndedAt:operation:]): Ditto.
        (-[WebFrame frameView]): Assert we're not in viewless mode. This assertion fires
        often, but it's a great pointer to code that needs to be changed.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView hitTest:]): Tweaked a comment.
        (-[WebHTMLView _updateMouseoverWithEvent:]): Fixed a bug where the fake event for
        moving the mouse out of the old view ended up overwriting the event for moving
        the mouse within the new view.
        (-[WebHTMLView mouseDown:]): Got rid of explicit conversion of event to
        PlatformMouseEvent in call to sendContextMenuEvent; that's no longer possible
        without passing another argument, and it's now handled in EventHandler.

        * WebView/WebTextCompletionController.h: Copied from WebKit/mac/WebView/WebHTMLView.mm.
        Removed everything except for the WebTextCompletionController class.
        * WebView/WebTextCompletionController.mm: Copied from WebKit/mac/WebView/WebHTMLView.mm.
        Ditto.

        * WebView/WebUIDelegatePrivate.h: Added webView:printFrame: method.

        * WebView/WebView.mm: Moved includes and fields in from WebHTMLView.
        (-[WebView _usesDocumentViews]): Updated for name change from useDocumentViews
        to usesDocumentViews.
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]): Ditto.
        (-[WebView drawSingleRect:]): Ditto.
        (-[WebView isFlipped]): Ditto.
        (-[WebView setFrameSize:]): Ditto. Also changed to use _mainCoreFrame method.
        (-[WebView _viewWillDrawInternal]): Ditto.
        (-[WebView viewWillDraw]): Ditto.
        (-[WebView drawRect:]): Ditto.
        (-[WebView _close]): Added code to nil out the lastMouseoverView global.
        (-[WebView _dashboardRegions]): Use _mainCoreFrame.
        (-[WebView setProhibitsMainFrameScrolling:]): Ditto.
        (-[WebView _setInViewSourceMode:]): Ditto.
        (-[WebView _inViewSourceMode]): Ditto.
        (-[WebView _attachScriptDebuggerToAllFrames]): Ditto.
        (-[WebView _detachScriptDebuggerFromAllFrames]): Ditto.
        (-[WebView textIteratorForRect:]): Ditto.
        (-[WebView _executeCoreCommandByName:value:]): Ditto.
        (-[WebView addWindowObserversForWindow:]): Ditto.
        (-[WebView removeWindowObservers]): Ditto.
        (-[WebView _updateFocusedAndActiveState]): Ditto.
        (-[WebView _updateFocusedAndActiveStateForFrame:]): Turned into a class method.
        Added code to handle the viewless case without calling frameView.
        (-[WebView _windowDidBecomeKey:]): Updated for name change from useDocumentViews
        to usesDocumentViews.
        (-[WebView _windowDidResignKey:]): Ditto.
        (-[WebView _windowWillOrderOnScreen:]): Ditto.
        (-[WebView mainFrame]): Tweaked.
        (-[WebView selectedFrame]): Added a conditional to avoid trying to get at the
        frame view in viewless case.
        (-[WebView _setZoomMultiplier:isTextOnly:]): Use _mainCoreFrame.
        (-[WebView setCustomTextEncodingName:]): Ditto.
        (-[WebView windowScriptObject]): Ditto.
        (-[WebView setHostWindow:]): Ditto. Also put some code that's needed only for
        document views inside _private->usesDocumentViews.
        (-[WebView _hitTest:dragTypes:]): Tweaked.
        (-[WebView acceptsFirstResponder]): Added case for viewless mode along with a
        FIXME, since it's not complete.
        (-[WebView becomeFirstResponder]): Ditto.
        (-[WebView _webcore_effectiveFirstResponder]): Put the body of this inside
        a usesDocumentView check, because we don't need the first responder forwarding
        in viewless mode.
        (-[WebView setNextKeyView:]): Ditto.
        (-[WebView mouseDown:]): Added. Copied from WebHTMLView. FIXME in here suggests
        that we make WebHTMLView share this one soon, which I think is practical.
        (-[WebView mouseUp:]): Ditto.
        (-[WebView setHoverFeedbackSuspended:]): Added a code path for viewless mode.
        (-[WebView shouldClose]): Use _mainCoreFrame.
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]): Ditto.
        (-[WebView setEditable:]): Ditto.
        (-[WebView _frameViewAtWindowPoint:]): Added an assertion that we're not in
        viewless mode since this method makes no sense in that mode.
        (-[WebView _setMouseDownEvent:]): Added. Copied from WebHTMLView. I plan to
        eliminate the one in WebHTMLView soon.
        (-[WebView _cancelUpdateMouseoverTimer]): Ditto.
        (-[WebView _stopAutoscrollTimer]): Ditto.
        (+[WebView _updateMouseoverWithEvent:]): Ditto.
        (-[WebView _updateMouseoverWithFakeEvent]): Ditto.
        (-[WebView _setToolTip:]): Added. Calls through to the WebHTMLView version.
        (-[WebView _selectionChanged]): Ditto.
        (-[WebView _mainCoreFrame]): Added.
        (-[WebView _needsOneShotDrawingSynchronization]): Moved into the WebInternal
        category.
        (-[WebView _setNeedsOneShotDrawingSynchronization:]): Ditto.
        (-[WebView _startedAcceleratedCompositingForFrame:]): Ditto.
        (-[WebView _stoppedAcceleratedCompositingForFrame:]): Ditto.
        (viewUpdateRunLoopObserverCallBack): Ditto.
        (-[WebView _scheduleViewUpdate]): Ditto.

        * WebView/WebViewInternal.h: Made most of the file not compile at all when
        included from non-C++ source files, elminating some excess declarations and
        typedefs. Moved more methods into the real internal category. Added new
        methods _setMouseDownEvent, _cancelUpdateMouseoverTimer, _stopAutoscrollTimer,
        _updateMouseoverWithFakeEvent, _selectionChanged, and _setToolTip:.

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

        Reviewed by Anders Carlsson.

        Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds.

        * Configurations/Base.xcconfig:

2009-06-01  Darin Adler  <darin@apple.com>

        * WebView/WebTextCompletionController.mm: Fix Tiger build by adding import
        of WebTypesInternal.h.

2009-06-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 26113: break WebTextCompletionController out into its own source file
        https://bugs.webkit.org/show_bug.cgi?id=26113

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]): Updated for new name.
        (-[WebHTMLViewPrivate clear]): Ditto.
        (-[WebHTMLView _frameOrBoundsChanged]): Ditto.
        (-[WebHTMLView menuForEvent:]): Ditto.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView windowWillClose:]): Ditto.
        (-[WebHTMLView mouseDown:]): Ditto.
        (-[WebHTMLView resignFirstResponder]): Ditto.
        (-[WebHTMLView keyDown:]): Ditto.
        (-[WebHTMLView complete:]): Ditto. Also pass WebView to init method.
        (-[WebHTMLView _interceptEditingKeyEvent:shouldSaveCommand:]): Ditto.

        * WebView/WebTextCompletionController.h: Copied from mac/WebView/WebHTMLView.mm.
        * WebView/WebTextCompletionController.mm: Copied from mac/WebView/WebHTMLView.mm.
        Changed initializer to pass in a spearate WebView and WebHTMLView, to smooth the
        way for handling viewless mode properly in the future.

2009-05-30  David Kilzer  <ddkilzer@apple.com>

        Add JSLock to -[WebScriptCallFrame scopeChain]

        Reviewed by Darin Adler.

        In Debug builds of WebKit, Dashcode launching MobileSafari could
        cause the ASSERT(JSLock::lockCount() > 0) assertion to fire in
        JSC::Heap::heapAllocate() because the JSLock wasn't taken.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]): Take JSLock before calling
        into JavaScriptCore.

2009-05-28  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Build fix.  Move off a deprecated NSFileManager method.

        * Misc/WebNSFileManagerExtras.h:
        * Misc/WebNSFileManagerExtras.m:
        (-[NSFileManager destinationOfSymbolicLinkAtPath:error:]): Implement a new-in-Leopard method for Tiger to use.
        (-[NSFileManager attributesOfItemAtPath:error:]): Ditto.
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _initWithPath:]): Use the new non-deprecated methods.

2009-05-28  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Added new build flag --filters. More details in WebCore/ChangeLog.

        * Configurations/FeatureDefines.xcconfig:

2009-05-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26009
        <rdar://problem/6925656> REGRESSION (r43973): Problems While Working With OpenVanilla

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateSelectionForInputManager]): Don't call updateWindows if the selection
        is None. This routinely happens during editing, and it doesn't mean that we left an editable
        area (in which case the selection changes to a non-editable one).

2009-05-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Fix for <rdar://problem/6916371>
        iWeb 'Announce' button does nothing after publishing to MobileMe

        Add linked-on-or-after check to allow older WebKit apps to use the
        old behavior of sniffing everything (including file: urls)

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2009-05-26  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Ada Chan and Oliver Hunt.

        Remove WebView observers in during fast teardown.
        <rdar://problem/6922619> REGRESSION (Tiger-only?): After restoring windows from the previous session, a crash occurs while attempting to quit Safari

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

2009-05-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6901751> 
        REGRESSION (r35515): Tiger crash painting the selection on registration page of car2go.com

        Remove WKCGContextIsSafeToClip.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2009-05-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6922371> REGRESSION (r43973): Can't type first
          character with an umlaut, circumflex, or accent in Mail or in a wiki

        * WebView/WebHTMLView.mm:
        (isTextInput): Moved here.
        (isInPasswordField): Moved here.
        (-[WebHTMLView becomeFirstResponder]): Update the exposeInputContext
        flag and let NSApplication update the input manager with the new input
        context if necessary.
        (-[WebHTMLView _updateSelectionForInputManager]): Changed to use the
        NSApp global instead of +[NSApplication sharedApplication].

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

        Fix the Tiger build.

        * Misc/WebNSObjectExtras.mm:
        (-[NSInvocation _webkit_invokeAndHandleException:]): Rename the local variable so that
        it doesn't conflict with a member variable on Tiger.

2009-05-26  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6921835> REGRESSION (r44115): Crash in Leopard Mail viewing message

        Fix case where we autorelease an object on the main thread that we are returning
        to another thread when using our _webkit_invokeOnMainThread method.

        * Misc/WebNSObjectExtras.mm:
        (returnTypeIsObject): Added.
        (-[WebMainThreadInvoker forwardInvocation:]): Autorelease the object on the calling
        thread, balancing a retain done on the main thread.
        (-[NSInvocation _webkit_invokeAndHandleException:]): Retain the object on the main
        thread.

2009-05-26  David Hyatt  <hyatt@apple.com>

        Back out the workaround for Mail crashing.  Darin is working on the real fix.

        * Misc/WebNSObjectExtras.mm:
        (-[WebMainThreadInvoker forwardInvocation:]):

2009-05-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25969.

        Stop using notifications for boundsChanged, since the notifications are being sent too late.
        Since subviews get resized before parents do, the notification comes in telling the WebHTMLView
        that its size has changed *before* we've done setNeedsLayout in the WebView size change callback.

        Become more like the Windows platform and just do the bounds changed immediately as our size is
        being altered by subclassing setFrameSize in WebView.

        Also patch WebDynamicScrollbarsView to detect the case where neither axis is really spilling out
        past the viewport, so that in shrinking situations we figure out that we don't need scrollbars
        any more.

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):
        * WebView/WebView.mm:
        (-[WebView _boundsChangedToNewSize:]):
        (-[WebView setFrameSize:]):
        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewDidMoveToWindow]):

2009-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        - WebKit side of <rdar://problem/6914001>.

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::didCreateWindow):
        Iterate over all plug-in hosts. If one is in full-screen mode, make sure to activate the
        WebKit app instead.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::isMenuBarVisible):
        Add getter.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        Add allowPopups flag.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::PluginRequest):
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::allowPopups):
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript):
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        Use "allowPopups" instead of "userGesture".
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add allowPopups argument to Evaluate.
        
        * Plugins/Hosted/WebKitPluginHostTypes.h:
        Use "allowPopups" instead of "userGesture".

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):
        Call didCreateWindow here.
        
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchCreatePage):
        Ditto.

2009-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        - Fix <rdar://problem/6915849>.
        
        Release the placeholder window after -[NSApplication runModalForWindow] returns.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::beginModal):
        (WebKit::NetscapePluginHostProxy::endModal):

2009-05-24  Dan Bernstein  <mitz@apple.com>

        - revert an accidental change from r43964.

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

2009-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein and Tim Hatcher.

        <rdar://problem/6913045> New console message spewed by automator CLI after installing JetstreamLeo40B21a

        * Misc/WebNSObjectExtras.mm:
        (-[WebMainThreadInvoker initWithTarget:]): Tweaked argument name.
        (-[WebMainThreadInvoker forwardInvocation:]): Removed call to retainArguments.
        This was unneeded and in the case of a newly created but not yet fully initialized
        NSView object it caused the abovementioned bug.
        (-[WebMainThreadInvoker handleException:]): Tweaked argument name. Added assertion.
        (-[NSInvocation _webkit_invokeAndHandleException:]): Tweaked name of local variable
        that holds the exception.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

        <https://bugs.webkit.org/show_bug.cgi?id=25495>

        Reviewed by Oliver Hunt.

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:]): Return
        0 instead of an empty auto_ptr<>.
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]): Use
        OwnPtr<> instead of auto_ptr<> for stack variable.
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::createHTMLParserQuirks): Return a PassOwnPtr<>
        instead of a raw HTMLParserQuirks pointer.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

        <https://bugs.webkit.org/show_bug.cgi?id=25495>

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/wtf/OwnPtrCommon.h: Added.
        * ForwardingHeaders/wtf/PassOwnPtr.h: Added.

2009-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - Fix <rdar://problem/6913765> REGRESSION (r42331-r42334): Extra scroll
          bars appearing on Welcome panels of iLife '09 apps

        * WebView/WebView.mm:
        (needsUnwantedScrollBarWorkaround): Added. Checks if this is a panel
        where scroll bars are unwanted. For safety, limited to only Apple applications. 
        (-[WebView viewDidMoveToWindow]): If the workaround is needed, disallow
        scrolling the main frame. This prevents scroll bars from appearing.

2009-05-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=25955

        Remove the policyBaseURL parameter from setCookie.  This parameter is
        redudant with the document parameter.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::setCookies):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setVariable:forURL:value:length:]):

2009-05-21  Darin Fisher  <darin@chromium.org>

        Fix-up coding style.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::getAutoCorrectSuggestionForMisspelledWord):

2009-05-20  Siddhartha Chattopadhyaya  <sidchat@google.com>

        Reviewed by Justin Garcia.
        
        Add automatic spell correction support in WebKit

        https://bugs.webkit.org/show_bug.cgi?id=24953

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::getAutoCorrectSuggestionForMisspelledWord):

2009-05-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6907542> REGRESSION (r43143): Hang in RenderLineBoxList::dirtyLinesFromChangedChild
        when clicking link to load Flash animation (http://www.roambi.com)

        * WebCoreSupport/WebEditorClient.mm: (WebEditorClient::respondToChangedSelection):
        Don't call -[NSApplication updateWindows] here, WebHTMLView can take care of this.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView inputContext]): Use a precomputed boolean stored in WebHTMLViewPrivate, as
        calling isTextInput() is not always safe.
        (-[WebHTMLView textStorage]): Ditto.
        (-[WebHTMLView _updateSelectionForInputManager]): Update _private->exposeInputContext when
        selection changes, and let AppKit update its cache if necessary.

2009-05-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5579292> REGRESSION (2-3): "Default default" encoding for Korean changed
        from Korean (Windows, DOS) to Korean (ISO 2022-KR), which breaks some sites

        * WebView/WebPreferences.mm:
       (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]): Update the existing fix
       for the changed result of CFStringConvertEncodingToIANACharSetName().

2009-05-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6883758> REGRESSION (r43143): First character typed with input method does
        not go into inline hole (seen with Chinese & Kotoeri on top Chinese website www.baidu.com)

        * WebCoreSupport/WebEditorClient.mm: (WebEditorClient::respondToChangedSelection):
        Call -[NSApplication updateWindows] to make AppKit re-fetch the input context when selection
        changes. Since we use SelectionController to check whether the view is editable, it is
        important not to re-fetch the context too early, e.g. from a focus changed notification.

2009-05-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Rename DragController::dragOperation() to sourceDragOperation() for clarity

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

2009-05-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        - WebKit part of <rdar://problem/6901751> REGRESSION (r35515): Tiger
          crash painting the selection on registration page of car2go.com

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Added CGContextIsSafeToClip.

2009-05-20  Stephanie Lewis  <slewis@apple.com>

        Update the order files.  <rdar://problem/6881750> Generate new order files.

        * WebKit.order:

2009-05-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6905336> REGRESSION: "Clear History" does not save empty history to disk

        * History/WebHistory.mm:
        (-[WebHistoryPrivate data]): If there are no entries, return an empty NSData instead of nil.

2009-05-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Kevin Decker.

        WebKit side of <rdar://problem/6895072>
        
        Pass the localization as a launch property.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

2009-05-20  Dan Bernstein  <mitz@apple.com>

        - fix the build after r43918

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::setCursor):

2009-05-20  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4023899> Shift-Tab skips key views in toolbar in Safari, although Tab
        iterates through them properly

        * WebView/WebView.mm:
        (-[WebView previousValidKeyView]): Work around a bug in -[NSView previousValidKeyView].

2009-05-19  Timothy Hatcher  <timothy@apple.com>

        Add a new private API method that will dispatch pending loads that have been scheduled
        because of recent DOM additions or style changes.

        <rdar://problem/6889218> REGRESSION: Some iChat transcript resources are not
        loaded because willSendRequest doesn't happen immediately

        Reviewed by Antti Koivisto.

        * WebView/WebView.mm:
        (-[WebView _dispatchPendingLoadRequests]): Call Loader::servePendingRequests().
        * WebView/WebViewPrivate.h: Added _dispatchPendingLoadRequests.

2009-05-18  Sam Weinig  <sam@webkit.org>

        <rdar://problem/6899044> Can't see Apple ad on nytimes.com unless I spoof the user agent
        
        Add user agent hack for pointroll.com.

        Reviewed by Steve Falkenburg.

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

2009-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Dan Bernstein.

        Fix <rdar://problem/6889644>
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

2009-05-16  Dan Bernstein  <mitz@apple.com>

        - revert an accidental change from r43802.

        * WebInspector/WebInspector.mm:

2009-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6895347> Mouse wheeling in the QuickTime plug-in (incorrectly) scrolls the page
        
        Fix logic. The plug-in returns true if it handled the event.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):

2009-05-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - fix <rdar://problem/6873305> Two distinct characters are not displayed
          correctly with 2 of the font selections from the stickies widget

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _plainTextFromPasteboard:]): Return precomposed text.
        This is consistent with
        -_documentFragmentFromPasteboard:forType:inContext:subresources:.

2009-05-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/6875398>.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        If we failed to instantiate the plug-in, call cleanup() so that any streams created by the plug-in from its
        NPP_New callback are destroyed.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        Make cleanup() public.

2009-05-15  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6889823> hash table iterator used after hash table modified in
        ProxyInstance::fieldNamed() when viewing movie trailer

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed): Move add call after the waitForReply call.
        Anders says that by the time we return someone else might have done the same add
        for us.
        (WebKit::ProxyInstance::fieldNamed): Ditto.

2009-05-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6892055> 
        Replace WKN_GetLocation with WKN_ResolveURL (WKN_GetLocation was confusing and did not take the base URL into account)
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCResolveURL):
        New MIG callback.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::resolveURL):
        Use FrameLoader::complete URL here.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add new MIG definition.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView resolvedURLStringForURL:target:]):        
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        * Plugins/WebNetscapeContainerCheckPrivate.mm:
        (browserContainerCheckFuncs):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView resolveURL:forTarget:]):
        * Plugins/npapi.mm:
        (WKN_ResolveURL):

2009-05-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6892052> WebTextIterator should not “emit
          characters between all visible positions”

        * WebView/WebTextIterator.mm:
        (-[WebTextIterator initWithRange:]): Changed to construct a TextIterator
        with emitCharactersBetweenAllVisiblePositions set to false.

2009-05-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dave Kilzer.

        Look for libWebKitSystemInterface.a in a more reasonable location.

        * Configurations/DebugRelease.xcconfig:

2009-05-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        Fix for <rdar://problem/6886217> REGRESSION (S4 beta-ToT): Adium chat window contents no longer resize.

        Technically this is a bug in Adium.  It appears that Adium has subclassed the WebView and implemented
        viewDidMoveToWindow in its subclass improperly.  It doesn't call up to the base class WebView like it
        should and so our boundsChanged notification never gets added.

        Reduce the dependence on viewDidMoveToWindow by moving the registration of observers into
        viewWillMoveToWindow instead.

        * WebView/WebView.mm:
        (-[WebView addSizeObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        (-[WebView addWindowObserversForWindow:]):
        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewDidMoveToWindow]):
        (-[WebView viewDidMoveToSuperview]):

2009-05-14  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24704

        Allow the local cache directory to be set using a defaults key.

        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.m:
        (+[NSString _webkit_localCacheDirectoryWithBundleIdentifier:]):
        * WebKit.exp:

2009-05-14  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/6879999> Automator actions that use WebKit on a background thread fail when run outside of Automator

        * WebView/WebView.mm:
        (clientNeedsWebViewInitThreadWorkaround): Added. Contains new broader rule.
        (needsWebViewInitThreadWorkaround): Changed to call clientNeedsWebViewInitThreadWorkaround.

2009-05-14  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        Bug 24049: Second right-click crashes safari when alert invoked
        https://bugs.webkit.org/show_bug.cgi?id=24049
        rdar://problem/6878977

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView rightMouseUp:]): Added a retain/autorelease of the event.
        (-[WebHTMLView menuForEvent:]): Ditto. Also cleaned up the logic here and
        eliminated some use of pointers that might be invalid after calling through
        to WebCore.
        (-[WebHTMLView scrollWheel:]): Ditto.
        (-[WebHTMLView acceptsFirstMouse:]): Ditto.
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]): Ditto.
        (-[WebHTMLView mouseDown:]): Ditto.
        (-[WebHTMLView mouseDragged:]): Ditto.
        (-[WebHTMLView mouseUp:]): Ditto.
        (-[WebHTMLView keyDown:]): Ditto.
        (-[WebHTMLView keyUp:]): Ditto.
        (-[WebHTMLView flagsChanged:]): Ditto.
        (-[WebHTMLView performKeyEquivalent:]): Ditto.

2009-05-14  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin Adler.

        <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2

        The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode.
        Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR
        if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not.

        * Configurations/Base.xcconfig:

2009-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebKit side of <rdar://problem/6884476>.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetLocation):
        Forward this to the plug-in instance proxy.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getLocation):
        Ask the plug-in view for the location.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add MIG definition.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView locationStringForTarget:]):
        Return the URL for a given frame.
        
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        Bump version. Add new declaration to the vtable.
        
        * Plugins/WebNetscapeContainerCheckPrivate.mm:
        (browserContainerCheckFuncs):
        Add new declaration to the vtable.
        
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView locationForTarget:]):
        Call the base class method.
        
        * Plugins/npapi.mm:
        (WKN_GetLocation):
        Forward this to the plug-in view.

2009-05-13  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6871587> Smart Copy/Paste setting should persist as continuous
        spell checking setting does

        * WebView/WebPreferenceKeysPrivate.h: Added WebSmartInsertDeleteEnabled.

        * WebView/WebView.mm:
        (-[WebViewPrivate init]): Initialize based on WebSmartInsertDeleteEnabled
        default.
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        Removed code that initialized here.
        (-[WebView setSmartInsertDeleteEnabled:]): Set default here was with
        continuous spell checking setting.

2009-05-13  Darin Adler  <darin@apple.com>

        Revert the parser arena change. It was a slowdown, not a speedup.
        Better luck next time (I'll break it up into pieces).

2009-05-13  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 25674: syntax tree nodes should use arena allocation
        https://bugs.webkit.org/show_bug.cgi?id=25674

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Updated includes.
        New ones needed due to reducing includes of JSDOMBinding.h.
        * WebView/WebScriptDebugger.mm: Ditto.

2009-05-13  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6879145>
        Generate a contextual menu item allowing autocorrections to
        easily be changed back.  Refrain from re-correcting items
        that have already been autocorrected once.

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory contextMenuItemTagChangeBack:]):
        * WebView/WebUIDelegatePrivate.h:

2009-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/6878105>.
        
        When instantiating the QT plug-in under Dashboard, force "kiosk mode". 
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):

2009-05-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - declare a forgotten method

        * DOM/WebDOMOperationsPrivate.h: Declare -[DOMNode markupString] in the
        WebDOMNodeOperationsPendingPublic category.

2009-05-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/6870383> Have to enter credentials twice when downloading from a protected page

        * Misc/WebDownload.m: Removed.
        * Misc/WebDownload.mm: Copied from WebKit/mac/Misc/WebDownload.m.
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Try to use
        credentials from WebCore storage.

2009-05-08  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Fix clean builds, forgot to land name() -> formControlName() rename patch in WebKit. Only landed the WebCore side.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]):

2009-05-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        - Fix <rdar://problem/6866712>.

        Instead of just caching whether a plug-in object _has_ a field or method, also add an entry to the cache
        if it _doesn't_ have a certain field or method. This way we have to make fewer calls to the plug-in host.
        
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2009-05-08  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Darin Adler.

        Fixes for <rdar://problem/6852771>.
        Disable text checking menu items if view is not editable.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView smartInsertDeleteEnabled]):
        (-[WebHTMLView setSmartInsertDeleteEnabled:]):
        (-[WebHTMLView toggleSmartInsertDelete:]):
        * WebView/WebHTMLViewInternal.h:

2009-05-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/6868773> NPN_GetAuthenticationInfo does not work with non-permanent credentials

        * Plugins/WebBaseNetscapePluginView.mm: (WebKit::getAuthenticationInfo): Ask WebCore for
        credentials first (but also ask NSURLCredentialStorage, because WebCore won't know about
        permanent credentials).

2009-05-05  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.
        
        Add #if ENABLE(DATABASE) guards around database code so toggling ENABLE_DATABASE off does not break builds.
        https://bugs.webkit.org/show_bug.cgi?id=24776

        * Storage/WebDatabaseManager.mm:
        * Storage/WebDatabaseManagerInternal.h:
        * Storage/WebDatabaseManagerPrivate.h:
        * Storage/WebDatabaseTrackerClient.h:
        * Storage/WebDatabaseTrackerClient.mm:
        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        * Storage/WebSecurityOriginPrivate.h:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2009-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Fix <rdar://problem/6797644>.
        
        Make sure to send a reply even when an instance proxy can't be found.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        (WKPCInvoke):
        (WKPCInvokeDefault):
        (WKPCGetProperty):
        (WKPCHasProperty):
        (WKPCHasMethod):
        (WKPCEnumerate):

2009-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Bug 24924: remove Document.h include of Attr.h and HTMLCollection.h,
        and NamedMappedAttrMap.h include of MappedAttribute.h
        https://bugs.webkit.org/show_bug.cgi?id=24924

        * WebView/WebFrame.mm: Added include of CSSMutableStyleDeclaration.h
        and ScriptValue.h.

2009-05-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Simplified null-ish JSValues.
        
        Replaced calls to noValue() with calls to JSValue() (which is what
        noValue() returned). Removed noValue().
        
        Removed "JSValue()" initialiazers, since default construction happens...
        by default.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):

2009-05-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/6741615> REGRESSION (r38629): Shortcut "Flag/Junk" in MobileMe does not work
        when Kotoeri is used.

        * WebView/WebHTMLView.mm: (-[WebHTMLView inputContext]): Return a nil input context when
        focus is not in editable content.

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

        Rubber Stamped by Sam Weinig.
        
        Renamed JSValuePtr => JSValue.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
        (WebKit::NetscapePluginInstanceProxy::demarshalValue):
        (WebKit::NetscapePluginInstanceProxy::demarshalValues):
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyField::valueFromInstance):
        (WebKit::ProxyField::setValueToInstance):
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::invokeMethod):
        (WebKit::ProxyInstance::invokeDefaultMethod):
        (WebKit::ProxyInstance::invokeConstruct):
        (WebKit::ProxyInstance::defaultValue):
        (WebKit::ProxyInstance::stringValue):
        (WebKit::ProxyInstance::numberValue):
        (WebKit::ProxyInstance::booleanValue):
        (WebKit::ProxyInstance::valueOf):
        (WebKit::ProxyInstance::fieldValue):
        (WebKit::ProxyInstance::setFieldValue):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _convertValueToObjcValue:]):
        (-[WebScriptCallFrame exception]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (aeDescFromJSValue):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

2009-05-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Add a FrameLoaderClient callback for the ResourceRetrievedByXMLHttpRequest.

        https://bugs.webkit.org/show_bug.cgi?id=25347

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

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Provide a mechanism to create a quirks delegate for HTMLParser

        Reviewed by David Hyatt.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::createHTMLParserQuirks): Added.  The default
        implementation of this factory method returns 0.

2009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=25470
        Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define.

2009-04-30  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlson.

        <rdar://problem/6823049>
        
        Fix an issue where some plug-ins would cause the application icon to constantly bounce
        up and down in the Dock.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h: Change m_placeholderWindow ivar to be
        a subclass of NSWindow, WebPlaceholderModalWindow.
        * Plugins/Hosted/NetscapePluginHostProxy.mm:  Added WebPlaceholderModalWindow NSWindow subclass.
        (-[WebPlaceholderModalWindow _wantsUserAttention]): Prevent NSApp from calling requestUserAttention:
         when the window is shown modally, even if the app is inactive.
        (WebKit::NetscapePluginHostProxy::beginModal): NSWindow -> WebPlaceholderModalWindow.

2009-04-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25342
        Add MessageSource and MessageLevel parameters to the ChromeClient::addMessageToConsole.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::addMessageToConsole):

2009-04-29  Mark Rowe  <mrowe@apple.com>

        More build fixing after r43037.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::demarshalValues):

2009-04-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - WebKit part of <rdar://problem/6609509> Select All and then Delete
          should put Mail editing back into the same state as a new message

        * WebView/WebView.mm:
        (-[WebView _selectionIsCaret]): Added.
        (-[WebView _selectionIsAll]): Added. Returns whether the selection
        encompasses the entire document.
        * WebView/WebViewPrivate.h:

2009-04-29  Douglas Davidson  <ddavidso@apple.com>

        Reviewed by Justin Garcia.
        
        <rdar://problem/6836921> Mail exhibits issues with text checking, e.g. menu items not always validated correctly

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

2009-04-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Fix a bug in the bounds checking for setNeedsLayout dirtying when a WebView's size changes.  The superview
        of the WebView was being incorrectly checked instead of the WebView itself.

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

2009-04-29  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlson.

        Allow WKN_CheckIfAllowedToLoadURL() to take an optional void* context parameter.
        
        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.mm:
        (-[WebNetscapeContainerCheckContextInfo initWithCheckRequestID:callbackFunc:context:]):
        (-[WebNetscapeContainerCheckContextInfo callback]):
        (-[WebNetscapeContainerCheckContextInfo context]):
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        * Plugins/WebNetscapeContainerCheckPrivate.mm:
        (browserContainerCheckFuncs):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:context:]):
        (-[WebNetscapePluginView _containerCheckResult:contextInfo:]):
        * Plugins/npapi.mm:
        (WKN_CheckIfAllowedToLoadURL):

2009-04-29  David Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        Fix for <rdar://problem/6835573>, Find Banner turns invisible when WebView is resized.  Make sure
        not to resize the interior views of a WebView in response to its bounds changing when not using
        viewless WebKit.  Auto-resizing rules were already in place to handle size adjustments for us.
        Just mark as needing layout and do nothing else.

        This does mean viewless WebKit is broken with the Find Banner, and that will likely require a
        Safari change (using a new API that will enable clients to define the edges of the content area as offsets
        from the sides of the WebView).

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

2009-04-28  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Beth Dakin.
        
        Removed scaffolding supporting dynamically converting between 32bit and
        64bit value representations. 

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::marshalValues):

2009-04-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker and Darin Adler.

        Fix <rdar://problem/6836132>.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCCheckIfAllowedToLoadURL):
        Call the instance proxy.
        
        (WKPCCancelCheckIfAllowedToLoadURL):
        Ditto.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Initialize the check ID counter.
        
        (WebKit::NetscapePluginInstanceProxy::checkIfAllowedToLoadURL):
        Create a WebPluginContainerCheck, add it to the map, and start it.
        
        (WebKit::NetscapePluginInstanceProxy::cancelCheckIfAllowedToLoadURL):
        Remove the check from the map.
        
        (WebKit::NetscapePluginInstanceProxy::checkIfAllowedToLoadURLResult):
        Call the WKPH MIG callback.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView _webPluginContainerCancelCheckIfAllowedToLoadRequest:]):
        Call the instance proxy.
        
        (-[WebHostedNetscapePluginView _containerCheckResult:contextInfo:]):
        Ditto.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add MIG declarations.

2009-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/6786360> Make PDF an insertable pasteboard type

        * WebCoreSupport/WebPasteboardHelper.mm:
        (WebPasteboardHelper::insertablePasteboardTypes):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]):
        (+[WebHTMLView _insertablePasteboardTypes]):
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):

2009-04-27  Douglas R. Davidson  <ddavidso@apple.com>

        Add the various switches and context menu items needed for
        <rdar://problem/6724106> WebViews need to implement text checking
        and adopt updatePanels in place of old SPI _updateGrammar.

        Reviewed by Justin Garcia.

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients):
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::uppercaseWord):
        (WebEditorClient::lowercaseWord):
        (WebEditorClient::capitalizeWord):
        (WebEditorClient::showSubstitutionsPanel):
        (WebEditorClient::substitutionsPanelIsShowing):
        (WebEditorClient::toggleSmartInsertDelete):
        (WebEditorClient::isAutomaticQuoteSubstitutionEnabled):
        (WebEditorClient::toggleAutomaticQuoteSubstitution):
        (WebEditorClient::isAutomaticLinkDetectionEnabled):
        (WebEditorClient::toggleAutomaticLinkDetection):
        (WebEditorClient::isAutomaticDashSubstitutionEnabled):
        (WebEditorClient::toggleAutomaticDashSubstitution):
        (WebEditorClient::isAutomaticTextReplacementEnabled):
        (WebEditorClient::toggleAutomaticTextReplacement):
        (WebEditorClient::isAutomaticSpellingCorrectionEnabled):
        (WebEditorClient::toggleAutomaticSpellingCorrection):
        (WebEditorClient::checkTextOfParagraph):
        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory contextMenuItemTagShowColors]):
        (-[WebViewFactory contextMenuItemTagCorrectSpellingAutomatically]):
        (-[WebViewFactory contextMenuItemTagSubstitutionsMenu]):
        (-[WebViewFactory contextMenuItemTagShowSubstitutions:]):
        (-[WebViewFactory contextMenuItemTagSmartCopyPaste]):
        (-[WebViewFactory contextMenuItemTagSmartQuotes]):
        (-[WebViewFactory contextMenuItemTagSmartDashes]):
        (-[WebViewFactory contextMenuItemTagSmartLinks]):
        (-[WebViewFactory contextMenuItemTagTextReplacement]):
        (-[WebViewFactory contextMenuItemTagTransformationsMenu]):
        (-[WebViewFactory contextMenuItemTagMakeUpperCase]):
        (-[WebViewFactory contextMenuItemTagMakeLowerCase]):
        (-[WebViewFactory contextMenuItemTagCapitalize]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView isAutomaticQuoteSubstitutionEnabled]):
        (-[WebHTMLView setAutomaticQuoteSubstitutionEnabled:]):
        (-[WebHTMLView toggleAutomaticQuoteSubstitution:]):
        (-[WebHTMLView isAutomaticLinkDetectionEnabled]):
        (-[WebHTMLView setAutomaticLinkDetectionEnabled:]):
        (-[WebHTMLView toggleAutomaticLinkDetection:]):
        (-[WebHTMLView isAutomaticDashSubstitutionEnabled]):
        (-[WebHTMLView setAutomaticDashSubstitutionEnabled:]):
        (-[WebHTMLView toggleAutomaticDashSubstitution:]):
        (-[WebHTMLView isAutomaticTextReplacementEnabled]):
        (-[WebHTMLView setAutomaticTextReplacementEnabled:]):
        (-[WebHTMLView toggleAutomaticTextReplacement:]):
        (-[WebHTMLView isAutomaticSpellingCorrectionEnabled]):
        (-[WebHTMLView setAutomaticSpellingCorrectionEnabled:]):
        (-[WebHTMLView toggleAutomaticSpellingCorrection:]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):
        (-[WebView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebView setGrammarCheckingEnabled:]):
        (-[WebView isAutomaticQuoteSubstitutionEnabled]):
        (-[WebView isAutomaticLinkDetectionEnabled]):
        (-[WebView isAutomaticDashSubstitutionEnabled]):
        (-[WebView isAutomaticTextReplacementEnabled]):
        (-[WebView isAutomaticSpellingCorrectionEnabled]):
        (-[WebView setAutomaticQuoteSubstitutionEnabled:]):
        (-[WebView toggleAutomaticQuoteSubstitution:]):
        (-[WebView setAutomaticLinkDetectionEnabled:]):
        (-[WebView toggleAutomaticLinkDetection:]):
        (-[WebView setAutomaticDashSubstitutionEnabled:]):
        (-[WebView toggleAutomaticDashSubstitution:]):
        (-[WebView setAutomaticTextReplacementEnabled:]):
        (-[WebView toggleAutomaticTextReplacement:]):
        (-[WebView setAutomaticSpellingCorrectionEnabled:]):
        (-[WebView toggleAutomaticSpellingCorrection:]):
        * WebView/WebViewPrivate.h:

2009-04-27  David Kilzer  <ddkilzer@apple.com>

        Consolidate runtime application checks for Apple Mail and Safari

        Reviewed by Mark Rowe and Darin Adler.

        * WebCoreSupport/WebContextMenuClient.mm:
        (isAppleMail): Removed.
        (fixMenusToSendToOldClients): Switched to use
        applicationIsAppleMail().
        * WebView/WebFrame.mm:
        (-[WebFrame reload]): Switched to use applicationIsSafari().
        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]): Ditto.
        * WebView/WebResource.mm:
        (+[WebResource _needMailThreadWorkaroundIfCalledOffMainThread]):
        Switched to use applicationIsAppleMail().
        * WebView/WebView.mm:
        (runningLeopardMail): Ditto.
        (runningTigerMail): Ditto.
        (-[WebView _needsKeyboardEventDisambiguationQuirks]): Switched
        to use applicationIsSafari().

2009-04-27  Kevin Decker  <kdecker@apple.com>

        Fix the Tiger build.
        
        * Plugins/WebNetscapePluginView.mm: The base class of WebNetscapePluginView.mm, WebBaseNetscapePluginView, already implemented 
        the two methods below. But the Tiger compiler didn't know that. 
        (-[WebNetscapePluginView webView]): 
        (-[WebNetscapePluginView webFrame]):

2009-04-27  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6352982>
        
        * Plugins/WebBaseNetscapePluginView.mm: Removed checkIfAllowedToLoadURL:frame:callbackFunc, cancelCheckIfAllowedToLoadURL, and 
        _webPluginContainerCancelCheckIfAllowedToLoadRequest from the base class. These methods now exist in the subclass WebNetscapePluginView.
        
        Added WebNetscapeContainerCheckContextInfo, which is used as a "contextInfo" object in 
        -[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:]
        * Plugins/WebNetscapeContainerCheckContextInfo.h: Added.
        * Plugins/WebNetscapeContainerCheckContextInfo.mm: Added.
        (-[WebNetscapeContainerCheckContextInfo initWithCheckRequestID:callbackFunc:]): Added desiginated initializer.
        (-[WebNetscapeContainerCheckContextInfo checkRequestID]): Added. Returns the checkRequestID.
        (-[WebNetscapeContainerCheckContextInfo callback]): Added. Returns the callback.
        
        * Plugins/WebNetscapePluginView.h: Added two new ivars: _containerChecksInProgress and _currentContainerCheckRequestID.
        * Plugins/WebNetscapePluginView.mm: #import both WebPluginContainerCheck.h and WebNetscapeContainerCheckContextInfo.h
        
        (-[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:]): Added. This is the implementation of WKN_CheckIfAllowedToLoadURL.
        Here, we increment the request ID and start the container check.
        
        (-[WebNetscapePluginView _containerCheckResult:contextInfo:]): Added. This is a callback method for WebPluginContainerCheck.
        It's where we actually call into the plug-in and provide the allow-or-deny result.
    
        (-[WebNetscapePluginView cancelCheckIfAllowedToLoadURL:]): Added. This is the implementation of WKN_CancelCheckIfAllowedToLoadURL. 
        Here we lookup the check, cancel it, and remove it from _containerChecksInProgress.
        
        (-[WebNetscapePluginView _webPluginContainerCancelCheckIfAllowedToLoadRequest:]): Added. WebPluginContainerCheck automatically calls
        this method after invoking our _containerCheckResult: selector. It works this way because calling -[WebPluginContainerCheck cancel] allows
        it to do it's teardown process.
        
        (-[WebNetscapePluginView fini]): Release _containerChecksInProgress ivar.
        
        * Plugins/WebPluginContainerCheck.h: Removed initWithRequest: method from header; no client was using this method directly.
        * Plugins/WebPluginContainerCheck.mm: 
        (+[WebPluginContainerCheck checkWithRequest:target:resultObject:selector:controller:contextInfo:]): Added optional contextInfo parameter.
        (-[WebPluginContainerCheck _continueWithPolicy:]): If there's a contextInfo object, pass it as a parameter to resultSelector.
        (-[WebPluginContainerCheck cancel]): Release _contextInfo ivar.
        (-[WebPluginContainerCheck contextInfo]): Added new method. Returns the contextInfo object, if one so exists.
        * Plugins/WebPluginController.mm:
        (-[WebPluginController _webPluginContainerCheckIfAllowedToLoadRequest:inFrame:resultObject:selector:]): Pass nil for contextInfo. WebKit-style
        plug-ins do not need additional context information.

2009-04-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Some *obvious* style cleanup in my last patch.

        * History/WebBackForwardList.mm:
        (bumperCarBackForwardHackNeeded):

2009-04-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver Hunt

        <rdar://problem/6817607> BumperCar 2.2 crashes going back (invalid WebHistoryItem)

        BumperCar was holding a pointer to a WebHistoryItem they never retain, then later
        tried to go to it.  In some cases it would be dealloc'ed first.
        When WebHistoryItems were pure Objective-C they probably got away with this more often.
        With the WebCore/Obj-C mixed WebHistoryItems it's more likely to crash.

        * History/WebBackForwardList.mm:
        (bumperCarBackForwardHackNeeded):
        (-[WebBackForwardList backListWithLimit:]):  If this is BumperCar, hang on to the
          NSArray of WebHistoryItems until the next time this method is called.
        (-[WebBackForwardList forwardListWithLimit:]):  Ditto.

        * Misc/WebKitVersionChecks.h: Added WEBKIT_FIRST_VERSION_WITHOUT_BUMPERCAR_BACK_FORWARD_QUIRK.

2009-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/6761635>.
        
        Make sure to keep an extra reference to the instance proxy in case the plug-in host crashes while
        we're waiting for a reply.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::destroy):

2009-04-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Currently working on a bug where a WebHistoryItem was being used after being dealloc'ed.
        I added this assertion to help catch the case as soon as it happens instead of random
        issues downstream.  Figured it's worth checking in by itself.

        * History/WebHistoryItem.mm:
        (core): ASSERT that the WebCore::HistoryItem inside this WebHistoryItem is supposed to have
          this WebHistoryItem as a wrapper.

2009-04-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6333461> REGRESSION (r36864-r36869): 
        Dragging stocks widget scrollbar drags the whole widget

        Look for our new WebCore scrollbars in the WebHTMLView and add 
        proper Dashboard regions for them.

        * WebView/WebView.mm:
        (-[WebView _addScrollerDashboardRegionsForFrameView:dashboardRegions:]):
        (-[WebView _addScrollerDashboardRegions:from:]):

2009-04-23  John Sullivan  <sullivan@apple.com>

        fixed <rdar://problem/6822479> Assertion failure after Reset Safari in new history-writing code

        Reviewed by Oliver Hunt

        * History/WebHistory.mm:
        (-[WebHistoryPrivate data]):
        Return nil immediately if there are no entries; this matches a recent Windows-platform fix.

2009-04-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25313
        Missing scroll bars in GMail.

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]): Added check for the ScrollbarAlwaysOn
            scroll mode.

2009-04-23  Kevin Decker  <kdecker@apple.com>

        * Plugins/WebPluginContainerCheck.h: Fix the Tiger build.

2009-04-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        Fix <rdar://problem/6821992>

        Add a new m_inDestroy member variable. Set it to true when in destroy, and have all NPRuntime functions return false
        when m_inDestroy is true.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::destroy):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):

2009-04-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/6789879> REGRESSION (42464): Hitting assertion when loading message in Mail + TOT WebKit
        
        Make the Mac platform the same as all the other platforms.  Instead of (incorrectly) marking a FrameView for layout
        when its underlying document view changes, just mark the outermost frame view for layout when the WebView's size changes.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):
        (-[WebHTMLView addSuperviewObservers]):
        * WebView/WebView.mm:
        (-[WebView _boundsChanged]):
        (-[WebView removeSizeObservers]):
        (-[WebView addSizeObservers]):

2009-04-23  Kevin Decker  <kdecker@apple.com>

        Reviewed by Tim Hatcher.

        Second part of the fix for <rdar://problem/6352982>

        * Plugins/WebBaseNetscapePluginView.h: Make this class conform to WebPluginContainerCheckController
        * Plugins/WebBaseNetscapePluginView.mm: Likewise.
        (-[WebBaseNetscapePluginView _webPluginContainerCancelCheckIfAllowedToLoadRequest:]): Added skeleton method.
        * Plugins/WebPluginContainerCheck.h: Added protocol for <WebPluginContainerCheckController>
        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck initWithRequest:target:resultObject:selector:controller:]):
        * Plugins/WebPluginController.h: Make this class conform to WebPluginContainerCheckController

2009-04-23  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.
        
        First part of <rdar://problem/6352982>

        * Plugins/WebBaseNetscapePluginView.h: Imported #WebNetscapeContainerCheckPrivate.h; Added two new method:
        checkIfAllowedToLoadURL:url:frame:callbackFunc: and cancelCheckIfAllowedToLoadURL:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:]): Added skeleton method, does nothing interesting
        yet.
        (-[WebBaseNetscapePluginView cancelCheckIfAllowedToLoadURL:]): Likewise.
        * Plugins/WebNetscapeContainerCheckPrivate.h: Added.
        * Plugins/WebNetscapeContainerCheckPrivate.mm: Added.
        (browserContainerCheckFuncs): Added. 
        * Plugins/WebNetscapePluginView.h: Imported #WebNetscapeContainerCheckPrivate.h;
        * Plugins/WebNetscapePluginView.mm: Imported #WebNetscapeContainerCheckPrivate.h; added WKN_CheckIfAllowedToLoadURL
        and WKN_CancelCheckIfAllowedToLoadURL functions.
        (-[WebNetscapePluginView getVariable:value:]): Return vtable for container check functions.
        * Plugins/npapi.mm:
        (WKN_CheckIfAllowedToLoadURL): Added new private function.
        (WKN_CancelCheckIfAllowedToLoadURL): Ditto.

2009-04-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6757346> SAP: Prevent default on mouseDown does not stop iframe from capturing subsequent mouse moves
        
        Make mouseUP forward to the root view as we do for mouseMoves and mouseDragged:.

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

2009-04-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6757346> SAP: Prevent default on mouseDown does not stop iframe from capturing subsequent mouse moves
        
        Make mouseDragged forward to the root view as we do for mouseMoves.

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

2009-04-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Fix <rdar://problem/6792694>
        
        When we're trying to instantiate a plug-in and the plug-in host has died, we need to invalidate the
        instance so that it doesn't stick around and do bad things.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):

2009-04-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Fix for <rdar://problem/6816957>
        Turn off Geolocation by default

        * Configurations/FeatureDefines.xcconfig:

2009-04-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt.

        - Mac part of fixing for <rdar://problem/6755137> Action dictionary for
          policy decision is missing keys when full-page zoom is used

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary): Use absoluteLocation() instead
        of pageX() and pageY(), which are adjusted for zoom.

2009-04-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Kevin Decker.

        WebKit side of <rdar://problem/6781642>.
        
        When we call resize with an actual changed size, block until the plug-in host is done.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::resize):
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-04-17  Timothy Hatcher  <timothy@apple.com>

        Change how sudden termination works with WebView teardown.

        <rdar://problem/6383352&6383379&6383940>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h: Remove disableSuddenTermination/enableSuddenTermination.
        * WebCoreSupport/WebChromeClient.mm: Ditto.
        * WebView/WebFrame.mm:
        (-[WebFrame _pendingFrameUnloadEventCount]): Ask the DOMWindow.
        * WebView/WebView.mm:
        (+[WebView canCloseAllWebViews]): Call DOMWindow::dispatchAllPendingBeforeUnloadEvents.
        (+[WebView closeAllWebViews]): Call DOMWindow::dispatchAllPendingUnloadEvents and
        call close on all the WebViews.
        (-[WebView _closeWithFastTeardown]): Remove code for unload event dispatch.
        (-[WebView _close]): Correct a comment.
        (+[WebView _applicationWillTerminate]): Call closeAllWebViews.
        * WebView/WebViewPrivate.h: Add canCloseAllWebViews and closeAllWebViews.

2009-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Tiger crash fix: Put VM tags in their own header file, and fixed up the
        #ifdefs so they're not used on Tiger.

        * ForwardingHeaders/wtf/VMTags.h: Copied from ForwardingHeaders/wtf/HashTraits.h.

2009-04-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6722845>
        In the Cocoa event model, NPWindow's window field should be null
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCConvertPoint):
        Get the instance proxy and call it's convertPoint function.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::convertPoint):
        Call convertPoint on the plug-in view.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add PCConvertPoint.
        
        * Plugins/WebBaseNetscapePluginView.h:
        Add a declaration for convertFromX:andY:space:toX:andY:space:.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView convertFromX:andY:space:toX:andY:space:]):
        Convert a point from one coordinate system to another.
        
        * Plugins/WebNetscapePluginEventHandler.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::drawRect):
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        Add CGContextRef to drawRect.

        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::drawRect):
        Set the passed in context.
        
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):
        Add NPN_ConvertPoint to the browserFuncs vtable.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        Only set the window for the Carbon event model.
        
        (-[WebNetscapePluginView restorePortState:]):
        It's OK for the window context to be null.
        
        (-[WebNetscapePluginView sendDrawRectEvent:]):
        Pass the CGContextRef to drawRect.

        * Plugins/npapi.mm:
        (NPN_ConvertPoint):
        Call the plug-in view method.

2009-04-20  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Tim Hatcher.

        Add licenses for xcconfig files.
        
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit.xcconfig:

2009-04-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        WebKit side of <rdar://problem/6781302>
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::keyEvent):
        Pass the event keyChar.
        
        (WebKit::NetscapePluginInstanceProxy::syntheticKeyDownWithCommandModifier):
        Ditto.
        
        (WebKit::NetscapePluginInstanceProxy::flagsChanged):
        Pass a 0 keyChar.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView flagsChanged:]):
        Call NetscapePluginInstanceProxy::flagsChanged.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add a keyChar argument.

2009-04-19  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6804809> REGRESSION: In Mail, Home and End do not scroll message

        If no scrolling occurs, call tryToPerform on the next responder.  Then our WebResponderChainSink
        will correctly detect if no responders handle the selector.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):
        (-[WebFrameView scrollToBeginningOfDocument:]):
        (-[WebFrameView scrollToEndOfDocument:]):
        (-[WebFrameView scrollLineUp:]):
        (-[WebFrameView scrollLineDown:]):

2009-04-19  David Kilzer  <ddkilzer@apple.com>

        Make FEATURE_DEFINES completely dynamic

        Reviewed by Darin Adler.

        Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME
        variables for each feature, making it possible to remove all
        knowledge of FEATURE_DEFINES from build-webkit.

        * Configurations/FeatureDefines.xcconfig: Extract a variable
        from FEATURE_DEFINES for each feature setting.

2009-04-18  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6781295> video.buffered and video.seekable are not
        the same. video.buffered should return only what is buffered and
        not what is seekable

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Add wkQTMovieMaxTimeSeekable.

2009-04-18  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6747241> work around QTKit no longer reaching
        QTMovieLoadStateComplete

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Init the new WKSI exported symbol.

2009-04-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6714488>
        REGRESSION (Safari 3-4): Edit menu commands (cut/copy/paste/select all) do not work on Flash content
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::syntheticKeyDownWithCommandModifier):
        Send a keyDown event to the plug-in host.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView sendModifierEventWithKeyCode:character:]):
        Call the plug-in instance proxy.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendModifierEventWithKeyCode:character:]):
        Add this. Subclasses are required to override it.
        
        (-[WebBaseNetscapePluginView cut:]):
        (-[WebBaseNetscapePluginView copy:]):
        (-[WebBaseNetscapePluginView paste:]):
        (-[WebBaseNetscapePluginView selectAll:]):
        Call sendModifierEventWithKeyCode.
        
        * Plugins/WebNetscapePluginEventHandler.h:
        Add syntheticKeyDownWithCommandModifier.
        
        * Plugins/WebNetscapePluginEventHandlerCarbon.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::syntheticKeyDownWithCommandModifier):
        Send the synthetic event.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::syntheticKeyDownWithCommandModifier):
        Send the synthetic event.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendModifierEventWithKeyCode:character:]):
        Call the event handler.

2009-04-17  David Kilzer  <ddkilzer@apple.com>

        Simplify FEATURE_DEFINES definition

        Reviewed by Darin Adler.

        This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME
        variables to their own FeatureDefines.xcconfig file.  It also
        extracts a new ENABLE_GEOLOCATION variable so that
        FEATURE_DEFINES only needs to be defined once.

        * Configurations/FeatureDefines.xcconfig: Added.
        * Configurations/WebKit.xcconfig: Removed definition of
        ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES.  Added include
        of FeatureDefines.xcconfig.

2009-04-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix crashes seen in regression tests with hosted plug-ins.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::cancelStreamLoad): Check the stream for 0,
        not the stream ID.

2009-04-17  Darin Adler  <darin@apple.com>

        Reviewed by Antti Koivisto.

        Bug 25210: don't use ObjC methods to wrap/unwrap DOM objects with ObjC
        https://bugs.webkit.org/show_bug.cgi?id=25210

        * DOM/WebDOMOperations.mm:
        (-[DOMNode markupString]): Use the core function instead of an Objective-C method.
        (-[DOMNode _subresourceURLs]): Ditto.
        (-[DOMDocument _focusableNodes]): Ditto.
        (-[DOMRange webArchive]): Ditto.
        (-[DOMRange markupString]): Ditto.

        * Misc/WebElementDictionary.mm: Added now-needed include since the core and kit
        functions now come from the internal headers from DOM bindings.
        * Misc/WebNSPasteboardExtras.mm: Ditto.
        * Plugins/WebNullPluginView.mm: Ditto.
        * Plugins/WebPluginController.mm: Ditto.
        * WebCoreSupport/WebChromeClient.mm: Ditto.
        * WebCoreSupport/WebInspectorClient.mm: Ditto.
        * WebCoreSupport/WebPasteboardHelper.mm: Ditto.
        * WebView/WebHTMLView.mm: Ditto.

        * WebCoreSupport/WebEditorClient.mm: Made kit function have internal linkage
        since it's only used in this file. Someone had instead added a declaration to
        suppress the warning you would otherwise get. Removed the core function.
        (WebEditorClient::textFieldDidBeginEditing): Added correct type checking.
        Previously the function would check only that something was an HTMLElement,
        but then cast it to HTMLInputElement. Also call kit instead of old wrap method.
        (WebEditorClient::textFieldDidEndEditing): Ditto.
        (WebEditorClient::textDidChangeInTextField): Ditto.
        (WebEditorClient::doTextFieldCommandFromEvent): Ditto.
        (WebEditorClient::textWillBeDeletedInTextField): Ditto.
        (WebEditorClient::textDidChangeInTextArea): Ditto, but for HTMLTextAreaElement.

        * WebView/WebFrame.mm: Removed the core and kit functions here which are no longer
        needed since they're automatically generated now.
        (-[WebFrame _nodesFromList:]): Use kit.
        (-[WebFrame _markupStringFromRange:nodes:]): Use core.
        (-[WebFrame _stringForRange:]): More of the same.
        (-[WebFrame _caretRectAtNode:offset:affinity:]): Ditto.
        (-[WebFrame _firstRectForDOMRange:]): Ditto.
        (-[WebFrame _scrollDOMRangeToVisible:]): Ditto.
        (-[WebFrame _rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        Ditto.
        (-[WebFrame _convertNSRangeToDOMRange:]): Ditto.
        (-[WebFrame _convertDOMRangeToNSRange:]): Ditto.
        (-[WebFrame _markDOMRange]): Ditto.
        (-[WebFrame _smartDeleteRangeForProposedRange:]): Ditto.
        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Ditto.
        (-[WebFrame _documentFragmentWithMarkupString:baseURLString:]): Ditto.
        (-[WebFrame _documentFragmentWithNodesAsParagraphs:]): Ditto.
        (-[WebFrame _replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]): Ditto.
        (-[WebFrame _characterRangeAtPoint:]): Ditto.
        (-[WebFrame _typingStyle]): Ditto.
        (-[WebFrame _setTypingStyle:withUndoAction:]): Ditto.
        (-[WebFrame _pauseAnimation:onNode:atTime:]): Ditto.
        (-[WebFrame _pauseTransitionOfProperty:onNode:atTime:]): Ditto.
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]): Ditto.

        * WebView/WebFrameInternal.h: Removed the core and kit functions here which are no longer
        needed since they're automatically generated now.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]): Use core.
        (formElementFromDOMElement): Ditto.
        (inputElementFromDOMElement): Ditto.
        * WebView/WebTextIterator.mm:
        (-[WebTextIterator initWithRange:]): Ditto.
        (-[WebTextIterator currentRange]): Ditto.
        (-[WebTextIterator currentNode]): Ditto.
        * WebView/WebView.mm:
        (-[WebView textIteratorForRect:]): Ditto.
        (-[WebView setSelectedDOMRange:affinity:]): Ditto.

2009-04-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebKit side of <rdar://problem/6449642>.
        
        * Plugins/Hosted/HostedNetscapePluginStream.h:
        (WebKit::HostedNetscapePluginStream::create):
        New function that creates a stream from a frame loader.
        
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        Add the constructor that takes a frame loader.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Pass "fullFrame" to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCCancelLoadURL):
        Call NetscapePluginInstanceProxy::cancelStreamLoad.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::create):
        Pass "fullFrame" to the constructor.
        
        (WebKit::NetscapePluginInstanceProxy::manualStream):
        New getter for the manual stream.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Take the implicit request into account if we have a full frame plug-in.
        
        (WebKit::NetscapePluginInstanceProxy::setManualStream):
        Setter for the manual stream.
        
        (WebKit::NetscapePluginInstanceProxy::cancelStreamLoad):
        Cancel the manual stream if necessary.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        WebHostedNetscapePluginView now conforms to the WebPluginManualLoader protocol.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        Pass "fullFrame" to instantiatePlugin.
        
        (-[WebHostedNetscapePluginView pluginView:receivedResponse:]):
        (-[WebHostedNetscapePluginView pluginView:receivedData:]):
        (-[WebHostedNetscapePluginView pluginView:receivedError:]):
        (-[WebHostedNetscapePluginView pluginViewFinishedLoading:]):
        Call the equivalent manual stream functions.
        
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        Use a macro for getting the plug-in view type.

2009-04-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=25157
        
        Move the run loop observer cleanup from -close
        to -_close.

        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView close]):

2009-04-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        - Speculative fix for <rdar://problem/6781422> 

        Protect the plug-in instance proxy in case it's deleted while waiting for a reply.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::wheelEvent):

2009-04-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Initialize WebKitSystemInterface in class methods that could get called before a WebView/WebFrame is set up.  This was causing Mail to crash on launch.

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

2009-04-13  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        <rdar://problem/6784955> REGRESSION: closing a tab containing a PDF causes world leaks
        
        Simplify the _trackFirstResponder method by just caching the value instead of retaining
        a Cocoa object.
        
        * WebView/WebPDFView.h: Eliminated trackedFirstResponder object and replaced it with
        a firstResponderIsPDFDocumentView boolean.
        * WebView/WebPDFView.mm: 
        (-[WebPDFView dealloc]): Removed no longer necessary ASSERT.
        (-[WebPDFView viewWillMoveToWindow:]): Removed call to release and nil-out trackedFirstResponder,
        which no longer exists. In the new code all we do now is set firstResponderIsPDFDocumentView to NO.
        (-[WebPDFView _trackFirstResponder]): Rewrote this method to just cache the value instead
        of retaining an object.

2009-04-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25125.  Rework scrolling so that a layout happens first when
        it's already needed so that the code doesn't end up making bad decisions based off invalid document sizes.

        This patch also eliminates WebHTMLView's separate notion of needing a layout and just consolidates it with
        WebCore's notion of needing layout.

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):
        (-[WebHTMLView initWithFrame:]):
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView setNeedsLayout:]):
        (-[WebHTMLView _layoutIfNeeded]):
        (-[WebHTMLView _needsLayout]):
        * WebView/WebHTMLViewInternal.h:

2009-04-13  Darin Adler  <darin@apple.com>

        * WebView/WebViewPrivate.h: Updated comments.

2009-04-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/6740294> Increase the connection count per host

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2009-04-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Tweak my last check-in, moving the thread violation check up to the API-level calls so the logging is more
        useful to developers/users.

        * WebView/WebFrame.mm:
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]): If not on the main thread, only
          perform the "call on main thead" workaround, as the log/exception raising is now up at the API level.
        (-[WebFrame loadData:MIMEType:textEncodingName:baseURL:]): Perform a thread violation check here so logging
          is more meaningful.
        (-[WebFrame loadHTMLString:baseURL:]): Ditto.
        (-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]): Ditto.

2009-04-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin Decker

        <rdar://problem/6712063> Garmin WebUpdater crashes

        * WebView/WebFrame.mm:
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):  If not called on the main thread,
          add a ThreadViolationCheckRoundTwo() call to either log or raise an exception.  In the case where it's
          only a log, reschedule the _loadData call to occur on the main thread.

2009-04-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt.

        - fix <rdar://problem/6752340> Light blue-green background in content
          area in Mail

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        Use device white, rather than calibrated white, as the default
        background color.

2009-04-10  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/6773515> crash in push_heap inside WebCore when printing

        The crash was due to manipulating a timer on a different thread than the one it was created on.

        * History/WebHistoryItem.mm:
        (-[WebWindowWatcher windowWillClose:]): Call later on main thread, if called on non-main thread.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView windowDidBecomeKey:]): Ditto.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView windowWillClose:]): Ditto.
        (-[WebHTMLView _updateControlTints]): Added. Factored out the non-thread-safe part of
        our override of _windowChangedKeyState.
        (-[WebHTMLView _windowChangedKeyState]): Call _updateControlTints later on main thread, if
        called on non-main thread.
        * WebView/WebPreferences.mm:
        (-[WebPreferences _postPreferencesChangesNotification]): Call later on main thread, if called
        on non-main thread

2009-04-10  Timothy Hatcher  <timothy@apple.com>

        Remove DOMDocumentPrivate.h now that <rdar://problem/6730996> is fixed.

        Rubber-stamped by Mark Rowe.

        * Misc/DOMDocumentPrivate.h: Removed.

2009-04-10  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6646998> Avoid starting QTKitServer if possible
        Add the requires symbol in the WebSystemInterface. It is used by
        WebCore.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Add wkQTIncludeOnlyModernMediaFileTypes.

2009-04-09  Kevin Decker  <kdecker@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4680397> tearing seen because deferred updates are disabled
        
        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]): Don't call WKDisableCGDeferredUpdates on post-Leopard if 
        NSAppKitVersionNumberWithDeferredWindowDisplaySupport is defined.

2009-04-09  John Sullivan  <sullivan@apple.com>

        <rdar://problem/6775682> WebKit's support for SnowLeopard sudden termination for 
        downloads is broken and should be removed

        Reviewed by Darin Adler

        * Misc/WebDownload.m:
        (-[WebDownloadInternal downloadDidBegin:]):
        remove disableSuddenTermination call
        (-[WebDownloadInternal downloadDidFinish:]):
        remove enableSuddenTermination call
        (-[WebDownloadInternal download:didFailWithError:]):
        remove enableSuddenTermination call

2009-04-09  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson and Sam Weinig.

        Part of <rdar://problem/5438063> Saving history containing 100,000 entries causes pauses of 2s while browsing

        Longer term solution is to change the design so Safari doesn't read and write all of history.
        This patch is step one: Do the serializing, which is done on the main thread, much faster.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate data]): Added. Returns the NSData object containing serialized history.
        For creating new SPI so you can get the data in memory instead of on disk. Uses WebHistoryWriter.
        (-[WebHistoryPrivate saveToURL:error:]): Changed to call [self data
        (-[WebHistory _data]): Added.
        (WebHistoryWriter::WebHistoryWriter): Added.
        (WebHistoryWriter::writeHistoryItems): Added.

        * History/WebHistoryPrivate.h: Added a new _data method.

2009-04-09  Mike Thole  <mthole@apple.com>

        Rubber-stamped by Mark Rowe.

        Fix 64-bit build

        * Panels/WebAuthenticationPanel.h:
            Declare the 'separateRealmLabel' IBOutlet as an NSTextField instead of 'id'.
            This fixes a duplicate method warning (setAutoresizingMask: on NSView and CALayer)

2009-04-09  Mike Thole  <mthole@apple.com>

        Reviewed by Ada Chan.

        <rdar://problem/5697111> Basic authentication dialog spoofing vulnerability

        * Panels/WebAuthenticationPanel.h:
            Added IBOutlet for separateRealmLabel
        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
            In the realm case, decide if it is a simple or complex realm name.  A realm name
            is considered complex if it has any whitespace or newline characters.  Present
            alternative text and layout for the complex case, where the realm name isn't inline
            with the rest of the sheet's text.
        
        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
            Updated the nib with a new 'separateRealmLabel' outlet. 
            Updated the File's Owner to correctly be WebAuthenticationPanel.  
            Fixed springs on the sheet's icon to keep it from moving during a resize.

2009-04-09  David Kilzer  <ddkilzer@apple.com>

        Reinstating <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings

        Rolled r42345 back in.  The build failure was caused by an
        internal script which had not been updated the same way that
        build-webkit was updated.

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

2009-04-09  Alexey Proskuryakov  <ap@webkit.org>

        Reverting <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings.
        It broke Mac build, and I don't know how to fix it.

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

2009-04-08  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings

        Reviewed by Darin Adler and Maciej Stachowiak.

        Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so
        that SVG DOM Objective-C bindings may be optionally disabled.

        * Configurations/WebKit.xcconfig: Added
        ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in
        FEATURE_DEFINES.
        * DOM/WebDOMOperations.mm: Removed unused header.
        * MigrateHeaders.make: Switched from using ENABLE_SVG to using
        ENABLE_SVG_DOM_OBJC_BINDINGS.

2009-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben and Darin Adler

        Fix for https://bugs.webkit.org/show_bug.cgi?id=12440, fixed positioned elements end up in
        inconsistent positions.  Rewrite updateScrollers to improve the correctness.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build for real this time.

        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):
        (-[WebNetscapePluginView setVariable:forURL:value:length:]):
        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):
        * Plugins/npapi.mm:
        (NPN_GetValueForURL):
        (NPN_SetValueForURL):

2009-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben

        Mac portion of fix to make DumpRenderTree always produce accurate scrollbar results.  Change
        updateScrollers to call minimumContentsSize when a WebHTMLView is inside the WebDynamicScrollbarsView.

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]):

2009-04-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Anders Carlsson.

        Trying to fix Tiger build.

        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Try to fix the Leopard build once more.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):

2009-04-07  Anders Carlsson  <andersca@apple.com>

        ...and try to fix the Leopard build.
        
        * Plugins/npapi.mm:
        (NPN_GetAuthenticationInfo):

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Try to fix the Tiger build.

        * Plugins/WebBaseNetscapePluginView.mm:

2009-04-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6667001>
        NPAPI: need NPN_Get/SetValueForURL() and NPN_GetAuthenticationInfo()
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetCookies):
        (WKPCGetProxy):
        (WKPCSetCookies):
        (WKPCGetAuthenticationInfo):
        New MIG functions to be used by the plug-in host.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getCookies):
        (WebKit::NetscapePluginInstanceProxy::setCookies):
        (WebKit::NetscapePluginInstanceProxy::getProxy):
        (WebKit::NetscapePluginInstanceProxy::getAuthenticationInfo):
        Implement these.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add callbacks.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView URLWithCString:]):
        Factor this out of URLWithCString.
        
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        Call URLWithCString.
        
        (WebKit::proxiesForURL):
        Return a string representation of proxies for a given URL.
        
        (WebKit::getAuthenticationInfo):
        Get the authentication info for a given host/protocol/scheme/realm/port combination.
        
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):
        Initialize the new vtable functions.
        
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):
        (-[WebNetscapePluginView setVariable:forURL:value:length:]):
        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):
        Implement these.
        
        * Plugins/npapi.mm:
        (NPN_GetValueForURL):
        (NPN_SetValueForURL):
        (NPN_GetAuthenticationInfo):
        Call the plug-in view functions.

2009-04-03  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6756512>
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost): Tweaked the visibleName property.

2009-04-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Ada Chan
        
        <rdar://problem/6755838> Removing all icons can delete other items from disk.

        * Misc/WebIconDatabase.mm:
        (importToWebCoreFormat):
        When snooping around in various directories looking for a directory full of Safari-2-style
        icon database information to convert and delete, bail out without doing the delete part if
        we didn't actually find any Safari-2-style icon database information.

2009-04-03  John Sullivan  <sullivan@apple.com>

        fixed <rdar://problem/6355573> [WebView _setCacheModel:] leaks the result of _CFURLCacheCopyCacheDirectory

        Reviewed by Adam Roben

        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):
        use WebCFAutorelease rather than autorelease on result of method that returns CFStringRef

2009-04-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=24941

        This fix essentially does a -viewWillDraw call for layout. It adds 
        a CFRunLoopObserver which performs layout just before drawing on the 
        Mac platform. This makes sure layout is complete before rendering and 
        avoids a flash.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachRootGraphicsLayer):
        (WebChromeClient::setNeedsOneShotDrawingSynchronization):
        (WebChromeClient::scheduleViewUpdate):
        * WebView/WebView.mm:
        (-[WebViewPrivate _clearViewUpdateRunLoopObserver]):
        (-[WebView _viewWillDrawInternal]):
        (-[WebView viewWillDraw]):
        (-[WebView close]):
        (viewUpdateRunLoopObserverCallBack):
        (-[WebView _scheduleViewUpdate]):
        * WebView/WebViewInternal.h:

2009-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        WebKit side of <rdar://problem/6752953>.
        
        Pass the clip rect to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::resize):
        * Plugins/Hosted/WebKitPluginHost.defs:

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

        Reviewed by Dan Bernstein and Timothy Hatcher.

        <rdar://problem/6684745> Crash in -[WebView removeSizeObservers] when loading NIB file

        The implementation of -[NSView initWithCoder:] can result in -viewWillMoveToSuperview:/-viewDidMoveToSuperview: being sent to
        our view before we've had a chance to initialize _private, so we need to ensure it is non-nil before dereferencing it in those
        methods.

        * WebView/WebView.mm:
        (-[WebView removeSizeObservers]): Nil-check _private before dereferencing it.
        (-[WebView addSizeObservers]): Ditto.

2009-04-02  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Add a way to get a list of focusable nodes.

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument _focusableNodes]):
        * DOM/WebDOMOperationsInternal.h: Added.
        * DOM/WebDOMOperationsPrivate.h: Make this a private header.
        Move old methods to WebDOMOperationsInternal.h
        * WebView/WebHTMLView.mm: Use methods from WebDOMOperationsInternal.h

2009-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Bug 22378: Crash submitting a form when parsing an XHTML document
        https://bugs.webkit.org/show_bug.cgi?id=22378
        rdar://problem/6388377

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem targetItem]): Call targetItem directly instead of callling
        isTargetItem, hasChildren, and recurseToFindTargetItem.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchWillSubmitForm): Updated for the new
        textFieldValues function in FormState.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Updated for name and
        argument change of loadFrameRequest.

2009-04-01  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Mark Rowe.
        
        https://bugs.webkit.org/show_bug.cgi?id=24990
        Put SECTORDER_FLAGS into xcconfig files.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2009-03-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        WebKit side of <rdar://problem/6500266>.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::wheelEvent):
        Send the event.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView scrollWheel:]):
        Call NetscapePluginInstanceProxy::wheelEvent. If the plug-in processed the event, don't
        call super.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add definition.

2009-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6740581> REGRESSION (r41793): Page Down and Page Up don’t work in Leopard Mail

        * WebView/WebHTMLView.mm:
        (-[WebResponderChainSink tryToPerform:with:]): Added. Without this we would think we had
        handled an event when we actually hadn't. Specifically, when -[WebFrameView scrollPageDown:]
        calls tryToPerform on the next responder.

2009-03-30  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.
        
        https://bugs.webkit.org/show_bug.cgi?id=24938
        
        Build fixes when building --no-svg
        
        DOMHTMLFrameElementPrivate.h and DOMHTMLIFrameElementPrivate.h are only available with ENABLE_SVG.

        * MigrateHeaders.make:

2009-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        * Plugins/WebNullPluginView.mm: Added now-needed includes.
        * WebView/WebHTMLRepresentation.mm: Ditto.
        * WebView/WebHTMLView.mm: Ditto.

2009-03-27  Timothy Hatcher  <timothy@apple.com>

        * MigrateHeaders.make: Remove DOMHTMLBodyElementPrivate.h since it
        is not generated anymore.

2009-03-27  Adam Roben  <aroben@apple.com>

        Don't include substitute data URLs in global history redirect chains

        <rdar://6690169>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Don't call
        updateGlobalHistoryRedirectLinks. FrameLoader calls this for us now.
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        Added an assertion to help catch cases where we might be adding a
        substitute data URL into a redirect chain.

2009-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/6541923> REGRESSION (r38629): Tab cycle in empty tab is broken

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _wantsKeyDownForEvent:]): Only return YES when we have a Frame.

2009-03-27  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan and Anders Carlsson.

        <rdar://problem/5987442> Pasteboard not exposed to WebEditingDelegate for WebViewInsertActionPasted (needed for system services)

        Added SPI to tell which pasteboard is currently being inserted.
        I chose to put it on WebView to be forward-looking since we're migrating things
        from WebHTMLView to WebView in the future.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]): Add calls to _setInsertionPasteboard.
        (-[WebHTMLView _pasteAsPlainTextWithPasteboard:]): Ditto.
        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]): Assert the pasteboard is nil.
        (-[WebViewPrivate finalize]): Ditto.
        (-[WebView _insertionPasteboard]): Return the pastebaord.
        (-[WebView _setInsertionPasteboard:]): Set the pasteboard.
        * WebView/WebViewInternal.h: Added _setInsertionPasteboard.
        * WebView/WebViewPrivate.h: Added _insertionPasteboard.

2009-03-25  Timothy Hatcher  <timothy@apple.com>

        Expose new DOM methods as public Objective-C API.

        <rdar://problem/5837350> Expose new DOM classes and methods
        as public API (match the additions to the JavaScript DOM)

        Reviewed by Mark Rowe and Darin Adler.

        * MigrateHeaders.make:
        * Misc/DOMDocumentPrivate.h: Added. Forwarding header for
        <rdar://problem/6730996>.

2009-03-26  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add WebPreferences for encoding autodetection on Mac.
  
        http://bugs.webkit.org/show_bug.cgi?id=16482

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences usesEncodingDetector]):
        (-[WebPreferences setUsesEncodingDetector:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-03-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        - Fix <rdar://problem/6687055> and <rdar://problem/6713639>.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvalidateRect):
        Call NetscapePluginInstanceProxy::invalidateRect.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::cleanup):
        Stop the request timer, set m_pluginView to nil.
        
        (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
        No need to set m_pluginView to nil here anymore, it's now done in cleanup().
        
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        Assert that the plug-in view is not nil.
        
        (WebKit::NetscapePluginInstanceProxy::invalidateRect):
        Call setNeedsDisplayInRect here.

2009-03-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6714964>
        CrashTracer: [REGRESSION] 51 crashes in Safari at com.apple.WebKit • WebNetscapePluginStream::deliverData + 775
        
        Don't release m_deliveryData since it's a RetainPtr. Also, use adoptNS instead of releasing newDeliveryData manually.
        
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::deliverData):

2009-03-25  Mike Thole  <mthole@apple.com>

        Reviewed by Kevin Decker.
        
        <rdar://problem/6453738> call SetWindow when user creates a new tab
        
        CoreGraphics plug-ins now receive an NPP_SetWindow call when moving to a background tab.
        Flash is excluded from this change in behavior, as it has historical WebKit-specific code
        that isn't compatible with this change.

        * Plugins/WebNetscapePluginView.h:
            Added an _isFlash ivar.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _createPlugin]):
            Set the new _isFlash ivar based on the bundle identifier.
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
            When using the CG drawing model and in a non-drawable state,  set the portState
            to NULL and return early.
        (-[WebNetscapePluginView updateAndSetWindow]):
            When using the CG drawing model, call -setWindowIfNecessary even if the portState is NULL.
            Flash is an exception to this, due to its historical behavior.
        (-[WebNetscapePluginView setWindowIfNecessary]):
            Removed an assertion that was no longer true.  The [NSView focus] view
            is no longer guaranteed to be 'self' at this point.
            Also modified the debug logging for CG plug-ins to include the size of the 
            window's clipRect, which was useful in verifying the correct behavior of this patch.

2009-03-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - speculative fix for <rdar://problem/6630134> Crash at
          Editor::compositionRange()

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView markedRange]): Null-check the Frame like most other
        methods in this class.

2009-03-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6140966>
        Empty Caches does not clear the Cross-site XMLHttpRequest preflight cache

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

2009-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Mark Rowe & Dave Hyatt.

        Merge some of the individual Mail quirks into two settings that we can check for future quirks.

        * WebView/WebView.mm:
        (runningLeopardMail):
        (runningTigerMail):
        (-[WebView _preferencesChangedNotification:]):

2009-03-23  Darin Adler  <darin@apple.com>

        * WebView/WebTextIterator.h: Fixed a spelling error in a comment.

2009-03-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/6640741> Messages not displaying after the
          Safari 4 beta was installed

        Mail assumes that if -[WebArchive subresources] is not nil, then it
        contains at least one object.

        * WebView/WebArchive.mm:
        (-[WebArchive subresources]): Preserve the behavior of returning nil
        if there are no subresources.

2009-03-20  Adele Peterson  <adele@apple.com>

        Build fix.

        Reviewed by Darin Adler.

        * WebView/WebFrameView.mm: (-[WebFrameView initWithFrame:]):

2009-03-20  Timothy Hatcher  <timothy@apple.com>

        Change how threading exceptions are checked so they are reported
        by what round they were added. That way WebKit can decided the
        behavior per-round based on linked-on-or-after checks.

        <rdar://problem/6626741&6648478&6635474&6674079>

        Reviewed by Darin Adler.

        * History/WebBackForwardList.mm: Use the new WebCoreThreadViolationCheckRoundOne macro.
        * History/WebHistoryItem.mm: Ditto.
        * Misc/WebIconDatabase.mm: Ditto.

        * WebView/WebArchive.mm: Use the new WebCoreThreadViolationCheckRoundTwo macro.
        * WebView/WebResource.mm: Ditto.
        (+[WebResource _needMailThreadWorkaroundIfCalledOffMainThread]): Check Mail's bundle version
        to truly decide if it is an old Mail client.
        * WebView/WebView.mm: Ditto.

        * Misc/WebKitVersionChecks.h: Add a new linked-on-or-after version define.
        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]): Set the default thread violation behavior per-round
        based on difference version checks and the Mail workaround check.

2009-03-20  Darin Adler  <darin@apple.com>

        Reviewed by Timothy Hatcher.

        * WebView/WebTextIterator.h: Improved comments to point out some of the pitfalls
        of this SPI.

2009-03-20  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Use a better technique to handle finding out if something responds to a selector
        in WebHTMLView's doCommandBySelector method.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView doCommandBySelector:]): Removed unneeded check for 0 coreFrame;
        this is already handled by coreCommandBySelector: so doesn't need to be checked
        twice. Got rid of initial value for eventWasHandled boolean to make it more clear.
        Use WebResponderChainSink to find out if a command is handled rather than walking
        the responder chain explicitly.
        (-[WebResponderChainSink initWithResponderChain:]): Added.
        (-[WebResponderChainSink detach]): Added.
        (-[WebResponderChainSink receivedUnhandledCommand]): Added.
        (-[WebResponderChainSink noResponderFor:]): Added.
        (-[WebResponderChainSink doCommandBySelector:]): Added.

2009-03-19  Timothy Hatcher  <timothy@apple.com>

        Remove #ifndef BUILDING_ON_TIGER around code that schedules runloop modes
        for Page, so the new RunLoopTimer in WebCore always gets a default mode.
        Fixes the layout test failures on the Tiger build bots.

        Reviewed by Mark Rowe.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView scheduleInRunLoop:forMode:]):
        (-[WebView unscheduleFromRunLoop:forMode:]):

2009-03-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        WebKit side of <rdar://problem/6688244>.
        
        Try reinitializing the vendor port if it's invalid.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

2009-03-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6504776> 
        CrashTracer: [USER] 188 crashes in Safari at com.apple.WebCore • WTF::HashTableIterator<WTF::RefPtr<WebCore::ResourceLoader>, ...
        
        If the m_pluginView member was zeroed out as a result of making a call into the plug-in, the pluginFunctionCallDepth would be off
        causing the plug-in never to be stopped. Simplify the code by using a RAII object.

        * Plugins/WebBaseNetscapePluginStream.mm:
        (PluginStopDeferrer::PluginStopDeferrer):
        (PluginStopDeferrer::~PluginStopDeferrer):
        (WebNetscapePluginStream::startStream):
        (WebNetscapePluginStream::wantsAllStreams):
        (WebNetscapePluginStream::destroyStream):

2009-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6687005> Need support for new move-left/right selectors.

        * WebView/WebHTMLView.mm: Added the four new selectors to the command-forwarding list.
        * WebView/WebView.mm: Ditto.

2009-03-17  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        Bug 24477: REGRESSION (r41467): Page Down key scrolls two pages
        https://bugs.webkit.org/show_bug.cgi?id=24477
        rdar://problem/6674184

        * WebView/WebHTMLView.mm:
        (responderChainRespondsToSelector): Added.
        (-[WebHTMLView doCommandBySelector:]): Set eventWasHandled based on whether we
        can find a responder that responds to this selector rather than always assuming
        the selector will not be handled.

2009-03-17  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:

2009-03-17  David Kilzer  <ddkilzer@apple.com>

        Use -[NSURLResponse(WebCoreURLResponse) _webcore_MIMEType] consistently

        Reviewed by Darin Adler.

        WebKit r30323 added -_webcore_MIMEType to fix issues with
        incorrect MIME types in NS[HTTP]URLResponse objects.  However,
        uses of -[NSURLResponse MIMEType] still persist in WebKit that
        should be switched to use -_webcore_MIMEType.  Note that
        -[WebDataSource _responseMIMEType] calls back into WebCore to
        get the MIME type from the ResourceResponse object, which has
        already retrieved it via -_webcore_MIMEType.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::didReceiveResponse): Use
        -_webcore_MIMEType.
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::didReceiveResponse): Ditto.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView pluginView:receivedData:]): Ditto.
        * Plugins/WebPluginController.mm:
        (-[WebPluginController pluginView:receivedResponse:]): Ditto.
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation _isDisplayingWebArchive]): Use
        -[WebDataSource _responseMIMEType] instead.
        * WebView/WebPDFRepresentation.m:
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]): Ditto.
        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]): Ditto.

2009-03-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=24396
        
        Add WTF_USE_ACCELERATED_COMPOSITING, defined to 0 for now.

        * WebKitPrefix.h:

2009-03-17  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Mark Rowe.

        Get BUILDING_ON_* defines from Platform.h.
        
        https://bugs.webkit.org/show_bug.cgi?id=24630

        * WebKitPrefix.h:

2009-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6577174> Rename the text directionality submenus to “Paragraph Direction” and “Selection Direction”

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory contextMenuItemTagParagraphDirectionMenu]): Changed string here, but only
        post-Leopard, since we want this to match the Mac OS X menu on Tiger and Leopard.
        (-[WebViewFactory contextMenuItemTagSelectionDirectionMenu]): Changed string here.

2009-03-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Don't mig_deallocate random data in case an instance proxy method returns false.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        (WKPCInvoke):
        (WKPCInvokeDefault):
        (WKPCGetProperty):
        (WKPCEnumerate):

2009-03-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6633944> 
        REGRESSION (Safari 4 PB): Many crashes in Flip4Mac involving loading the plugin
        
        Defer loading while calling webPlugInInitialize since it can end up spinning the run loop.
        
        * Plugins/WebPluginController.mm:
        (-[WebPluginController addPlugin:]):

2009-03-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix <rdar://problem/6622601>
        
        Make sure to update both the window frame and the plug-in frame.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView addWindowObservers]):

2009-03-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - fix <rdar://problem/6607773> WebKit should support the "Default"
          paragraph writing direction -- or at least validate the menu item
          appropriately

        Made WebHTMLView validate user interface items with the selector
        -makeBaseWritingDirectionNatural: by returning NO and, if the item is
        a menu item, setting its state to "off".

        Strictly speaking, since -makeBaseWritingDirectionNatural: is never
        valid for WebViews, WebHTMLView should not need to respond to it and
        validate it, however because other responders respond to all three
        -makeBaseWritingDirection*: messages and set the menu item state, having
        WebHTMLView do the same makes application developers' lives easier.

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

2009-03-13  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Take advantage of the ability of recent versions of Xcode to easily switch the active
        architecture.

        * Configurations/DebugRelease.xcconfig:

2009-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker and Geoffrey Garen.

        <rdar://problem/6590384>
        REGRESSION (Safari 3-4): Tiger-only Crash occurs at WebView hostWindow () after reloading a set of tabs then quitting
        
        When we're doing fast teardown, plug-in views can be destroyed from -[WebView dealloc]'s [super dealloc] call, 
        and thus calling -[WebView hostWindow] will crash since _private is nil.
        
        * WebView/WebView.mm:
        (-[WebView hostWindow]):

2009-03-13  Anders Carlsson  <andersca@apple.com>

        And yet another attempt...
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        (WebNetscapePluginEventHandlerCocoa::installKeyEventHandler):
        (WebNetscapePluginEventHandlerCocoa::removeKeyEventHandler):
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:

2009-03-13  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the build.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa):

2009-03-13  Anders Carlsson  <andersca@apple.com>

        Try to fix the SL build.

        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::keyDown):

2009-03-13  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.

        Update Geolocation perimission dialogs to be asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=24505

        WebGeolocation is a wrapper around WebCore::Geolocation. It mimics the
        coding style set by WebSecurityOrigin.
        
        WebChromeClient now calls the private UI delegate method 
        -webView:frame:requestGeolocationPermission:securityOrigin:

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requestGeolocationPermissionForFrame):
        * WebCoreSupport/WebGeolocation.mm: Added.
        (WebCore::if):
        (-[WebGeolocation shouldClearCache]):
        (-[WebGeolocation setIsAllowed:]):
        (-[WebGeolocation dealloc]):
        * WebCoreSupport/WebGeolocationInternal.h: Added.
        * WebCoreSupport/WebGeolocationPrivate.h: Added.
        * WebView/WebUIDelegatePrivate.h:

2009-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6610666> Revise the Cocoa event model text API

        Replace the text input API with a simpler API that uses a separate text input window.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa):
        Initialize m_keyEventHandler to 0.
        
        (WebNetscapePluginEventHandlerCocoa::keyDown):
        If the plug-in returns 0 from NPP_HandleEvent, pass the event to the TSM machinery.
        
        (WebNetscapePluginEventHandlerCocoa::focusChanged):
        Install/remove the key event handler as needed.
        
        (WebNetscapePluginEventHandlerCocoa::handleTSMEvent):
        Get the text and send a TextInput event.
        
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        Remove the old text input API.
        
        (-[WebNetscapePluginView inputContext]):
        Always return nil here.
        
        * Plugins/npapi.mm:
        * Plugins/nptextinput.h: Removed.

2009-03-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mike Thole and Mark Rowe.

        Fix <rdar://problem/6624105>.
        
        Make sure to process incoming messages for the NSEventTrackingRunLoopMode as well.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):

2009-03-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        WebKit side of <rdar://problem/6607801>
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::destroy):
        Pass a requestID to _WKPCDestroyPluginInstance and wait until we get a reply back.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add requestID parameter.

2009-03-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _unloadWithShutdown:]): Simply a small SUPPORT_CFM code block.

2009-03-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        Fixed: <rdar://problem/5815862> Opening a subclassed NSWindow from a Safari plugin causes Safari to crash on Quit
        
        This fix addresses crashes in both Silverlight and ChemDraw.  This type of crash would occur because AppKit still
        had a reference to open windows that the plugin created (which no longer exist). 
        
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _unloadWithShutdown:]): Do not unload the plug-in bundle on browser shutdown. 
        
2009-03-11  David Kilzer  <ddkilzer@apple.com>

        Remove duplicate header include

        Rubber-stamped by Mark Rowe.

        * WebView/WebView.mm: Remove duplicate #include <runtime/InitializeThreading.h>.
        Also realphabetized lowercase #include statements.

2009-03-11  David Kilzer  <ddkilzer@apple.com>

        Clarify comments regarding order of FEATURE_DEFINES

        Rubber-stamped by Mark Rowe.

        * Configurations/WebKit.xcconfig: Added warning about the
        consequences when FEATURE_DEFINES are not kept in sync.

2009-03-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebKit side of <rdar://problem/6656147>.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Pass the requestID to _WKPHInstantiatePlugin.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        Pass the requestID to setCurrentReply.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::setCurrentReply):
        Store the reply in a map with the requestID as the key.
        
        (WebKit::NetscapePluginInstanceProxy::waitForReply):
        Wait for a reply that matches the given requestID.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Initialize member variables.
        
        (WebKit::NetscapePluginInstanceProxy::~NetscapePluginInstanceProxy):
        Delete all requests.
        
        (WebKit::NetscapePluginInstanceProxy::print):
        Pass the requestID to _WKPHPluginInstancePrint.
        
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        Rename m_currentRequestID to m_currentURLRequestID.
        
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply):
        Process requests until we find a reply with the right requestID.
        
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance):
        Pass a requestID to the _WKPH function.
        
        (WebKit::NetscapePluginInstanceProxy::nextRequestID):
        Ditto.
        
        * Plugins/Hosted/ProxyInstance.mm:
        Pass a requestID to the _WKPH functions.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add requestID parameters.

2009-03-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/6620064>.
        
        * Plugins/WebPluginContainerPrivate.h:

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Build fix, no review.

        * WebView/WebFrame.mm:
        (-[WebFrame _smartDeleteRangeForProposedRange:]):

2009-03-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        WebKit side of <rdar://problem/6530007>
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEnumerate):
        Call NetscapePluginInstanceProxy::enumerate.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        Enumerate the JS object and serialize its values.
        
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::getPropertyNames):
        Ask the plug-in host to get the property names and deserialize them.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-03-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt and Cameron Zwarich

        https://bugs.webkit.org/show_bug.cgi?id=24440
        
        The sublayer added to WebHTMLView to host accelerated compositing layers needs to
        be a subclass of NSView which allows context menu clicks through.

        * WebView/WebHTMLView.mm:
        (-[WebLayerHostingView rightMouseDown:]):
        (-[WebHTMLView attachRootLayer:]):

2009-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Split ScrollAlignment and ScrollBehavior out of RenderLayer.h so that
        Frame.h no longer needs to include it.  This cuts the size of the symbols
        for a debug build by around 3%.

        * Plugins/WebNetscapePluginView.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame _scrollDOMRangeToVisible:]):
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]):
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView jumpToSelection:]):
        (-[WebHTMLView centerSelectionInVisibleArea:]):

2009-03-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        - fix a bug where debug builds were clearing the HTML5 application cache
          on application termination

        * WebView/WebView.mm:
        (-[WebView _close]): Call -[WebCache setDisabled:YES] instead of
        -[WebCache empty].

2009-03-06  Douglas R. Davidson  <ddavidso@apple.com>

        Reviewed by Justin Garcia.

        https://bugs.webkit.org/show_bug.cgi?id=24108

        Update spelling and grammar checking to use the new combined text 
        checking (with automatic language identification) on Snow Leopard. 

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::checkSpellingAndGrammarOfParagraph):

2009-03-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=24079
        <rdar://problem/6611233> REGRESSION (r39549): Page loads cannot be interrupted with Command-. or Escape
        <rdar://problem/6636563> Ctrl-tab shortcut doesn't switch tabs when focus is in text field
       
        * WebView/WebHTMLView.mm: (-[WebHTMLView doCommandBySelector:]):
        If WebKit does not support the command, we need to pass the selector to super.  In this case,
        we'll consider the event not to be handled.  This is not perfect because in theory, [super doCommandBySelector:] 
        can do some action that would cause WebKit to need to consider the event handled.  But in practice, I've found no
        example of that happening and causing broken behavior.

2009-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6206172> Adoption of new Cocoa API for dictionary contextual menu

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

2009-03-04  Adam Barth  <abath@webkit.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24356

        Fix WebKit style for allowUniversalAccessFromFileURLs.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences allowUniversalAccessFromFileURLs]):
        (-[WebPreferences setAllowUniversalAccessFromFileURLs:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-03-03  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/6581203> WebCore and WebKit should install the same set of headers during installhdrs phase as build phase

        Reviewed by Mark Rowe.

        The fix is to add INSTALLHDRS_COPY_PHASE = YES and
        INSTALLHDRS_SCRIPT_PHASE = YES to WebKit.xcconfig, then to
        make sure various build phase scripts work with the installhdrs
        build phase.

        * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME
        based on PLATFORM_NAME to work around the missing definition on
        Tiger.
        * Configurations/WebKit.xcconfig: Added
        WEBCORE_PRIVATE_HEADERS_DIR variable to remove definition of
        UMBRELLA_FRAMEWORKS_DIR for Debug and Release builds in the
        Xcode project file.  Added INSTALLHDRS_COPY_PHASE = YES and
        INSTALLHDRS_SCRIPT_PHASE = YES.

2009-03-03  David Kilzer  <ddkilzer@apple.com>

        Remove last vestiges of JAVASCRIPTCORE_PRIVATE_HEADERS_DIR from WebKit

        Reviewed by Adam Roben.

        Use of JAVASCRIPTCORE_PRIVATE_HEADERS_DIR was removed in r37465
        since NPAPI headers had migrated from JavaScriptCore to WebCore
        before that.

        * Configurations/WebKit.xcconfig: Removed definition of
        JAVASCRIPTCORE_PRIVATE_HEADERS_DIR used in Production builds.

2009-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/6633834>.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Create a new plug-in instance if the plug-in host has crashed.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invalidate):
        Add a null check for the plug-in host proxy.

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

        Reviewed by Mark Rowe.

        Enable Geolocation (except on Tiger and Leopard).

        * Configurations/WebKit.xcconfig:

2009-03-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        WebKit part of <rdar://problem/6638658>.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::createPropertyListFile):
        Spawn the plug-in host and wait for it to create the property list.
        
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage createPropertyListFile]):
        Factor code out into a new method.
        
        (-[WebBasePluginPackage pListForPath:createFile:]):
        Call the newly added createPropertyListFile method.
        
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage createPropertyListFile]):
        Tell the plug-in host manager to create a property list file for us.

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

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/6507404> Add Geolocation support.

        This is not yet turned on for any Mac platform.

        Add SPI to ask the embedding application whether to allow
        Geolocation for an origin.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldAllowGeolocationForFrame):
        * WebView/WebUIDelegatePrivate.h:

2009-03-02  Anders Carlsson  <andersca@apple.com>

        Fix PowerPC build.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):

2009-03-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan, Ada Chan.

        Factor loading code out into its own method and get rid of a bunch of gotos.
        
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage load]):

2009-03-02  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * Plugins/WebNetscapeDeprecatedFunctions.h:

2009-03-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Rename WebNetscapePluginPackage.m to WebNetscapePluginPackage.mm

        * Plugins/WebNetscapePluginPackage.m: Removed.
        * Plugins/WebNetscapePluginPackage.mm: Copied from mac/Plugins/WebNetscapePluginPackage.m.

2009-03-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebKit side of <rdar://problem/6449689>

        Pass the visible name to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

2009-02-27  Alice Liu  <alice.liu@apple.com>

        Fix <rdar://problem/6531265> REGRESSION (r39185): adding ".jpeg"
        extension to images that already have .jpg extension

        Reviewed by Oliver Hunt.

        * WebView/WebHTMLView.mm:
        (-[NSString matchesExtensionEquivalent:]):
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
        Relax the check for the proper extension to allow for known
        equivalents, special-cased in matchesExtensionEquivalent function.

2009-02-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        <rdar://problem/6631436>
        CrashTracer: [USER] 1 crash in Safari at com.apple.WebKit • WebKit::NetscapePluginInstanceProxy::addValueToArray + 55
        
        Port the NPN_Evaluate code over from WebCore instead of using the frame loader.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):

2009-02-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        WebKit side of <rdar://problem/6626814>.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvokeDefault):
        Make InvokeDefault async.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        Handle passing NPObjects back to the plug-in host.
        
        * Plugins/Hosted/ProxyInstance.h:
        (WebKit::ProxyInstance::objectID):
        Add objectID getter.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Make InvokeDefault a simpleroutine.

2009-02-27  Timothy Hatcher  <timothy@apple.com>

        Fixes an exception by null checking the WebResource before adding it to
        the subresources array.

        <rdar://problem/5950769> Bug in [WebDataSource subresources] can throw an exception

        Reviewed by Geoff Garen and Anders Carlsson.

        * WebView/WebDataSource.mm:
        (-[WebDataSource subresources]): Null check the WebResource before adding it.

2009-02-27  Timothy Hatcher  <timothy@apple.com>

        Adds a workaround for Automator creating a WebView from a secondary thread.

        <rdar://problem/6631951> REGRESSION (Safari 4 Beta): Automator crash on
        secondary thread beneath -[WebView initWithFrame:frameName:groupName:]

        Reviewed by Geoff Garen.

        * WebView/WebView.mm:
        (needsWebViewInitThreadWorkaround): Check for com.apple.Automator.

2009-02-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a preference to reduce the power of file:// URLs.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences allowUniversalAccessFromFileUrls]):
        (-[WebPreferences setAllowUniversalAccessFromFileUrls:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-02-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson

        https://bugs.webkit.org/show_bug.cgi?id=24242
        
        setCursor(), and resetCursorRects() on Tiger, were using global, not local
        coordinates for elementAtPoint:
        
        * WebView/WebHTMLView.mm:
        (resetCursorRects):
        (setCursor):

2009-02-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a preference to reduce the power of file:// URLs.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences allowUniversalAccessFromFileUrls]):
        (-[WebPreferences setAllowUniversalAccessFromFileUrls:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-02-26  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff Garen.

        Fix for <rdar://problem/6618166>
        https://bugs.webkit.org/show_bug.cgi?id=24216
        (REGRESSION r36919) Safari 4 Beta causes MSN Messenger's text entry field to lose focus after entering a message

        During a series of firstResponder changes, at some point while the WebHTMLView was losing first responder status,
        we incorrectly marked the page as active, and then when the WebHTMLView became first responder again, setActive did nothing.
        This change restores behavior from before r36919 to check if the WebHTMLView is in the middle of losing first responder when calling setActive.

        In addition to updating editing/selection/designmode-no-caret.html results, I also made sure the test cases that were 
        fixed in r36919 and r38570 are still fixed.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView resignFirstResponder]): Keep track if we're in the process of resigning first responder.
        (-[WebHTMLView _isResigningFirstResponder]): Added.
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebView.mm: (-[WebView _updateFocusedAndActiveStateForFrame:]): Don't set the page to be active
        if the document view is currently resigning first responder.

2009-02-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Fix <rdar://problem/6623697>.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::print):
        Ask the plug-in host to print, create a CGImage of the returned bytes and draw
        the image into the passed in context.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]):
        When printing, call NetscapePluginInstanceProxy::print.
        
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-02-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24024
        REGRESSION (r39845): Assertion failure in -[WebHistoryItem dictionaryRepresentation] when
        archiving a submission to about:blank

        I don't know how to make an automated test for this bug.

        * History/WebHistory.mm: (-[WebHistory _visitedURL:withTitle:method:wasFailure:]):
        Account for the fact that HTTP method may be non-empty for non-HTTP requests.

2009-02-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Naming change from
        Bug 24143: Crash occurs at WebCore::AccessibilityTable::isTableExposableThroughAccessibility() when applying a link in GMail
        https://bugs.webkit.org/show_bug.cgi?id=24143

        * WebView/WebFrame.mm:
        (-[WebFrame _accessibilityTree]):

2009-02-25  Simon Fraser  <simon.fraser@apple.com>

        Build fix with ACCELERATED_COMPOSITING turned on.
        
        I missed a spot in my last commit in renaming to
        _stoppedAcceleratedCompositingForFrame:
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView close]):

2009-02-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        https://bugs.webkit.org/show_bug.cgi?id=23854

        Make an observable property, _isUsingAcceleratedCompositing, on
        WebView that DumpRenderTree can use to specialize behavior.
        
        This is implemented via a count of Frames that are using
        accelerated compositing.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate clear]):
        (-[WebHTMLView close]):
        (-[WebHTMLView attachRootLayer:]):
        (-[WebHTMLView detachRootLayer]):
        * WebView/WebView.mm:
        (+[WebView automaticallyNotifiesObserversForKey:]):
        (-[WebView _startedAcceleratedCompositingForFrame:]):
        (-[WebView _stoppedAcceleratedCompositingForFrame:]):
        (-[WebView _isUsingAcceleratedCompositing]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

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:

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

        Reviewed by Oliver Hunt.

        <rdar://problem/6259220> Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros

        * Carbon/CarbonUtils.h:
        * Carbon/HIWebView.h:
        * Plugins/WebPlugin.h:
        * Plugins/WebPluginViewFactory.h:
        * WebView/WebUIDelegate.h:

2009-02-24  Peter Ammon  <pammon@apple.com>

        Reviewed by Mark Rowe.

        Fix <rdar://problem/6251410> Services can modify non-editable content in Safari

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validRequestorForSendType:returnType:]): Return self only if we can handle
        both the send and return type.  We should also handle a nil send or return type by ignoring
        the argument and returning whether we can handle the other type passed in.

2009-02-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen and Darin Adler.

        WebKit side of <rdar://problem/6613151>.
        
        Make sure to vm_deallocate all memory we get from MIG callbacks.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (DataDeallocator::DataDeallocator):
        (DataDeallocator::~DataDeallocator):
        Add a simple deallocator class.
        
        (WKPCStatusText):
        (WKPCLoadURL):
        (WKPCBooleanAndDataReply):
        (WKPCEvaluate):
        (WKPCGetStringIdentifier):
        (WKPCInvoke):
        (WKPCInvokeDefault):
        (WKPCConstruct):
        (WKPCSetProperty):
        Use the new deallocator class.

2009-02-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/6450656>.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::insertText):
        Add insert text which just calls the new WKPH function.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView inputContext]):
        Get the input context from the shared input panel.
        
        (-[WebHostedNetscapePluginView keyDown:]):
        Let the shared input panel have a go at the event first.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add new InsertText function.

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

        Fix the build after r41126.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):

2009-02-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/5966123> REGRESSION (r30741): Generic Sun Applet loading logo appears half off screen

        * WebCoreSupport/WebFrameLoaderClient.mm: Correct a copy & paste error
        in r30741, and assign the height value, rather than the width, to the
        "height" parameter.

2009-02-21  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * Plugins/Hosted/WebTextInputWindowController.m:

2009-02-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add a shared floating text input window implementation, to be used by the hosted plug-in view.
        
        * Plugins/Hosted/WebTextInputWindowController.h: Added.
        * Plugins/Hosted/WebTextInputWindowController.m: Added.

2009-02-20  Kevin Decker  <kdecker@apple.com>

        Reviewed by andersca.
    
        <rdar://problem/6496140> Safari sometimes hangs in WKSetMetadataURL for several seconds after downloading a file
         
         Spawn a background thread for WKSetMetadataURL because this function will not return until mds has journaled the data
         we are trying to set. Depending on what other I/O is going on, it can take some time. 

        * Misc/WebNSFileManagerExtras.m: Import pthread.h and FoundationExtras.h
        (setMetaData): Added. Calls WKSetMetadataURL().
        (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]): Call setMetaData on a background thread 
 
2009-02-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - WebKit part of fixing https://bugs.webkit.org/show_bug.cgi?id=24027
          Do not send loader callbacks during CSS styling

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Reverted the
        iChat-specific quirk added in <http://trac.webkit.org/changeset/41071>.

2009-02-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Brady Eidson.

        - WebKit part of fixing <rdar://problem/6507512> Crash in iChat at CSSStyleSelector::adjustRenderStyle

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Activate the WebCore
        workaround for this crash in iChat.

2009-02-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/6542390>
        
        There's no need to call setDefersLoading here - we already defer anything a plug-in can do that
        would cause a load to begin.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):

2009-02-18  Adam Roben  <aroben@apple.com>

        Add SPI to get WebKit's custom pointing-hand cursor

        Reviewed by John Sullivan.

        * WebView/WebView.mm:
        (+[WebView _pointingHandCursor]): Added. Returns the custom
        pointing-hand cursor that WebKit uses.
        * WebView/WebViewPrivate.h: Added +_pointingHandCursor.

2009-02-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=23917
        Allow a WebKit plug-in to act as a proxy for the <audio> and <video>
        element.

        * Plugins/WebPluginContainerPrivate.h:
        * Plugins/WebPluginController.mm:
        (mediaProxyClient): New, cast to HTMLMediaElement if it is a video or audio element
        (-[WebPluginController _setMediaPlayerProxy:forElement:]): New, pass proxy to HTMLMediaElement
        (-[WebPluginController _postMediaPlayerNotification:forElement:]): New, deliver event to HTMLMediaElement

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Don't allow a media player proxy plug-in to be chosen by
        file extension, only want a match for the new MIME type proxy plug-ins should have.

2009-02-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/6584834> ESPN radio live stream link hangs Safari 

        When a plug-in invokes JavaScript code that will destroy the plug-in, we need to
        defer destruction until we're done executing the script.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::PluginDestroyDeferrer::PluginDestroyDeferrer):
        (WebKit::PluginDestroyDeferrer::~PluginDestroyDeferrer):
        Add a simple RAII object for deferring destruction of the plug-in instance.
        
        (WKPCEvaluate):
        (WKPCInvoke):
        (WKPCInvokeDefault):
        (WKPCConstruct):
        (WKPCGetProperty):
        (WKPCSetProperty):
        (WKPCRemoveProperty):
        (WKPCHasProperty):
        (WKPCHasMethod):
        Use the PluginDestroyDeferrer.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::pluginID):
        Assert that the plug-in ID is not 0 here.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Initialize the call depth.
        
        (WebKit::NetscapePluginInstanceProxy::~NetscapePluginInstanceProxy):
        Set the plug-in ID to 0 to aid debugging.
        
        (WebKit::NetscapePluginInstanceProxy::willCallPluginFunction):
        Increment the call depth.
        
        (WebKit::NetscapePluginInstanceProxy::didCallPluginFunction):
        Decrement the call depth, if it's 0 and we should stop the plug-in, do so.
        
        (WebKit::NetscapePluginInstanceProxy::shouldStop):
        If we're called this with a non-zero call depth, set shouldStopSoon to true.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView shouldStop]):
        Call the proxy.

2009-02-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin Decker

        <rdar://problem/6582180> - Wrong HTTP method applied to history item.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Check the original request, not any
          redirected request.

2009-02-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/6579412> 
        REGRESSION (3.2.1-ToT): Crash in Silverlight viewing streaming lecture
        
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView userAgent]):
        Apply workaround for Silverlight workaround.
        
        (-[WebNetscapePluginView _createPlugin]):
        Check if the plug-in that we're creating is the silverlight plug-in.

2009-02-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Fix potential ref-count or null-deref problems with C++ objects as Obj-C members.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList dealloc]): Null check before deref()'ing.
        (-[WebBackForwardList finalize]): Ditto.

        * Misc/WebIconFetcher.mm:
        (-[WebIconFetcher dealloc]): Null check before deref()'ing.
        (-[WebIconFetcher finalize]): Ditto.

        * WebCoreSupport/WebEditorClient.mm: Change to use RefPtr<> instead of ref()/deref().
        (-[WebEditCommand initWithEditCommand:]):
        (-[WebEditCommand dealloc]):
        (-[WebEditCommand finalize]):
        (-[WebEditCommand command]):

        * WebView/WebArchive.mm: Change to use RefPtr<> instead of ref()/deref().
        (-[WebArchivePrivate init]):
        (-[WebArchivePrivate initWithCoreArchive:]):
        (-[WebArchivePrivate coreArchive]):
        (-[WebArchivePrivate setCoreArchive:]):
        (-[WebArchivePrivate dealloc]):
        (-[WebArchivePrivate finalize]):

        * WebView/WebDataSource.mm: 
        (-[WebDataSourcePrivate dealloc]): Null check before deref()'ing.
        (-[WebDataSourcePrivate finalize]): Ditto.

2009-02-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Kevin Decker

        <rdar://problem/6579750> - Crash in WebArchivePrivate in Tiger TextEdit

        NSHTMLReader tries to create a WebArchive from a random chunk of data.  Previously, WebArchive creation would
        fail and return nil and NSHTMLReader would try something else.  When we changed the behavior to return an invalid
        WebArchive object, things started getting weird.

        * WebView/WebArchive.mm:
        (-[WebArchivePrivate setCoreArchive:]): Null check the pointer before calling ->deref()
        (-[WebArchivePrivate dealloc]): Remove the ASSERT which is now invalid, and null check the pointer before ->deref().
        (-[WebArchivePrivate finalize]): Ditto
        (-[WebArchive initWithData:]): If the LegacyWebArchive cannot be created, return nil instead of an invalid object.

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

        Fix the build.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:]): Use ASSERT_UNUSED in a manner that makes sense.

2009-02-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        <rdar://problem/6570573> Some visit counts in History.plist have insanely high values, can roll over to negative

        Remove the item from the date caches before registering the visit.  Otherwise it might not be successfully removed 
        and when we add it back later it will exist in the list twice.  This will cause the entry to be written out twice,
        which would lead to doubling (or more!) the visit count on next launch when these multiple items are merged.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:]): Swap the removeItemFromDateCaches and visitedWithTitle calls.
        (-[WebHistoryPrivate addItem:discardDuplicate:]): Add a mode that allows the entry being added to be discarded
          if an entry for the URL already exists.  Use that mode when reading the History.plist so only the most
          recent entry for a given URL will be used.
        (-[WebHistoryPrivate addItems:]):
        (-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]): 

2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>

        Added a preference to disable some Inspector's panels (rdar://6419624, rdar://6419645).
        This is controlled via the 'WebKitInspectorHiddenPanels' key; if nothing is specified, all panels are shown.

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::hiddenPanels):

2009-02-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6562920> Pasted text should be normalized to NFC

        * Misc/WebNSURLExtras.mm: (-[NSURL _web_userVisibleString]): Route the URL string through
        -[NSString precomposedStringWithCanonicalMapping].

        * WebCoreSupport/WebPasteboardHelper.mm:
        (WebPasteboardHelper::plainTextFromPasteboard): Ditto. 

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):
        Ditto. The affected cases are all plain text ones - RTF, RTFD and HTML are assumed to be
        precomposed already, and the conversion is performed outside WebKit for those anyway.

2009-02-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein
        
        <https://bugs.webkit.org/show_bug.cgi?id=23889>, <rdar://problem/6572300>
        Negative visit counts stored in History.plist aren't corrected.
        
        It's not clear how a huge negative visit count ended up in History.plist, but we can't
        trust data read from disk so we can at least reset this to something sane. WebCore has
        no guard against a visit count overflowing an int, but that seems very unlikely to have
        caused this.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        If a negative visit count is in the dictionary, replace it with 1. If a negative daily or
        weekly visit count is in the dictionary, replace it with 0. 

2009-02-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein
        
        <https://bugs.webkit.org/show_bug.cgi?id=23891>
        [WebHistoryItem _setVisitCount:] is unused and should be removed

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem _setVisitCount:]):
        removed this unused method, which is a synonym for setVisitCount: that was introduced
        recently and abandoned even more recently

        * History/WebHistoryItemInternal.h:
        removed declaration of _setVisitCount:

2009-02-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6573916> 
        CrashTracer: [USER] 1 crash in Safari at com.apple.WebKit • WebKit::NetscapePluginInstanceProxy::pluginHostDied + 25.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        If we failed to instantiate the plug-in, invalidate the instance proxy.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invalidate):
        Remove the instance from the plug-in host's set.
        
        (WebKit::NetscapePluginInstanceProxy::destroy):
        Call invalidate().

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

        Reviewed by Dan Bernstein.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=23863> / <rdar://problem/6571390>.
        Bug 23863: Reproducible crash in Mail with TOT WebKit when creating a new message

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _removeMouseMovedObserverUnconditionally]): Nil-check _private as it may have not
        yet been initialized if this WebHTMLView was loaded from a nib.
        (-[WebHTMLView _removeSuperviewObservers]): Ditto.

2009-02-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Dave Hyatt.

        Rename Selection to VisibleSelection to allow us to separate
        the selections the user works with from the ones used by
        the JS editing APIs.
        https://bugs.webkit.org/show_bug.cgi?id=23852

        * WebView/WebFrame.mm:
        (-[WebFrame _selectNSRange:]):
        * WebView/WebView.mm:
        (-[WebView textIteratorForRect:]):

2009-02-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.
        
        Fix crash when plug-in host dies.
        
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::didFail):

2009-02-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Justin Garcia.

        DOMSelection.getRangeAt() returns a different range than the selection
        https://bugs.webkit.org/show_bug.cgi?id=23601

        Rename toRange to toNormalizedRange and add new firstRange which returns an unmodified range

        * WebView/WebFrame.mm:
        (-[WebFrame _rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        (-[WebFrame _markDOMRange]):
        (-[WebFrame _replaceSelectionWithText:selectReplacement:smartReplace:]):
        (-[WebFrame _selectedNSRange]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectedRange]):
        (-[WebTextCompleteController doCompletion]):
        (-[WebHTMLView selectedAttributedString]):
        * WebView/WebView.mm:
        (-[WebView textIteratorForRect:]):
        (-[WebView selectedDOMRange]):

2009-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Part III of <rdar://problem/6552272>.
        
        Refactored to use the redirect data WebCore makes available, instead of
        tracking loading state in WebKit.
        
        * History/WebHistory.mm:
        (-[WebHistoryPrivate dealloc]):
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:]):
        (-[WebHistory _visitedURLForRedirectWithoutHistoryItem:]):
        * History/WebHistoryInternal.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):

2009-02-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6562220> 
        CrashTracer: [USER] 21 crashes in Safari at com.apple.WebKit • WebKit::NetscapePluginHostProxy::port
        
        Make the handling of crashes in the plug-in host more robust.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        Add m_portSet.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        Initialize m_portSet.
        
        (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):
        Free m_portSet.
        
        (WebKit::NetscapePluginHostProxy::processRequests):
        Listen for messages on the port set. If we get a message to the port death notification port,
        then call pluginHostDied. Otherwise, process the message.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::cleanup):
        Factor code that should be shared between destroy() and pluginHostDied() into cleanup.
        
        (WebKit::NetscapePluginInstanceProxy::destroy):
        Call cleanup().
        
        (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
        Call cleanup().
        
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply):
        Call NetscapePluginHostProxy::processRequests.
        
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invalidate):
        Add a null check for the host proxy.

2009-02-06  Dan Bernstein  <mitz@apple.com>

        - try to fix the Tiger build

        * Misc/WebNSArrayExtras.h:

2009-02-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6563650> 
        Add Netscape plug-in API to tell the browser not to load streams (some plug-ins handle network loading manually)
                
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadStream]):
        (-[WebNetscapePluginView pluginView:receivedData:]):
        (-[WebNetscapePluginView _shouldCancelSrcStream]):

2009-02-05  Maciej Stachowiak  <mjs@apple.com> and Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein and Geoff Garen.

        - WebKit code to track per-day and per-week visit counts in history

        For now this data is only exposed via SPI for performance reasons.
        
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]): Add parsing support
        for new data.
        (-[WebHistoryItem _recordInitialVisit]): Tell WebCore to record an initial visit.
        (-[WebHistoryItem dictionaryRepresentation]): Add saving support for new data.
        (-[WebHistoryItem _getDailyVisitCounts:]): SPI accessor.
        (-[WebHistoryItem _getWeeklyVisitCounts:]): SPI accessor.
        * History/WebHistoryItemInternal.h: Declare new methods.
        * History/WebHistoryItemPrivate.h: Ditto.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:]): For the initial visit, use
        the new _recordInitialVisit method instead of setting visit count to 1.

        * Misc/WebNSArrayExtras.h:
        * Misc/WebNSArrayExtras.m:
        (-[NSArray _webkit_numberAtIndex:]): Helper to retrieve an NSNumber or nil from an NSArray
        (-[NSArray _webkit_stringAtIndex:]): Helper to retrieve an NSString of nil from an NSArray
        
2009-02-05  Aaron Boodman  <aa@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23708
        Adds documentElementAvailable() callback to FrameLoaderClient.

        * WebCoreSupport/WebFrameLoaderClient.h:
        Stub out documentElementAvailable().
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Ditto.

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

        - build fix

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::initGlobalCallFrame):

2009-02-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by John Sullivan and Brady Eidson.

        Fix for <rdar://problem/6557595> REGRESSION: In Mail, selecting a 
        mail note message doesn't display it in Mail's preview pane

        This was failing because revision 36962 removed a version of 
        setVerticalScrollingMode that mail calls. This patch simply adds 
        that method back.

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView setVerticalScrollingMode:]):

2009-02-04  Anders Carlsson  <andersca@apple.com>

        Build fix fix.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::initGlobalCallFrame):

2009-02-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.
        
        Change PCHasProperty, PCHasMethod and PCGetProperty into simpleroutines.
        
        Rename PHEvaluateReply to PHBooleanAndDataReply and add PHBooleanReply.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        (WKPCInvoke):
        (WKPCGetProperty):
        (WKPCHasProperty):
        (WKPCHasMethod):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-02-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark Rowe.

        Fix 64-bit build.
        
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::initGlobalCallFrame):

2009-02-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.
        
        Part I of <rdar://problem/6552272>.

        Clear the redirectURLs entry when first visiting a site, so sites that
        only redirect you the first time you visit them can later learn that
        they don't redirect.

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:serverRedirectURL:isClientRedirect:]):

2009-02-04  Timothy Hatcher  <timothy@apple.com>

        Change the WebSourceId typedef from int to intptr_t now that <rdar://problem/6263297> is fixed.

        <rdar://problem/6263293> WebScriptDebugDelegate should use intptr_t for sourceId, not int

        Reviewed by Oliver Hunt.

        * WebView/WebScriptDebugDelegate.h:

2009-02-04  Timothy Hatcher  <timothy@apple.com>

        Switched over from using the WebSafeForwarder for the Script Debug
        delegate and added high performance CallScriptDebugDelegate functions.

        <rdar://problem/6508457> Launching widget in Dashcode debugger is
        super-slow due forwardInvocation: calling debug delegate

        Reviewed by Oliver Hunt.

        * DefaultDelegates/WebDefaultScriptDebugDelegate.h: Removed.
        * DefaultDelegates/WebDefaultScriptDebugDelegate.m: Removed.
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::initGlobalCallFrame): Use CallScriptDebugDelegate.
        (WebScriptDebugger::sourceParsed): Ditto.
        (WebScriptDebugger::callEvent): Ditto.
        (WebScriptDebugger::atStatement): Ditto.
        (WebScriptDebugger::returnEvent): Ditto.
        (WebScriptDebugger::exception): Ditto.
        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]): Removed scriptDebugDelegateForwarder.
        (-[WebView _cacheScriptDebugDelegateImplementations]): Added. Gets the
        method implementations for the script debug delegate. Also caches what
        didParseSource method to use.
        (WebViewGetScriptDebugDelegateImplementations): Added. Returns the
        WebScriptDebugDelegateImplementations structure.
        (-[WebView setScriptDebugDelegate:]): Call _cacheScriptDebugDelegateImplementations.
        (CallDelegate): Added more overloaded versions that take different arguments.
        (CallScriptDebugDelegate): Added overloaded versions that take different arguments.
        * WebView/WebViewInternal.h:

2009-02-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=23365
        
        Hook up accelerated compositing layers the native
        view system on Mac.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachRootGraphicsLayer):
        (WebChromeClient::setNeedsOneShotDrawingSynchronization):
        New methods to hook up the root GraphicsLayer to the native
        view system, and to synchronize layer changes with view-based
        drawing when layers come and go.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate clear]):
        Clear the pointer to layerHostingView.

        (-[WebHTMLView _setAsideSubviews]):
        (-[WebHTMLView willRemoveSubview:]):
        Keep the special layer-hosting view in the subviews even 
        when the rest of the subviews are ripped out for
        painting.

        (-[WebHTMLView _isUsingAcceleratedCompositing]):
        New utility method for DumpRenderTree to know if we're
        hosting layers.

        (-[WebHTMLView drawRect:]):
        Call -disableScreenUpdatesUntilFlush if we have to
        synchronize layer changes with painting.

        (-[WebHTMLView attachRootLayer:]):
        (-[WebHTMLView detachRootLayer]):
        Attach and detach the root GraphicsLayer.

        * WebView/WebViewInternal.h:
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebHTMLViewPrivate.h:
        New method declarations.
        
        * WebView/WebView.mm:
        (-[WebView _needsOneShotDrawingSynchronization]):
        (-[WebView _setNeedsOneShotDrawingSynchronization:]):
        Set the flag to say if we need to synchronize layer
        changes and painting on the next -drawRect: call.

        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewDidMoveToWindow]):
        Call new notifications that the view was added to or removed from
        the window, which are required by the layer hosting mechanism.

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Track redirects in global history.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate dealloc]):
        (-[WebHistoryPrivate lastVisitedEntry]):
        (-[WebHistoryPrivate setLastVisitedEntry:]): Remember the last global history
        entry in case we're asked to add redirect information to it later.

        (-[WebHistory _visitedURL:withTitle:method:wasFailure:serverRedirectURL:isClientRedirect:]):
        (-[WebHistory _visitedURLForRedirectWithoutHistoryItem:]): Record redirect
        information in global history.

        * History/WebHistoryInternal.h:
        * WebCoreSupport/WebFrameLoaderClient.h: See above and below.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem): Record redirect
        information in global history.

        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        * WebView/WebFramePrivate.h: Updated for rename and extra parameter.

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Work around a limitation in MIG where two functions can't have the same name even if they're
        not in the same subsystem.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement WKPCGetPluginElementObject.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetPluginElementNPObject):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView WebCore::]):

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * WebView/WebHTMLView.mm:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Make WebBaseNetscapePluginView hold a reference to a HTMLPlugInElement instead of a DOMElement.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebBaseNetscapePluginView _windowClipRect]):        
        (-[WebBaseNetscapePluginView visibleRect]):
        (-[WebBaseNetscapePluginView dataSource]):
        * Plugins/WebKitPluginContainerView.h: Removed.
        * Plugins/WebKitPluginContainerView.mm: Removed.
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebNetscapePluginView getVariable:value:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update for changes to WebCore.
        
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        When a new Web View was not created, report back to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Draw the regular missing plug-in icon instead of a red rect when a plug-in has crashed.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]):

2009-02-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::forceLayout, Frame::adjustPageHeight and Frame::forceLayoutWithPageWidthRange to FrameView

        https://bugs.webkit.org/show_bug.cgi?id=23428

        FrameView::forceLayout could be killed but the comment might
        contain a value over the the plain FrameView::layout...

        Adjust the WebCore/WebKit consumers of these methods.

        * WebView/WebFrame.mm:
        (-[WebFrame _computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):

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

        https://bugs.webkit.org/show_bug.cgi?id=23665

        Cleaned up code to add/remove NSNotification observers, to avoid performance hit
        of calling removeObserver with unspecified notifications, or calling removeObserver
        multiple times for the same notification.

        Reviewed by Darin Adler

        * WebView/WebHTMLView.mm:
        added observingMouseMovedNotifications, observingSuperviewNotifications, and 
        observingWindowNotifications as BOOL ivars of _private object
        (-[WebHTMLView _removeMouseMovedObserverUnconditionally]):
        moved to file-internal section of file, added leading underscore, now bails out
        if we aren't observing the relevant notifications, now records that we are no longer
        observing the relevant notifications
        (-[WebHTMLView _removeSuperviewObservers]):
        ditto, also stores [NSNoticationCenter defaultCenter] in local var to avoid objc dispatch
        (-[WebHTMLView _removeWindowObservers]):
        ditto
        (-[WebHTMLView close]):
        replace general removeObserver: call with three specific calls for all the notifications
        that this class actually observes
        (-[WebHTMLView addMouseMovedObserver]):
        bail out if already observing relevant notifications, now records that we are observing
        the relevant notifications
        (-[WebHTMLView removeMouseMovedObserver]):
        updated for name change
        (-[WebHTMLView addSuperviewObservers]):
        bail out if already observing relevant notifications, now records that we are observing
        the relevant notifications; also stores [NSNoticationCenter defaultCenter] in local var 
        to avoid objc dispatch
        (-[WebHTMLView addWindowObservers]):
        ditto
        (-[WebHTMLView viewWillMoveToSuperview:]):
        updated for name change
        (-[WebHTMLView viewWillMoveToWindow:]):
        updated for name changes

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

        Reviewed by Mark Rowe.

        Fix code that assumes all command selectors end in colons.
        rdar://problem/6545874

        * WebView/WebHTMLView.mm:
        (commandNameForSelector): Don't assert, just return a null string, when
        the selector doesn't end in a colon.

2009-01-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Add a pref to disable web security.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences isWebSecurityEnabled]):
        (-[WebPreferences setWebSecurityEnabled:]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::sendResizeEvent and Frame::sendScrollEvent to EventHandler

        Carry out the move and catch up in two call sites.

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

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        isFrameSet was moved from Frame to Document. Update the
        WebKit usage.

        * WebView/WebFrame.mm:
        (-[WebFrame _isFrameSet]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView knowsPageRange:]):

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebView/WebFramePrivate.h:

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Split "lockHistory" into "lockHistory" and "lockBackForwardList" in
        preparation for setting them differently during a redirect.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2009-01-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix <rdar://problem/6544048>
        
        Have NetscapePluginInstanceProxy keep track of all the ProxyInstance objects associated.
        
        When the plug-in instance is destroyed, invalidate all proxy instances.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::destroy):
        (WebKit::NetscapePluginInstanceProxy::addInstance):
        (WebKit::NetscapePluginInstanceProxy::removeInstance):
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::ProxyInstance):
        (WebKit::ProxyInstance::~ProxyInstance):
        (WebKit::ProxyInstance::invalidate):

2009-01-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix <rdar://problem/6490778>.
        
        Change the NPRuntime related functions to use IdentifierRep directly, and make sure to always
        validate IdentifierReps before dereferencing them.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        (WKPCGetStringIdentifier):
        (WKPCGetIntIdentifier):
        (identifierFromIdentifierRep):
        (WKPCInvoke):
        (WKPCGetProperty):
        (WKPCSetProperty):
        (WKPCRemoveProperty):
        (WKPCHasProperty):
        (WKPCHasMethod):
        (WKPCIdentifierInfo):

2009-01-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Remove FrameLoaderClient code that is now handled by FrameLoader itself

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::frameLoadCompleted):

2009-01-29  Stephanie Lewis <slewis@apple.com>

        RS by Oliver Hunt.

        Update the order files.

        * WebKit.order:

2009-01-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Second step in tracking the urls a HistoryItem was redirected through
        Add SPI to access the array of redirect urls associated with a HistoryItem.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem dictionaryRepresentation]):
        (-[WebHistoryItem _redirectURLs]):
        * History/WebHistoryItemPrivate.h:

2009-01-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Always activate the plug-in host process if we're in "modal mode" and are being told to activate.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        Call endModal here.
        
        (WebKit::NetscapePluginHostProxy::applicationDidBecomeActive):
        If we're modal, we should always bring the plug-in host process to the front.
        
        (WebKit::NetscapePluginHostProxy::beginModal):
        Add an observer for the NSApplicationWillBecomeActiveNotification callback.
        
        (WebKit::NetscapePluginHostProxy::endModal):
        Remove the observer.

2009-01-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        First step in tracking the urls a HistoryItem was redirected through.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        (-[WebHistoryItem dictionaryRepresentation]):
        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        (-[NSDictionary _webkit_arrayForKey:]): Add helper.

2009-01-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Pass the PSN of the client to the host, and get the PSN of the host back when checking in.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):
        Get the current PSN and pass it to spawnPluginHost.
        
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        Pass the PSN to the "check in" function.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        Fix a bug noticed by Julien Chaffraix. Call endModal if necessary.
        
        (WebKit::NetscapePluginHostProxy::beginModal):
        (WebKit::NetscapePluginHostProxy::endModal):
        (WebKit::NetscapePluginHostProxy::setModal):
        Split out the code that does all of the work into beginModal and endModal methods.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadStream]):

2009-01-29  David Kilzer  <ddkilzer@apple.com>

        Remove semi-colons from the end of ObjC method implementations

        Rubber-stamped by Adam Roben.

        $ find WebKit -name \*.m -o -name \*.mm -exec perl -e 'undef $/; $s = <>; while ($s =~ m/[\n\r][-+].*;[\s\r\n]+\{/g) { print "$ARGV: $&\n"; }' {} \;

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:setResizable:]):
        (-[WebDefaultUIDelegate webView:dragDestinationActionMaskForDraggingInfo:]):
        (-[WebDefaultUIDelegate webView:dragSourceActionMaskForPoint:]):
        (-[WebDefaultUIDelegate webView:willPerformDragSourceAction:fromPoint:withPasteboard:]):
        * History/WebBackForwardList.mm:
        (-[WebBackForwardList addItem:]):
        (-[WebBackForwardList backListWithLimit:]):
        (-[WebBackForwardList forwardListWithLimit:]):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem alternateTitle]):
        (-[WebHistoryItem setViewState:]):
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging:]):
        * Misc/WebKitNSStringExtras.m:
        (-[NSString _web_drawAtPoint:font:textColor:]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setAttributeKeys:andValues:]):
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditCommand command]):
        * WebView/WebFrame.mm:
        (-[WebFrame _getVisibleRect:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation _redirectDataToManualLoader:forPluginView:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView elementAtPoint:allowShadowContent:]):
        * WebView/WebPreferences.mm:
        (-[WebPreferences setAllowsAnimatedImages:]):
        (-[WebPreferences setAutosaves:]):
        (-[WebPreferences PDFDisplayMode]):
        * WebView/WebView.mm:
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:]):
        (-[WebView _viewClass:andRepresentationClass:forMIMEType:]):
        (+[WebView _unregisterViewClassAndRepresentationClassForMIMEType:]):
        (+[WebView _registerViewClass:representationClass:forURLScheme:]):
        (-[WebView _shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]):
        (-[WebView _insertNewlineInQuotedContent]):

2009-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for WebCore rename.
        
        * WebView/WebView.mm:
        (-[WebView setCustomTextEncodingName:]):

2009-01-28  David Kilzer  <ddkilzer@apple.com>

        Add missing declaration for -[NSURL(WebNSURLExtras) _webkit_isFileURL]

        Reviewed by Dan Bernstein.

        * Misc/WebNSURLExtras.h:
        (-[NSURL(WebNSURLExtras) _webkit_isFileURL]): Added missing
        declaration after the implementation was added in r9258.

2009-01-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoff Garen.

        Fix for <rdar://problem/6129678>
        REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]): Wrap JSActivations in DebuggerActivations.

2009-01-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Fix two bugs with Core Animation based plug-ins.
        
        1. The plug-in view was marked as opaque even though it's not. 
           (This would leave garbage in the plug-in view).
        2. The plug-in layer needs to have autoresizing turned on.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setLayer:]):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage

        * History/WebHistoryItem.mm:

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::savePlatformDataToCachedFrame):
        (WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        * WebKit.order:

2009-01-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add the ability for plug-ins to make WebKit operate in "modal mode"
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        If the plug-in crashes while we're modal, make sure to leave the modal mode.
        
        (WebKit::NetscapePluginHostProxy::setModal):
        (WKPCSetModal):
        * Plugins/Hosted/WebKitPluginClient.defs:

2009-01-26  John Sullivan  <sullivan@apple.com>

        fixed <rdar://problem/6530053> REGRESSION (Leopard): Shift-tab in http authentication window gets 
        stuck in the Name field rather than cycling around

        Reviewed by Dan Bernstein

        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
        The two static text fields and the last button all had their "next key view" outlets set to the
        name field, which caused shift-tab from the name field to do the wrong thing. Fixed by making each
        selectable view have exactly one "next key view" set to it.

2009-01-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add the ability for a plug-in to show or hide the menu bar.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        (WebKit::NetscapePluginHostProxy::setMenuBarVisible):
        (WKPCSetMenuBarVisible):
        * Plugins/Hosted/WebKitPluginClient.defs:

2009-01-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Gavin Barraclough.

        Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames
        <https://bugs.webkit.org/show_bug.cgi?id=23552>
        <rdar://problem/6398839>

        Dashcode will crash when using the evaluator because it saves a global call
        frame, even after global code has finished executing, and then uses this as
        a launching pad to execute new JS in the evaluator. The fix is to detect
        when Dashcode is attempting to do this and execute code from a global call
        frame instead.        

        * ForwardingHeaders/runtime/Protect.h: Added.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _initWithGlobalObject:debugger:caller:debuggerCallFrame:]):
        Added debugger, a WebScriptDebugger* argument.
        (-[WebScriptCallFrame evaluateWebScript:]): Detect when Dashcode is using
        a stale WebScriptCallFrame to execute new JS and evaluate it starting from
        the global object's global call frame instead.
        * WebView/WebScriptDebugger.h:
        (WebScriptDebugger::globalObject): Added.
        (WebScriptDebugger::globalCallFrame): Added.
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger): Initialize m_globalObject.
        (WebScriptDebugger::initGlobalCallFrame): Created as a clone of callEvent
        so that the global call frame can be saved immediately after being created.
        (WebScriptDebugger::callEvent): Pass 'this' as the debugger argument of
        WebScriptCallFrame's _initWithGlobalObject method.

2009-01-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Make WKPCInvoke a simpleroutine.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvoke):
        * Plugins/Hosted/WebKitPluginClient.defs:

2009-01-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement using plug-in objects as constructors, and setting and getting properties from a plug-in object.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCBooleanAndDataReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::Reply::):
        (WebKit::NetscapePluginInstanceProxy::BooleanAndDataReply::BooleanAndDataReply):
        Rename NPObjectInvokeReply to BooleanAndDataReply.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        Fix a cut and paste error.
        
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
        Handle NPObjects.
        
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyField::valueFromInstance):
        (WebKit::ProxyField::setValueToInstance):
        Call the ProxyInstance method.
        
        (WebKit::ProxyInstance::~ProxyInstance):
        Release the NPObject.
        
        (WebKit::ProxyInstance::supportsConstruct):
        Ask the plug-in host if an instance supports construct.
        
        (WebKit::ProxyInstance::fieldValue):
        (WebKit::ProxyInstance::setFieldValue):
        Call the plug-in host methods.
        
        * Plugins/Hosted/WebKitPluginHostTypes.h:
        Rename ObjectValueType to JSObjectValueType, and add NPObjectValueType.

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

        Fix the build.

        Remove -Wformat=2 from the warning flags as newer versions of GCC emit
        warnings about non-literal format strings for uses of our UI_STRING macro.

        * Configurations/Base.xcconfig:

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

        Rubber-stamped by Sam Weinig.

        Clean up after r40240.

        * Configurations/Base.xcconfig: Don't dead code strip in debug builds for now as it leads to link errors.
        * Plugins/Hosted/HostedNetscapePluginStream.mm: Revert change that is no longer needed now that WebKitPluginHost.defs
        is back in the build.

2009-01-25  Darin Adler  <darin@apple.com>

        * Plugins/Hosted/HostedNetscapePluginStream.mm: Added a missing extern "C".

2009-01-25  Darin Adler  <darin@apple.com>

        Discussed with Mark Rowe; not sure he reviewed it.

        * Configurations/Base.xcconfig: Add all the same warnings as in WebCore except for
        -Wcast-qual and -Wunused-parameter, which both need to be off at least for now.

2009-01-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Improve the consistency of settings in our .xcconfig files.

        * Configurations/Base.xcconfig: Only dead code strip the normal variant.
        Handle all cases in GCC_GENERATE_DEBUGGING_SYMBOLS.

2009-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 23522: use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Step one: RenderText.

        * WebView/WebRenderNode.mm:
        (copyRenderNode): Use toRenderText.

2009-01-23  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Darin Adler

        Rename CachedPagePlatformData to CachedFramePlatformData to more accurately reflect its true role.

        * WebCoreSupport/WebCachedFramePlatformData.h: Copied from WebKit/mac/WebCoreSupport/WebCachedPagePlatformData.h.
        (WebCachedFramePlatformData::WebCachedFramePlatformData):
        * WebCoreSupport/WebCachedPagePlatformData.h: Removed.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::savePlatformDataToCachedPage):
        (WebFrameLoaderClient::transitionToCommittedFromCachedPage):

        * WebKit.order:

2009-01-23  Adele Peterson  <adele@apple.com>

        Build fix.

        Use new linesBoundingBox method instead of
        boundingBoxWidth and boundingBoxHeight for RenderText objects.

        * WebView/WebRenderNode.mm: (copyRenderNode):

2009-01-23  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.
        
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::proxyClass):

2009-01-23  Anders Carlsson  <andersca@apple.com>

        Fix GCC 4.0 build.
        
        * Configurations/Base.xcconfig:

2009-01-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Turn on -Wmissing-prototypes and fix the resulting warnings.

        * Configurations/Base.xcconfig:
        * History/WebHistory.mm:
        (timeIntervalForBeginningOfDay):
        * History/WebHistoryItem.mm:
        (historyItemWrappers):
        * Misc/WebNSPasteboardExtras.mm:
        (imageFromElement):
        * WebView/WebFrame.mm:
        * WebView/WebScriptDebugger.mm:
        (toNSString):

2009-01-22  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Anders Carlsson.

        Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily.

        Current versions of Xcode only respect it for C and Objective-C files,
        and our code doesn't currently compile if it is applied to C++ and
        Objective-C++ files.

        * Configurations/Base.xcconfig:

2009-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add support for Invoke and InvokeDefault. Clean up code.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCBooleanReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::Reply::):
        (WebKit::NetscapePluginInstanceProxy::BooleanReply::BooleanReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::invokeMethod):
        (WebKit::ProxyInstance::supportsInvokeDefaultMethod):
        (WebKit::ProxyInstance::invokeDefaultMethod):
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        * Plugins/Hosted/WebKitPluginHostTypes.h:

2009-01-22  Eric Roman  <eroman@chromium.og>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20806
        Deprecate RSSFeedReferrer() and setRSSFeedReferrer().

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem RSSFeedReferrer]):
        (-[WebHistoryItem setRSSFeedReferrer:]):

2009-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Don't crash or hang when we fail to instantiate a plug-in.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Return 0 on failure.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView JSC::Bindings::createPluginBindingsInstance:JSC::Bindings::]):
        Null check for the proxy member.

2009-01-21  David Hyatt  <hyatt@apple.com>

        Devirtualize width/height/x/y on RenderObject and move the methods to RenderBox.

        Reviewed by Eric Seidel and Darin Adler

        * WebView/WebRenderNode.mm:
        (copyRenderNode):

2009-01-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More browser->plug-in scripting support.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCNPObjectHasPropertyReply):
        (WKPCNPObjectHasMethodReply):
        (WKPCNPObjectInvokeReply):
        MIG reply functions.
        
        (WKPCIdentifierInfo):
        Return information about an identifier given its 64-bit value.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        Add new reply structs.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        Split out code that adds values to the arrays from marshalValue.
        
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        Call addValueToArray.
    
        (WebKit::NetscapePluginInstanceProxy::marshalValues):
        Marshal a list of values.
        
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance):
        Actually create a proxy instance.
        
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyClass::methodsNamed):
        (WebKit::ProxyClass::fieldNamed):
        Add a proxy ProxyClass class that just forwards everything to the ProxyInstance class.
        
        (WebKit::proxyClass):
        Shared proxyClass getter.
        
        (WebKit::ProxyField::ProxyField):
        (WebKit::ProxyField::valueFromInstance):
        (WebKit::ProxyField::setValueToInstance):
        Add a proxy ProxyField class that just forwards everything to the ProxyInstance class.
        
        (WebKit::ProxyMethod::ProxyMethod):
        (WebKit::ProxyMethod::serverIdentifier):
        (WebKit::ProxyMethod::numParameters):
        Add a dummy ProxyMethod class.
        
        (WebKit::ProxyInstance::invokeMethod):
        Call _WKPHNPObjectInvoke.
        
        (WebKit::ProxyInstance::defaultValue):
        (WebKit::ProxyInstance::stringValue):
        (WebKit::ProxyInstance::numberValue):
        (WebKit::ProxyInstance::booleanValue):
        (WebKit::ProxyInstance::valueOf):
        Add dummy implementations (taken from CInstance).
        
        (WebKit::ProxyInstance::methodsNamed):
        Call _WKPHNPObjectHasMethod to determine whether a method with the given name exists.
        
        (WebKit::ProxyInstance::fieldNamed):
        Call _WKPHNPObjectHasProperty to determine whether a property with the given name exists.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add new MIG definitions.

2009-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Clean up how we force invocations of API that happened on background threads over to the main thread.

        This was previously accomplished in a somewhat ad-hoc manner using a mutable dictionary to pass arguments
        and return values back from the function.  The new approach is to use a proxy object that forwards an
        NSInvocation over to the main thread and applies it to the target object, which leads to a much cleaner
        call site.

        * Misc/WebNSObjectExtras.h:
        * Misc/WebNSObjectExtras.mm:
        (-[WebMainThreadInvoker initWithTarget:]):
        (-[WebMainThreadInvoker forwardInvocation:]):
        (-[WebMainThreadInvoker methodSignatureForSelector:]):
        (-[WebMainThreadInvoker handleException:]):
        (-[NSInvocation _webkit_invokeAndHandleException:]): Execute the invocation and forward any exception that was
        raised back to the WebMainThreadInvoker.
        (-[NSObject _webkit_invokeOnMainThread]):

        The following methods are updated to use the proxy object to forward methods to the main thread:

        * WebView/WebArchive.mm:
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
        (-[WebArchive mainResource]):
        (-[WebArchive subresources]):
        (-[WebArchive subframeArchives]):
        * WebView/WebResource.mm:
        (-[WebResource data]):
        (-[WebResource URL]):
        (-[WebResource MIMEType]):
        (-[WebResource textEncodingName]):
        (-[WebResource frameName]):
        (-[WebResource _ignoreWhenUnarchiving]):
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]):
        (-[WebResource _initWithData:URL:response:]):
        (-[WebResource _suggestedFilename]):
        (-[WebResource _response]):
        (-[WebResource _stringValue]):
        * WebView/WebView.mm:
        (-[WebView initWithFrame:frameName:groupName:]):
        (-[WebView initWithCoder:]):

2009-01-20  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=23434 (Add WML <input> element support)

        Protect text field related WebEditorClient.mm methods against non-HTMLElement callers.
        WebEditorClient.mm relies on HTMLInputElement as input element. Ignore calls from non-HTMLElement elements.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        (WebEditorClient::textDidChangeInTextArea):

2009-01-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add and implement GetScriptableNPObject.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetScriptableNPObjectReply):
        Create a new reply struct and set it as the current reply.
        
        (WKPCEvaluate):
        Get rid of an unused variable.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::Reply::):
        (WebKit::NetscapePluginInstanceProxy::GetScriptableNPObjectReply::GetScriptableNPObjectReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance):
        Call _WKPHGetScriptableNPObject and wait for a reply.
        
        * Plugins/Hosted/ProxyInstance.h: Added.
        * Plugins/Hosted/ProxyInstance.mm: Added.
        Add empty files.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView JSC::Bindings::createPluginBindingsInstance:JSC::Bindings::]):
        Call NetscapePluginInstanceProxy::createBindingsInstance.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add new declarations.

2009-01-19  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Gavin Barraclough.

        Remove temporary operator-> from JSValuePtr.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2009-01-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make Evaluate an asynchronous method that has a reply method.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2009-01-19  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Tim Hatcher

        Fix long standing typo.

        * History/WebBackForwardList.h:

2009-01-19  Mark Rowe  <mrowe@apple.com>

        Fix the build!

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::demarshalValue):
        (WebKit::NetscapePluginInstanceProxy::demarshalValues):

2009-01-18  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=23414>.
        Bug 23414: Reproducible crash accessing View menu with plugins disabled

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]): Null-check the PluginData before using it.

2009-01-17  David Hyatt  <hyatt@apple.com>

        Eliminate dependencies on "backslashAsCurrencySymbol()" from WebKit, and make sure these alterations
        are done in WebCore instead.

        Reviewed by Oliver Hunt

        * WebView/WebFrame.mm:
        (-[WebFrame _selectedString]):
        (-[WebFrame _stringForRange:]):

2009-01-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson

        Complete <rdar://problem/6293969>

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Remove UseSharedMediaUI

2009-01-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Fix problem where a URL visited as non-GET once is flagged as non-GET forever.

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:]): Always update the HTTPNonGet
          flag for all loads with an HTTP Method

2009-01-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement InvokeDefault, Construct, GetProperty and SetProperty.
        
        Fully implement marshalValue.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvokeDefault):
        (WKPCConstruct):
        (WKPCGetProperty):
        (WKPCSetProperty):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        (WebKit::NetscapePluginInstanceProxy::demarshalValue):
        * Plugins/Hosted/WebKitPluginClient.defs:

2009-01-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Demarshal arguments and pass them to the JS call.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvoke):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
        (WebKit::NetscapePluginInstanceProxy::demarshalValues):

2009-01-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        <rdar://problem/6496520> REGRESSION: In Mail, a crash occurs when attempting to display a mail message

        Move WebArchive and WebResource to use the same approach for initializing themselves on the main thread
        that WebView uses.

        * WebView/WebArchive.mm:
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]): Use _webkit_performSelectorOnMainThread:withObject:.
        (-[WebArchive _initWithArguments:]):
        * WebView/WebResource.mm:
        (-[WebResource _initWithArguments:]): Unbox the BOOL argument.

2009-01-14  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Fix crash I ran into while printing. I was unable to reproduce it, but also,
        it's clear there's no guarantee that the frame will be non-zero in this case,
        so it seems fine to check it.

        * WebView/WebHTMLView.mm: (-[WebHTMLView reapplyStyles]): Check frame for zero
        and don't do anything with it if it's zero.

2009-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - update copyright

        * Info.plist:

2009-01-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add a bunch of methods to WebKitPluginClient.defs, and implement them.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::fromUTF8WithLatin1Fallback):
        If the length isn't specified, get it by calling strlen.
        
        (WKPCEvaluate):
        Evaluate doesn't take any arguments.
        
        (WKPCGetIntIdentifier):
        Call _NPN_GetIntIdentifier.
        
        (identifierFromServerIdentifier):
        New helper function that returns a JSC Identifier from an NPIdentifier.
        
        (WKPCInvoke):
        Call identifierFromServerIdentifier.
        
        (WKPCRemoveProperty):
        (WKPCHasProperty):
        (WKPCHasMethod):
        Call NetscapePluginInstanceProxy.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):

        * Plugins/Hosted/WebKitPluginClient.defs:
        Add new definitions.

2009-01-13  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2009-01-13  Timothy Hatcher  <timothy@apple.com>

        Adds a workaround for the flip4mac installer plugin decoding a WebView from a NIB on a secondary thread.

        <rdar://problem/6489788> New WebKit thread checks break installation of flip4mac (thread violation)

        Reviewed by Darin Adler.

        * Misc/WebKitVersionChecks.h: Add WEBKIT_FIRST_VERSION_WITHOUT_WEBVIEW_INIT_THREAD_WORKAROUND.
        * Misc/WebNSObjectExtras.h: Add _webkit_performSelectorOnMainThread:withObject:.
        * Misc/WebNSObjectExtras.mm:
        (-[NSObject _webkit_performSelectorWithArguments:]): Renamed from _webkit_getPropertyWithArguments.
        Passes the optional object to the selector.
        (-[NSObject _webkit_performSelectorOnMainThread:withObject:]): Renamed from _webkit_getPropertyOnMainThread:.
        Put the optional object into the arguments dictionary.
        (-[NSObject _webkit_getPropertyOnMainThread:]): Call _webkit_performSelectorOnMainThread with a nil object.
        * WebView/WebResource.mm:
        (-[WebResource _ignoreWhenUnarchiving]): Use _cmd instead of making the selector again.
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]): Use the new
        _webkit_performSelectorOnMainThread:withObject: method instead of performSelectorOnMainThread.
        * WebView/WebView.mm:
        (-[WebView _initWithArguments:]): Added. Pulls arguments out of the dictionary and calls the right init method.
        (needsWebViewInitThreadWorkaround): Checks if the thead is not the main thread and if we are in the Installer bundle.
        (-[WebView initWithFrame:frameName:groupName:]): Call needsWebViewInitThreadWorkaround and use _webkit_performSelectorOnMainThread
        to call _initWithArguments: passing the frame, frameName and groupName.
        (-[WebView initWithCoder:]): Ditto, except pass the coder to _initWithArguments:.

2009-01-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Deprecate JSValuePtr::getNumber() - two ways to get a number should  be enough.

        * WebView/WebView.mm:
        (aeDescFromJSValue):

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

        Reviewed by Darin Adler

        <rdar://problem/6468274> - Track Non-get requests in global history

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:]):
        * History/WebHistoryInternal.h:

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        (-[WebHistoryItem dictionaryRepresentation]):
        (-[WebHistoryItem _lastVisitWasHTTPNonGet]):
        * History/WebHistoryItemPrivate.h:

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Only pass the method through if it was an HTTP load

2009-01-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move marshalling into NetscapePluginInstanceProxy.
        
        Add support for marshallin strings.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        (WKPCInvoke):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        * Plugins/Hosted/WebKitPluginHostTypes.h:

2009-01-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement WKPCInvoke.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        (WKPCInvoke):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::idForObject):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        * Plugins/Hosted/WebKitPluginClient.defs:

2009-01-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move marshalling code to NetscapePluginInstanceProxy. Add support for marshalling JS objects.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        * Plugins/Hosted/WebKitPluginHostTypes.h:

2009-01-12  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Darin Adler.

        Bug 22861: Turn the FontCache into a singleton
        https://bugs.webkit.org/show_bug.cgi?id=22861

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics cachedFontDataCount]):
        (+[WebCoreStatistics cachedFontDataInactiveCount]):
        (+[WebCoreStatistics purgeInactiveFontData]):
        Redirected all the static calls to the global FontCache
        instance.

2009-01-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23207
        Moved currentTime() to from WebCore to WTF.

        * WebView/WebFrame.mm: a different header file included.

2009-01-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5845089> REGRESSION (r30044): Mail custom stationery missing images
        because of change to -[HTMLObjectElement data]

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]): Added a thread
        violation check because I saw this being done off the main thread while testing Mail, and it
        caused problems. Put all the one time initialization under a single guard to make things just
        a little faster other times, and to make it clearer which things are one-time. Added a call to
        the new patchMailRemoveAttributesMethod function.
        (-[WebView initWithFrame:frameName:groupName:]): Added a thread violation check here too,
        because I assumed it would be slightly better to have a public method name in the violation
        message. This calls commonInitialization later, so it will hit that one eventually.
        (objectElementDataAttribute): Added. Just returns the value of the "data" attribute.
        (recursivelyRemoveMailAttributes): Added. Patch to an internal Mail method that in turn patches
        a WebKit method and removes the patch again on the way out.
        (patchMailRemoveAttributesMethod): Added. On Leopard only, checks the Mail version, and then
        applies the patch that fixes this bug.

2009-01-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fixed <rdar://problem/6234347> Add/change conditional key
          bindings for changing paragraph- and character-level writing
          direction (to match NSTextView)

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Added
        code to validate makeBaseWritingDirectionLeftToRight: and
        makeBaseWritingDirectionRightToLeft:.
        (writingDirectionKeyBindingsEnabled): Changed this function to
        always return YES, except on Tiger and Leopard.
        (-[WebHTMLView makeBaseWritingDirectionLeftToRight:]): Renamed
        changeBaseWritingDirectionToLTR: to this.
        (-[WebHTMLView makeBaseWritingDirectionRightToLeft:]): Renamed
        changeBaseWritingDirectionToRTL: to this.
        (-[WebHTMLView changeBaseWritingDirectionToLTR:]): Now calls
        makeBaseWritingDirectionLeftToRight:.
        (-[WebHTMLView changeBaseWritingDirectionToRTL:]): Now calls
        makeBaseWritingDirectionRightToLeft:.
        * WebView/WebView.mm: Added makeBaseWritingDirectionLeftToRight
        and makeBaseWritingDirectionRightToLeft to
        FOR_EACH_RESPONDER_SELECTOR.

2009-01-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add and implement WKPCGetStringIdentifier.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetStringIdentifier):
        * Plugins/Hosted/WebKitPluginClient.defs:

2009-01-08  Stephanie Lewis  <slewis@gmail.com>

        Fix Tiger build.        

        * WebView/WebTextIterator.mm:

2009-01-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add basic support for evaluating scripts.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::fromUTF8WithLatin1Fallback):
        (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):
        (WKPCReleaseObject):
        (marshalValue):
        (WKPCEvaluate):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::releaseObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHostTypes.h:

2009-01-08  David Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/6465682> REGRESSION: In Mail, can't force a message to auto scroll

        Add a new ChromeClient method for handling exposure of scrolled rects.

        Reviewed by Oliver Hunt

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView):

2009-01-08  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        Bug 23185: add a currentRange method to the WebTextIterator SPI
        https://bugs.webkit.org/show_bug.cgi?id=23185
        rdar://problem/6455834

        I also noticed a garbage-collection-related threading issue that I fixed, and
        that the SPI for getting text was unnecessarily inefficient, so I fixed that too.

        * WebView/WebTextIterator.h: Moved currentNode and currentText into a "deprecated"
        category. Added currentTextPointer and currentTextLength.

        * WebView/WebTextIterator.mm: Changed m_textIterator into an OwnPtr, and also
        used _textIterator to be consistent with ObjC rather than C++ naming.
        (+[WebTextIteratorPrivate initialize]): Added. Calls WebCoreObjCFinalizeOnMainThread,
        since the finalize method here works with main-thread only WebCore objects. 
        (-[WebTextIterator initWithRange:]): Changed since _textIterator is an OwnPtr now.
        (-[WebTextIterator advance]): Changed name of m_textIterator. Removed null assertion,
        since I don't think it provides much value.
        (-[WebTextIterator atEnd]): Ditto.
        (-[WebTextIterator currentRange]): Added.
        (-[WebTextIterator currentTextPointer]): Added.
        (-[WebTextIterator currentTextLength]): Added.
        (-[WebTextIterator currentNode]): Did same as above, but also put into new category.
        (-[WebTextIterator currentText]): Ditto.

2009-01-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Simplify Mac interfaces for drawing media controller elements

        <rdar://problem/6293969>

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Update for changes to media controller functions

2009-01-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fix build.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::idForObject):

2009-01-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add a way for a plug-in to get a reference to the Window JS object.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetWindowNPObject):
        Call the appropriate instance.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        Add object ID counter.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::destroy):
        Clear the object ID map.
        
        (WebKit::NetscapePluginInstanceProxy::idForObject):
        New method that returns a unique ID for a given JS object.
        
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        Return the object ID for the window JS object.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add GetWindowNPObject.

2009-01-07  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23160: add setMemoryCacheClientCallsEnabled SPI so Safari can be faster with activity window closed
        https://bugs.webkit.org/show_bug.cgi?id=23160

        * WebView/WebView.mm:
        (-[WebView setMemoryCacheDelegateCallsEnabled:]): Added.
        (-[WebView areMemoryCacheDelegateCallsEnabled]): Added
        * WebView/WebViewPrivate.h: Ditto.

2009-01-05  Gavin Barraclough  <baraclough@apple.com>

        Rubber Stamped by Oliver Hunt.

        Replace all uses of JSValue* with new wrapper class, JSValuePtr.
        See JavaScriptCore/ChangeLog for more detailed description.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _convertValueToObjcValue:]):
        (-[WebScriptCallFrame exception]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (aeDescFromJSValue):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

2009-01-06  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Darin Adler.

        Exposed through WebFrame private interface the new WebCore API AnimationController::numberOfActiveAnimations() to be used by DRT.

        https://bugs.webkit.org/show_bug.cgi?id=23126

        * WebView/WebFrame.mm:
        (-[WebFrame _numberOfActiveAnimations]):
        * WebView/WebFramePrivate.h:

2009-01-05  David Kilzer  <ddkilzer@apple.com>

        Add SPI to enable, disable and check state of WebIconDatabase

        Reviewed by Darin Adler & Timothy Hatcher.

        Add -[WebIconDatabase isEnabled] and -[WebIconDatabase setEnabled:]
        SPI to make it possible to enable, disable and check the state of
        the icon database.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase init]): Extracted code into -_startUpIconDatabase.
        (-[WebIconDatabase iconForURL:withSize:cache:]): Switched to use
        -isEnabled instead of -_isEnabled.
        (-[WebIconDatabase iconURLForURL:]): Ditto.
        (-[WebIconDatabase retainIconForURL:]): Ditto.
        (-[WebIconDatabase releaseIconForURL:]): Ditto.
        (-[WebIconDatabase isEnabled]): Renamed from -_isEnabled in
        WebInternal category.
        (-[WebIconDatabase setEnabled:]): Added.  Takes care of changing
        the enabled/disabled state of the icon database.
        (-[WebIconDatabase removeAllIcons]): Switched to use -isEnabled
        instead of -_isEnabled.
        (-[WebIconDatabase _startUpIconDatabase]): Added.  Extrated from
        -init.
        (-[WebIconDatabase _shutDownIconDatabase]): Added.  Remove
        observers when the icon database is disabled.
        * Misc/WebIconDatabaseInternal.h: Added declarations for
        -_startUpIconDatabase and -_shutDownIconDatabase.
        * Misc/WebIconDatabasePrivate.h: Added declarations for
        -isEnabled and -setEnabled:.

2009-01-05  Brady Eidson  <beidson@apple.com>

        Reviewed by Jon Honeycutt

        Expose setting the last-visit-was-failure flag on a history items in preparation for <rdar://problem/6173319>

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem _setLastVisitWasFailure:]):
        * History/WebHistoryItemPrivate.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Another blind mac build fix

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::contentsSizeChanged):

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Blind mac build fix

        * WebCoreSupport/WebChromeClient.mm:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Fix mac build

        * WebCoreSupport/WebChromeClient.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Build fix for contentsSizeChanged

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::contentsSizeChanged):

2009-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 23072: REGRESSION (r37371): In the Dictionary application, scroll bar appears
        inside its web view when resizing its window
        https://bugs.webkit.org/show_bug.cgi?id=23072
        rdar://problem/6368028

        The first attempt at fixing this did not work.
        This time I was able to reproduce the bug and test the fix.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (applyAppleDictionaryApplicationQuirkNonInlinePart): Changed the arguments and
        function names around a bit to make even less code at the call site.
        (applyAppleDictionaryApplicationQuirk): Put the check for whether this is the
        Dictionary application in here.
        (WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache): Put a call to
        applyAppleDictionaryApplicationQuirk here. This was a case I had missed before,
        when the script is cached. This fixes one of the two problems with the initial
        patch; the other fix is in WebCore.
        (WebFrameLoaderClient::dispatchWillSendRequest): Changed the
        applyAppleDictionaryApplicationQuirk call here to work the new simpler way.

        * WebView/WebView.mm: Had to add an include due to changes in WebCore header includes.

2009-01-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Darin Adler.

        Bug 23060: REGRESSION (r38629): Cannot scroll a WebHTMLView using Home/End/Page up/Page down
        <https://bugs.webkit.org/show_bug.cgi?id=23060>
        <rdar://problem/6467830>

        After r38629, all keyboard events get sent by Editor to the EditorClient, even
        if the selection is not editable. If the event's command is unsupported by
        WebHTMLView, WebHTMLView mistakenly thinks that the event was handled when it
        was not. When using the page up / page down keys, the events generated are of
        the form scrollPageUp rather than movePageUp, so they are unsupported by
        WebHTMLView and cause this bug to occur.

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

2009-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Bug 23072: REGRESSION (r37371): In the Dictionary application, scroll bar appears inside its web view when resizing its window
        https://bugs.webkit.org/show_bug.cgi?id=23072
        rdar://problem/6368028

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (isAppleDictionaryApplication): Added.
        (applyAppleDictionaryApplicationQuirk): Added. Under the right conditions, sets
        a flag to ask HTMLFrameElementBase to ignore the scrolling attribute.
        (WebFrameLoaderClient::dispatchWillSendRequest): Call the two functions above to
        apply the quirk when the relevant script is loaded.

2008-12-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6467608> lastVisitWasFailure flag persists in
          global history after a successful visit

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:wasFailure:]): Changed to always
        update the wasFailure flag on the HistoryItem.

2008-12-23  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov (a slightly earlier version).

        - fix https://bugs.webkit.org/show_bug.cgi?id=22976
          crash due to Mail's use of WebArchive and WebResource on non-main thread

        * Misc/WebKitLogging.h: Improved comments for ASSERT_MAIN_THREAD. Got rid of
        WebKitRunningOnMainThread function, which was just a cover for pthread_main_np.
        * Misc/WebKitLogging.m: Ditto.

        * Misc/WebKitVersionChecks.h: Added a version after which we won't do the
        main thread workaround.

        * Misc/WebNSObjectExtras.h: Added a new method, _webkit_getPropertyOnMainThread:,
        which performs a selector on the main thread, waits for it to complete, and then
        returns the value on the caller thread.
        * Misc/WebNSObjectExtras.mm: Added.

        * WebView/WebArchive.mm:
        (-[WebArchive init]): Added WebCoreThreadViolationCheck.
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]): Perform
        initialization on main thread if needMailThreadWorkaround is true.
        Also added WebCoreThreadViolationCheck.
        (-[WebArchive initWithData:]): Added WebCoreThreadViolationCheck.
        (-[WebArchive mainResource]): Get property on main thread if
        needMailThreadWorkaround is true. Also added WebCoreThreadViolationCheck.
        (-[WebArchive subresources]): Ditto.
        (-[WebArchive subframeArchives]): Ditto.
        (-[WebArchive data]): Ditto.
        (-[WebArchive _initWithCoreLegacyWebArchive:]): Added WebCoreThreadViolationCheck.
        (-[WebArchive _coreLegacyWebArchive]): Ditto.
        (-[WebArchive _initWithArguments:]): Added. Used to implement the cross-thread
        version of initWithMainResource above.

        * WebView/WebResource.mm:
        (-[WebResource initWithCoder:]): Added WebCoreThreadViolationCheck.
        (-[WebResource data]): Get property on main thread if
        needMailThreadWorkaround is true. Also added WebCoreThreadViolationCheck.
        (-[WebResource URL]): Ditto.
        (-[WebResource MIMEType]): Ditto.
        (-[WebResource textEncodingName]): Ditto.
        (-[WebResource frameName]): Ditto.
        (-[WebResource _ignoreWhenUnarchiving]): Ditto.
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]):
        Perform initialization on main thread if needMailThreadWorkaround is true.
        Also added WebCoreThreadViolationCheck.
        (-[WebResource _suggestedFilename]): Added. Helper for _fileWrapperRepresentation.
        (-[WebResource _fileWrapperRepresentation]): Rewrote to use methods instead of
        getting at coreResource directly.
        (-[WebResource _response]): Get property on main thread if
        needMailThreadWorkaround is true. Also added WebCoreThreadViolationCheck.
        (-[WebResource _stringValue]): Ditto.
        (+[WebResource _needMailThreadWorkaroundIfCalledOffMainThread]): Added.
        (-[WebResource _initWithArguments:]): Added. Used to implement the cross-thread
        version of _initWithData above.

        * WebView/WebResourceInternal.h: Changed to include WebResourcePrivate.h since internal
        clients have access to the SPI as well as the API. Added definition of MAIL_THREAD_WORKAROUND
        and the needMainThreadWorkaround helper function.

        * Misc/WebIconDatabase.mm: Removed include of now-defunct FoundationExtras.h
        file. This probably fixes clean builds.
        * WebCoreSupport/WebIconDatabaseClient.mm: Ditto.

        * WebCoreSupport/WebFrameLoaderClient.mm: Removed include of WebResourcePrivate.h,
        since it's not actually used.
        * WebView/WebDataSource.mm: Ditto.
        * WebView/WebHTMLRepresentation.mm: Ditto.

2008-12-23  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22979
          crash seen in -[WebView drawsBackground] when quitting
          <rdar://problem/6464601>

        * WebView/WebView.mm:
        (-[WebView drawsBackground]): Added comment and a null check for _private.

2008-12-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6449588> REGRESSION (r38279-r38280): Minimize them remaximize a window with a flash plugin, plugin doesn't resume at full speed
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView windowDidDeminiaturize:]): Deminiaturizing should restart timers, not stop timers.

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

        Reviewed by Darin Adler, Adele Peterson, Brady Eidson.
        
        Added SPI for getting an unsorted vector of all items in history.
        
        * History/WebHistory.h:
        * History/WebHistory.mm:
        (-[WebHistory allItems]):

2008-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - implement FrameLoaderClient::shouldUseCredentialStorage() by calling
          a new resource load delegae method.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldUseCredentialStorage): Added. Calls the
        delegate method. If the method is unimplemented, returns true for
        backwards compatibility.
        * WebView/WebView.mm: 
        (-[WebView _cacheResourceLoadDelegateImplementations]): Initialize the
        shouldUseCredentialStorageFunc member.
        (CallResourceLoadDelegateReturningBoolean): Added.
        * WebView/WebViewInternal.h:
        * WebView/WebResourceLoadDelegatePrivate.h: Declared the delegate method
        -webView:resource:shouldUseCredentialStorageForDataSource:.

2008-12-18  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Jonathan Honeycutt.

        Fix an apparent typo in r39385 that is causing lots of crashes.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):

2008-12-18  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Initial visit to a website creates history items that start with a visit count of
        zero instead of one

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:]): Set the visit count on new items

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem _setVisitCount:]): Call through to the WebCore item
        * History/WebHistoryItemInternal.h:

2008-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Implement FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout() by calling
        a new private frame load delegate method.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2008-12-16  Antti Koivisto  <antti@apple.com>

        Reviewed by John Sullivan.
        
        Add version check for shift-reload behavior.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebFrame.mm:
        (-[WebFrame reload]):

2008-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Start sending keyboard events to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::keyEvent):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView keyDown:]):
        (-[WebHostedNetscapePluginView keyUp:]):
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/6450538>
        
        Fix flag enumeration.
        
        * Plugins/Hosted/WebKitPluginHostTypes.h:

2008-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Instead of passing a gazillion booleans to WKPCLoadURL, pass a single set of flags.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLoadURL):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHostTypes.h:

2008-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Add trailing null to headers to avoid a crash in the plug-in host.
        
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::didReceiveResponse):

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

        Rubber-stamped by Cameron Zwarich.

        <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2008-12-15  Stephanie Lewis  <slewis@apple.com>

        Fix build.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:

2008-12-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Change InstantiatePlugin to be asynchronous so we won't deadlock if the plug-in tries to call
        back into us while it's being instantiated.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::clientPort):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInstantiatePluginReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::Reply::):
        (WebKit::NetscapePluginInstanceProxy::Reply::Reply):
        (WebKit::NetscapePluginInstanceProxy::Reply::~Reply):
        (WebKit::NetscapePluginInstanceProxy::InstantiatePluginReply::InstantiatePluginReply):
        (WebKit::NetscapePluginInstanceProxy::setCurrentReply):
        (WebKit::NetscapePluginInstanceProxy::waitForReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Let WebKit generate a plug-in ID instead of having the plug-in host do it.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Create the plug-in proxy before instantiating the plug-in.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::create):
        (WebKit::NetscapePluginInstanceProxy::setRenderContextID):
        (WebKit::NetscapePluginInstanceProxy::setUseSoftwareRenderer):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        LoadURL doesn't need to be asynchronous.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLoadURL):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.
        
        - Add [WebFrame reloadFromOrigin] for performing end-to-end reload.
        - Add corresponding IBAction to WebView.
        - Temporarily make [WebFrame reload] trigger end-to-end reload if shift modifier is pressed when it is called.

        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        (-[WebFrame reload]):
        (-[WebFrame reloadFromOrigin]): 
        * WebView/WebFramePrivate.h: Match the FrameLoadType enum in WebCore.
        * WebView/WebView.h:
        * WebView/WebView.mm:
        (-[WebView reloadFromOrigin:]):

2008-12-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/3258561> WebHistoryAllItemsRemovedNotification
          should add items to userInfo

        * History/WebHistory.mm:
        (-[WebHistoryPrivate allItems]): Added this helper method, which returns
        all values in the _entriesByURL dictionary.
        (-[WebHistory removeAllItems]): Changed to send the array of all items
        in the notification.

2008-12-13  Darin Adler  <darin@apple.com>

        - <rdar://problem/6441035> WebTextIterator class not exported in WebKit

        * WebKit.exp: Added the class. We forgot to export it when we added
        the WebTextIterator SPI.

2008-12-12  Darin Adler  <darin@apple.com>

        Rubber stamped by Adam Roben.

        - fix <rdar://problem/5648301> Can't tab around to text fields in Safari
          login sheet after clicking static text, due to AppKit key loop change

        * Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib: Removed.
        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib: Added.
        * Panels/English.lproj/WebAuthenticationPanel.nib/info.nib: Removed.
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
        Set nextKeyView of the selectable static texts to the editable text.
        Updated nib format.

2008-12-12  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        Shrink Cache Sizes.

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

2008-12-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Tim Hatcher.

        Don't try to free the dummy "1" port state.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebNetscapePluginView updateAndSetWindow]):

2008-12-11  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Mark Rowe.

        Roll out r39212 due to assertion failures during layout tests, multiple
        layout test failures, memory leaks, and obvious incorrectness.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences fullDocumentTeardownEnabled]):
        * WebView/WebPreferencesPrivate.h:

2008-12-11  Stephanie Lewis  <slewis@apple.com>

        Fix build.

        * WebView/WebView.mm:

2008-12-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        Empty Web cache before quitting a debug build in order
        to report accurate CachedResource leaks.

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

2008-12-11  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.

        * Misc/WebNSDataExtras.h:

2008-12-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Cameron Zwarich.

        https://bugs.webkit.org/show_bug.cgi?id=22797
        REGRESSION: Crash at http://news.cnet.com/8301-17939_109-10119149-2.html

        Make sure to protect the stream because destroyStream can otherwise cause it to be deleted.
        
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::destroyStreamWithReason):

2008-12-10  Glenn Wilson  <gwilson@google.com>

        Reviewed by Adam Roben.

        Added new methods for overriding default WebPreference values
        and for resetting preferences to their defaults.
        https://bugs.webkit.org/show_bug.cgi?id=20534

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences resetToDefaults]): new method
        (-[WebPreferences overridePreference:flag:]): new method
        * WebView/WebPreferencesPrivate.h: new method signatures

2008-12-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Implement support for NPN_PostURL/NPN_PostURLNotify in WebKit.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        Add stopAllStreams.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::stopAllStreams):
        Factored out this from ::destroy.
        
        (WebKit::NetscapePluginInstanceProxy::destroy):
        Call stopAllStreams().
        
        (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
        Ditto.
        
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        Handle post being true. This code has been copied from WebNetscapePluginView.mm (for now).

2008-12-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Move two NSData category methods to WebNSDataExtras.m.
        
        * Misc/WebNSDataExtras.h:
        * Misc/WebNSDataExtras.m:
        (-[NSData _web_startsWithBlankLine]):
        (-[NSData _web_locationAfterFirstBlankLine]):
        * Plugins/WebNetscapePluginView.mm:

2008-12-10  Alice Liu  <alice.liu@apple.com>

        fixed https://bugs.webkit.org/show_bug.cgi?id=20685

        Reviewed by Darin Adler.

        * Misc/WebNSPasteboardExtras.mm:
        Ask image for its file extension instead of falling back on MIME type and file path.
        Also moved this code to before setting the pasteboard data so as not to set any if
        no extension can be determined.
        (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):

        * WebView/WebHTMLView.mm:
        Fixed a separate but related long-standing bug of how the filename for the promised
        drag data is determined by asking the image for a proper file extension. 
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):

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

        Reviewed by Darin Adler.

        Fix typecast.

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

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

        Reviewed by Darin Adler.

        Implement software rendering of hosted plug-ins.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvalidateRect):
        New MiG function. This is called by the plug-in host when it has drawn something.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        Create a software renderer.
        
        (-[WebHostedNetscapePluginView destroyPlugin]):
        Destroy the software renderer.
        
        (-[WebHostedNetscapePluginView drawRect:]):
        Draw using the software renderer.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add InvalidateRect.

2008-12-09  Brett Wilson  <brettw@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22177

        Add a callback on ChromeClient that the state of form elements on
        the page has changed. This is to allow clients implementing session
        saving to know when the current state is dirty.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::formStateDidChange):

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

        Reviewed by Dan Bernstein.

        Make sure to pause null events for hosted plug-ins as well.

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

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

        Reviewed by Darin Adler.

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):
        Unfortunately we can't use a libdispatch source right now, because of <rdar://problem/6393180>.

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

        Implement a few methods needed to keep Dictionary.app working on Leopard.

        <rdar://problem/6002160> Internal changes to WebKit in Safari 4
        Developer Preview might break Dictionary

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        (-[WebFrame convertNSRangeToDOMRange:]): Added. Calls _convertNSRangeToDOMRange.
        (-[WebFrame convertDOMRangeToNSRange:]): Added. Calls _convertDOMRangeToNSRange.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _bridge]): Added. Returns the WebFrame, which has the methods
        that Dictionary.app is using.

2008-12-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        More work towards getting NPN_GetURL working.
        
        * Plugins/Hosted/HostedNetscapePluginStream.h:
        Inherit from NetscapePlugInStreamLoaderClient.
        
        (WebKit::HostedNetscapePluginStream::streamID):
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::startStream):
        Keep track of the resposne URL and the MIME type. Pass the response URL to the 
        plug-in host.
        
        (WebKit::HostedNetscapePluginStream::didFinishLoading):
        Disconnect the stream.
        
        (WebKit::HostedNetscapePluginStream::start):
        Create a plug-in stream loader and start loading.
        
        (WebKit::HostedNetscapePluginStream::stop):
        Cancel the load.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLoadURL):
        Fix the parameter order.
        
        (WKPCCancelLoadURL):
        New function that cancels a load of a stream with a given reason.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::destroy):
        Stop the streams.
        
        (WebKit::NetscapePluginInstanceProxy::pluginStream):
        Return a plug-in stream given a stream ID.
        
        (WebKit::NetscapePluginInstanceProxy::disconnectStream):
        Remove the stream from the streams map.
        
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        Create a stream and load it.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add CancelLoadURL.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add responseURL to StartStream.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginPackage]):
        Move this down to the base class from WebNetscapePluginView.
        
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:

2008-12-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - WebKit/mac part of tracking the global history item for a WebView

        * WebView/WebView.mm:
        (-[WebView _globalHistoryItem]): Added. Returns the page's global
        history item.
        * WebView/WebViewPrivate.h:

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=15671

        VisiblePosition::caretRect() was renaemd to absoluteCaretBounds().
        
        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtNode:offset:affinity:]):

2008-12-06  David Kilzer  <ddkilzer@apple.com>

        Bug 22666: Clean up data structures used when collecting URLs of subresources for webarchives

        <https://bugs.webkit.org/show_bug.cgi?id=22666>

        Reviewed by Darin Adler.

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _subresourceURLs]): Changed from using Vector<KURL> to
        ListHashSet<KURL> when calling WebCore::Node::getSubresourceURLs().

2008-12-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6405599> Tiger Mail crashes when using "Mail Contents of This Page"
        in Safari before opening a mail message in Mail

        * Carbon/CarbonWindowAdapter.m: Removed.
        * Carbon/CarbonWindowAdapter.mm: Copied from WebKit/mac/Carbon/CarbonWindowAdapter.m.
        (+[CarbonWindowAdapter initialize]):
        * History/WebBackForwardList.mm:
        (+[WebBackForwardList initialize]):
        * History/WebHistoryItem.mm:
        (+[WebHistoryItem initialize]):
        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initialize]):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (+[WebHostedNetscapePluginView initialize]):
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.m: Removed.
        * Plugins/WebBasePluginPackage.mm: Copied from WebKit/mac/Plugins/WebBasePluginPackage.m.
        (+[WebBasePluginPackage initialize]):
        * Plugins/WebNetscapePluginView.mm:
        (+[WebNetscapePluginView initialize]):
        * WebCoreSupport/WebEditorClient.mm:
        (+[WebEditCommand initialize]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebArchive.mm:
        (+[WebArchivePrivate initialize]):
        * WebView/WebDataSource.mm:
        (+[WebDataSourcePrivate initialize]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLViewPrivate initialize]):
        (+[WebHTMLView initialize]):
        * WebView/WebResource.mm:
        (+[WebResourcePrivate initialize]):
        * WebView/WebView.mm:
        (+[WebViewPrivate initialize]):
        Call JSC::initializeThreading();

2008-12-04  Stephanie Lewis  <slewis@apple.com>

        Fix build.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLoadURL):

2008-12-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More work on streams.
        
        * Plugins/Hosted/HostedNetscapePluginStream.h: Added.
        (WebKit::HostedNetscapePluginStream::create):
        * Plugins/Hosted/HostedNetscapePluginStream.mm: Added.
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        (WebKit::HostedNetscapePluginStream::startStreamWithResponse):
        (WebKit::HostedNetscapePluginStream::startStream):
        (WebKit::HostedNetscapePluginStream::didReceiveData):
        (WebKit::HostedNetscapePluginStream::didFinishLoading):
        (WebKit::HostedNetscapePluginStream::didReceiveResponse):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::pluginView):
        (WebKit::NetscapePluginInstanceProxy::hostProxy):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::PluginRequest):
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::requestID):
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::request):
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::frameName):
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::didStartFromUserGesture):
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript):
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start implementing WKPCLoadURL. Currently this has copied a lot of code from WebNetscapePluginView
        but once we have a more complete implementation of NPStreams we can start refactoring things so that the
        implementations can share more code.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLoadURL):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.
        
        Move requestWithURLCString to WebBaseNetscapePluginView.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        * Plugins/WebNetscapePluginView.mm:

2008-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move WebPluginRequest to its own file.
        
        * Plugins/WebNetscapePluginView.mm:
        * Plugins/WebPluginRequest.h: Added.
        * Plugins/WebPluginRequest.m: Added.
        (-[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:didStartFromUserGesture:]):
        (-[WebPluginRequest dealloc]):
        (-[WebPluginRequest request]):
        (-[WebPluginRequest frameName]):
        (-[WebPluginRequest isCurrentEventUserGesture]):
        (-[WebPluginRequest sendNotification]):
        (-[WebPluginRequest notifyData]):

2008-12-03  Anders Carlsson  <andersca@apple.com>

        Handle the CA model.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setWindowIfNecessary]):

2008-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.
        
        <rdar://problem/6412293>
        Call NPP_SetWindow for CA plug-ins.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebNetscapePluginView restorePortState:]):
        (-[WebNetscapePluginView isNewWindowEqualToOldWindow]):
        (-[WebNetscapePluginView updateAndSetWindow]):
        (-[WebNetscapePluginView setWindowIfNecessary]):

2008-12-03  Anders Carlsson  <andersca@apple.com>

        Fix the release build.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::deadNameNotificationCallback):

2008-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6412234>
        Don't crash if we can't launch the plug-in host.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):

2008-12-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Start processing messages sent to the client port.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        Add a map from ports to plug-in proxies. Turn the set of instances into a map from
        pluginID to instance proxy.
        
        (WKPCStatusText):
        Look up the right instance proxy and call status().
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::pluginID):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::status):
        Implement this.
        
        * Plugins/Hosted/WebKitPluginClient.defs:
        Add the plug-in ID to StatusText.

2008-12-02  Gregory Hughes  <ghughes@apple.com>

        Reviewed by Beth Dakin.

        Bug 22513: ZOOM: text selection does not send correct zoom bounds

        When zoomed, text selection must send the zoom bounds in flipped
        screen coordinates.

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

2008-12-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Create a client mach port and pass it to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        * Plugins/Hosted/WebKitPluginHost.defs:

2008-12-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Let the plug-in views know if the plug-in host crashes.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        (WebKit::NetscapePluginHostProxy::addPluginInstance):
        (WebKit::NetscapePluginHostProxy::removePluginInstance):
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::create):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        Keep a pointer to the host proxy.
        
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Add the instance to the host set.
        
        (WebKit::NetscapePluginInstanceProxy::~NetscapePluginInstanceProxy):
        Remove the instance form the host set.
        
        (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
        Tell the plug-in view that the plug-in died.

        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        Pass the plug-in view to the instantiatePlugin.
        
        (-[WebHostedNetscapePluginView pluginHostDied]):
        Handle the plug-in host crashing.
        
        (-[WebHostedNetscapePluginView drawRect:]):
        Fill the plug-in view with a nice red shade if the plug-in crashes.

2008-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Recover if the plug-in host dies and we try to instantiate another plugin before we get the port death notification
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::pluginHostDied):
        Remove the plug-in host from the map.
        
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        NetscapePluginHostProxy is no longer refcounted.

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        This is no longer refcounted. Add a set of plug-in instances (unused for now).
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        Create a death notification port.
        
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        Tell the manager that we're gone and delete ourselves.
        
        (WebKit::NetscapePluginHostProxy::deathPortCallback):
        New CFMachPort callback.

2008-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Move instantiatePlugin to NetscapePluginHostManager.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):

2008-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Pass the plug-in host port directly to the instance proxy.
        
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::create):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::resize):
        (WebKit::NetscapePluginInstanceProxy::destroy):
        (WebKit::NetscapePluginInstanceProxy::focusChanged):
        (WebKit::NetscapePluginInstanceProxy::windowFocusChanged):
        (WebKit::NetscapePluginInstanceProxy::windowFrameChanged):
        (WebKit::NetscapePluginInstanceProxy::startTimers):
        (WebKit::NetscapePluginInstanceProxy::mouseEvent):
        (WebKit::NetscapePluginInstanceProxy::stopTimers):

2008-12-01  Anders Carlsson  <andersca@apple.com>

        Try to fix the Tiger build.

        * Plugins/WebNetscapePluginView.mm:

2008-12-01  Anders Carlsson  <andersca@apple.com>

        Rename _layer to _pluginLayer where I forgot to do so.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView destroyPlugin]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        (-[WebNetscapePluginView setLayer:]):
        (-[WebNetscapePluginView destroyPlugin]):

2008-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Make sure to re-insert layers as needed so they won't be lost when the layer backed
        view is removed from the view hierarchy.

        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        Add _pluginLayer ivar.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        Don't add the layer here.
        
        (-[WebHostedNetscapePluginView setLayer:]):
        Instead, add it here.
        
        (-[WebHostedNetscapePluginView destroyPlugin]):
        Set _pluginLayer to 0.
        
        * Plugins/WebNetscapePluginView.mm:        
        (-[WebNetscapePluginView createPlugin]):
        Don't add the layer here.
        
        (-[WebNetscapePluginView setLayer:]):
        Do it here.

2008-11-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Mark Rowe.
        
        https://bugs.webkit.org/show_bug.cgi?id=22557
        
        Report free size in central and thread caches too.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

2008-11-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22557
        Add statistics for JavaScript GC heap.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics memoryStatistics]):

2008-11-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.
        
        https://bugs.webkit.org/show_bug.cgi?id=22557
        
        - Add purgeable memory statistics to cache statistics.
        - Add method for getting fastMalloc statistics.
        - Add method to force returning free memory back to system.

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics stopIgnoringWebCoreNodeLeaks]):
        (+[WebCoreStatistics memoryStatistics]):
        (+[WebCoreStatistics returnFreeMemoryToSystem]):

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

        Fix the Tiger build.

        mig.h does not always define __MigTypeCheck on Tiger, which leads to problems when the generated
        code is built with -Wundef.

        * Plugins/Hosted/WebKitPluginHostTypes.h:

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

        Fix build.

        * Configurations/Base.xcconfig:

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

        Reviewed by Mark Rowe.

        Move WebHostedNetscapePluginView.{h|mm} to Plugins/Hosted.
        
        (-[WebHostedNetscapePluginView handleMouseMoved:]):
        (-[WebHostedNetscapePluginView setAttributeKeys:andValues:]):
        Fix a leak.
        
        (-[WebHostedNetscapePluginView createPlugin]):
        Instantiate the plug-in, store the plug-in proxy in the _proxy ivar.
        
        (-[WebHostedNetscapePluginView loadStream]):
        (-[WebHostedNetscapePluginView shouldStop]):
        Add stubs for these.
        
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        (-[WebHostedNetscapePluginView windowFocusChanged:]):
        (-[WebHostedNetscapePluginView destroyPlugin]):
        (-[WebHostedNetscapePluginView startTimers]):
        (-[WebHostedNetscapePluginView stopTimers]):
        (-[WebHostedNetscapePluginView focusChanged]):
        (-[WebHostedNetscapePluginView windowFrameDidChange:]):
        (-[WebHostedNetscapePluginView mouseDown:]):
        (-[WebHostedNetscapePluginView mouseUp:]):
        (-[WebHostedNetscapePluginView mouseDragged:]):
        (-[WebHostedNetscapePluginView mouseEntered:]):
        (-[WebHostedNetscapePluginView mouseExited:]):
        Call the proxy.
        
        (-[WebHostedNetscapePluginView addWindowObservers]):
        (-[WebHostedNetscapePluginView removeWindowObservers]):
        Add/remove observers for when the window frame changes.
        
        * Plugins/WebHostedNetscapePluginView.h: Removed.
        * Plugins/WebHostedNetscapePluginView.mm: Removed.

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

        Reviewed by Mark Rowe.

        Add the plug-in host proxy and plug-in instance proxy objects.

        These are just simple objects that forward their calls to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginHostProxy.h: Added.
        (WebKit::NetscapePluginHostProxy::create):
        (WebKit::NetscapePluginHostProxy::port):
        * Plugins/Hosted/NetscapePluginHostProxy.mm: Added.
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h: Added.
        (WebKit::NetscapePluginInstanceProxy::create):
        (WebKit::NetscapePluginInstanceProxy::renderContextID):
        (WebKit::NetscapePluginInstanceProxy::useSoftwareRenderer):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Added.
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::resize):
        (WebKit::NetscapePluginInstanceProxy::destroy):
        (WebKit::NetscapePluginInstanceProxy::focusChanged):
        (WebKit::NetscapePluginInstanceProxy::windowFocusChanged):
        (WebKit::NetscapePluginInstanceProxy::windowFrameChanged):
        (WebKit::NetscapePluginInstanceProxy::startTimers):
        (WebKit::NetscapePluginInstanceProxy::mouseEvent):
        (WebKit::NetscapePluginInstanceProxy::stopTimers):

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

        Reviewed by Dan Bernstein, Mark Rowe and Kevin Decker.

        Add the plug-in host manager singleton.
        
        * Plugins/Hosted/NetscapePluginHostManager.h: Added.
        * Plugins/Hosted/NetscapePluginHostManager.mm: Added.
        
        (WebKit::NetscapePluginHostManager::hostForPackage):
        If there's an existing host proxy available, just return it. Otherwise spawn a new plug-in host and
        create a new plug-in host proxy from the new plug-in host port.
        
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        Pass the plug-in host path and the preferred CPU type to the plug-in agent. When the plug-in host has
        finished launching, pass it the path to the plug-in bundle.
        
        (WebKit::NetscapePluginHostManager::initializeVendorPort):
        Check in with the plug-in agent and get the new plug-in vendor port back.

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

        Reviewed by Mark Rowe.

        * Plugins/Hosted/WebKitPluginHostTypes.h:
        Add copyright headers and fix the spacing around the *'s.

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

        Reviewed by Dan Bernstein.
        
        * Plugins/Hosted/WebKitPluginHost.defs:
        Add copyright headers.
        
        * Plugins/Hosted/WebKitPluginHostTypes.h: Added.
        Forgot to add this.

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

        Reviewed by Dan Bernstein.

        Add plug-in host .defs.

        * Plugins/Hosted/WebKitPluginAgent.defs: Added.
        * Plugins/Hosted/WebKitPluginAgentReply.defs: Added.
        * Plugins/Hosted/WebKitPluginClient.defs: Added.
        * Plugins/Hosted/WebKitPluginHost.defs: Added.
        * Plugins/Hosted/WebKitPluginHostTypes.defs: Added.

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

        Reviewed by Mark Rowe and Kevin Decker.

        Minor plug-in changes.
        
        * Plugins/WebBaseNetscapePluginView.h:
        Add add/remove observer method declarations.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView isFlipped]):
        Move this down from WebNetscapePluginView.
        
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage pluginHostArchitecture]):
        Getter for the plug-in host architecture.
        
        * Plugins/WebNetscapePluginView.mm:

2008-11-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - include the text direction submenu in context menus when appropriate

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Changed the default
        textDirectionSubmenuInclusionBehavior to "automatically", which includes
        the menu when the selection is confined to a single paragraph the either
        has right-to-left base writing direction or contains right-to-left or
        embedded text. Left the default for Tiger and Leopard to be "never".

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        * History/WebHistory.mm:

2008-11-24  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Alexey Proskuryakov.

        http://bugs.webkit.org/show_bug.cgi?id=15643

        Added API support for the "trailing whitespace" work-around.  This includes an APIs
        to get and set the state of this configuration variable.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::selectTrailingWhitespaceEnabled):
        * WebView/WebView.mm:
        (-[WebView setSelectTrailingWhitespaceEnabled:]):
        (-[WebView isSelectTrailingWhitespaceEnabled]):
        (-[WebView setSmartInsertDeleteEnabled:]):
        * WebView/WebViewPrivate.h:

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22470
          remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory

        * WebCoreSupport/WebFrameLoaderClient.h: Remove argument.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Get the URL from the
        DocumentLoader, just as we do the title and the failure flag.

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - finish https://bugs.webkit.org/show_bug.cgi?id=22295
          track which history items are from page load failures

        Last time around I did this only for the back/forward list and missed the
        global history list.

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:wasFailure:]): Added wasFailure argument.
        Set the flag on the newly created history item. Also eliminated the use of
        autorelease on the added-items array.
        * History/WebHistoryInternal.h: Ditto.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Added code to check for failure
        and pass the argument in to WebHistory. Given that this function gets other
        data from the DocumentLoader, I think we should get rid of the KURL argument,
        but that's a separate issue so I don't do it in this patch.

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Fix call to Frame::selectionBounds in Tiger build.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein

        Via: https://bugs.webkit.org/show_bug.cgi?id=22433
        
        Rename RenderView::selectionRect() to selectionBounds(), to remove
        longstanding ambiguity with the base class selectionRect() method.
        Do the same on Frame for consistency with RenderView.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView selectionRect]):
        (-[WebHTMLView selectionImageRect]):

2008-11-20  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Dan Bernstein.

        WebKit should be using Device RGB colorspace everywhere for
        consistency.

        https://bugs.webkit.org/show_bug.cgi?id=22300

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _dragImageForURL:withLabel:]):
        (-[WebHTMLView _colorAsString:]):

2008-11-20  Darin Adler  <darin@apple.com>

        Earlier version reviewed by Justin Garcia.

        - part of fix for <rdar://problem/4108572> REGRESSION: Can't extend selection with shift-arrow in read only mode
          Also resolves <rdar://problem/5000134>.

        * WebView/WebHTMLView.mm: Removed some unused code, and made the Tiger workaround for bug 3789278
        be Tiger-only.
        (-[WebHTMLView resignFirstResponder]): Removed code setting unused resigningFirstResponder flag.
        (-[WebHTMLView _wantsKeyDownForEvent:]): Added. Returns YES.
        (-[WebHTMLView insertText:]): Don't try to insert text if the selection is not editable. We used
        to prevent even processing the input, but that's not practical since some commands need to work
        even in non-editable regions.

2008-11-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon Honeycutt.

        Move some frame/page checking code down to the base class.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView start]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _createPlugin]):

2008-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Test: plugins/netscape-plugin-setwindow-size-2.html
        
        Fix bug where NPP_SetWindow wasn't getting called for some plug-ins.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView updateAndSetWindow]):
        Don't bail if the drawing model is not the CA drawing model. Remove some code 
        that was doing the wrong thing.

2008-11-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22345
        Define ScriptValue as a thin container for a JSC::Value*.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

2008-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6383762> WebKit r38340 crash on key press in plugin
        
        Set the value to 0 before calling NPP_GetValue, in case the plug-in returns NPERR_NO_ERROR but does not 
        update the value.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):

2008-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make sure to copy the MIME type.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):

2008-11-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        First step toward fixing <rdar://problem/6263293> WebScriptDebugDelegate
        should use intptr_t for sourceId, not int
        
        Added a conditional typedef (currently disabled) to switch sourceId to
        intptr_t in non-Tiger, non-Leopard builds.

        * DefaultDelegates/WebDefaultScriptDebugDelegate.m:
        (-[WebDefaultScriptDebugDelegate webView:didParseSource:fromURL:sourceId:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:willExecuteStatement:sourceId:line:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
        (-[WebDefaultScriptDebugDelegate webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        * WebView/WebScriptDebugDelegate.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::sourceParsed):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):

2008-11-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22331
          <rdar://problem/6381657> REGRESSION: Contextual menu no longer has an "Inspect Element" item

        * WebView/WebUIDelegatePrivate.h: Reorder new enum values after existing
        ones.

2008-11-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        Fix for <rdar://problem/6373102> REGRESSION (r36919): In a new mail 
        message, the caret appears in message body by default

        This fixes a regression caused by http://trac.webkit.org/changeset/36919. 
        That change was too sweeping; we do not want to 
        unconditionally set the page to be active, but we can be looser 
        than the original constraints. This patch set the window active if 
        the first responder is or is a descendant of the main frame's frame 
        view.

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

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22337
        Enable workers by default

        * Configurations/WebKit.xcconfig: Define ENABLE_WORKERS (change from ENABLE_WORKER_THREADS,
        which was accidentally committed before).

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try to fix Mac build.

        * WebView/WebScriptDebugDelegate.mm:

2008-11-17  Pierre-Olivier Latour  <pol@apple.com>

        Reviewed by Sam Weinig.

        Added SPI to allow pausing a running CSS transition or animation
        at a given time for testing purposes.

        https://bugs.webkit.org/show_bug.cgi?id=21261

        * WebView/WebFrame.mm:
        (-[WebFrame _pauseAnimation:onNode:atTime:]):
        (-[WebFrame _pauseTransitionOfProperty:onNode:atTime:]):
        * WebView/WebFramePrivate.h:

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for JavaScriptCore renames.

        * ForwardingHeaders/runtime/Completion.h: Copied from ForwardingHeaders/runtime/Interpreter.h.
        * ForwardingHeaders/runtime/Interpreter.h: Removed.
        * WebView/WebScriptDebugDelegate.mm:

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Use DEFINE_STATIC_LOCAL for static RetainPtr<T>

        * Misc/WebNSPasteboardExtras.mm: Use DEFINE_STATIC_LOCAL
        (+[NSPasteboard _web_writableTypesForURL]):
        (_createWritableTypesForImageWithoutArchive): Created so accessor has one line initialization
        (_writableTypesForImageWithoutArchive): Use create function for one line initialization
        (_createWritableTypesForImageWithArchive): Created so accessor has one line initialization
        (_writableTypesForImageWithArchive): Use create function for one line initialization
        * WebCoreSupport/WebPasteboardHelper.mm: Use DEFINE_STATIC_LOCAL
        (WebPasteboardHelper::insertablePasteboardTypes):
        * WebView/WebHTMLRepresentation.mm: Use DEFINE_STATIC_LOCAL
        (+[WebHTMLRepresentation supportedMIMETypes]):
        (+[WebHTMLRepresentation supportedNonImageMIMETypes]):
        (+[WebHTMLRepresentation supportedImageMIMETypes]):

2008-11-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22295
          track which history items are from page load failures

        * History/WebHistoryItem.mm: Added lastVisitWasFailureKey.
        (-[WebHistoryItem initFromDictionaryRepresentation:]): Set the lastVisitWasFailure
        flag in the history item if the dictionary had lastVisitWasFailureKey true.
        (-[WebHistoryItem dictionaryRepresentation]): Set the lastVisitWasFailureKey boolean
        in the dictionary if the history item had the lastVisitWasFailure flag.
        (-[WebHistoryItem lastVisitWasFailure]): Added.

        * History/WebHistoryItemInternal.h: Moved include of WebBackForwardList here from
        WebHistoryItemPrivate.h; removed other unneeded includes.

        * History/WebHistoryItemPrivate.h: Added lastVisitWasFailure method.
        Removed unneeded includes.

        * Misc/WebNSDictionaryExtras.h: Added _webkit_boolForKey.
        * Misc/WebNSDictionaryExtras.m:
        (-[NSDictionary _webkit_boolForKey:]): Added.

2008-11-14  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 
        exit-time destructor. Update code that was changed to fix this issue that ran 
        into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference 
        in gcc build 5465). Also typdefs for template types needed to be added in some 
        cases so the type could make it through the macro successfully.

        Basically code of the form:
        static T m;
        becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Also any code of the form:
        static T& m = *new T;
        also becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        * ForwardingHeaders/wtf/StdLibExtras.h: Added.
        * History/WebBackForwardList.mm:
        (backForwardLists):
        * History/WebHistoryItem.mm:
        (historyItemWrappers):
        * Misc/WebStringTruncator.m:
        (fontFromNSFont):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (streams):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2008-11-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - <rdar://problem/6234333> Implement action methods for setting and clearing character-level directionality
        - part of <rdar://problem/6234337> Add a Text Direction menu to the default context menu when appropriate

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory contextMenuItemTagTextDirectionMenu]): Added.
        * WebView/WebFrame.mm:
        (core): Added a convertor from WebTextDirectionSubmenuInclusionBehavior
        to WebCore::TextDirectionSubmenuInclusionBehavior.
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:
        Added makeTextWritingDirectionLeftToRight:,
        makeTextWritingDirectionNatural: and
        makeTextWritingDirectionRightToLeft: using the WEBCORE_COMMAND macro.
        * WebView/WebPreferenceKeysPrivate.h:
        Added WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set the default Text Direction
        submenu inclusion behavior to never include.
        (-[WebPreferences textDirectionSubmenuInclusionBehavior]): Added this
        accessor.
        (-[WebPreferences setTextDirectionSubmenuInclusionBehavior:]): Ditto.
        * WebView/WebPreferencesPrivate.h: Defined the
        WebTextDirectionSubmenuInclusionBehavior enum and declared
        accessors.
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Added code to transfer
        the Text Direction submenu inclusion behavior preference to WebCore
        settings.

2008-11-14  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22222
          selectKeyViewPrecedingView: with document view that can't be first responder
          makes WebFrameView be first responder

        * WebView/WebFrameView.mm: (-[WebFrameView becomeFirstResponder]):
        Moved the acceptsFirstResponder special case inside the if statement so it won't
        run in the "selecting previous" case. Also removed the "just before shipping Tiger"
        code that doesn't need to be here any more.

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

        Fix the build.

        Don't use NSPICTPboardType on systems where it is deprecated.  The system will take care of converting
        from this format to a format that we can understand.

        * WebCoreSupport/WebPasteboardHelper.mm:
        (WebPasteboardHelper::insertablePasteboardTypes):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]):
        (+[WebHTMLView _insertablePasteboardTypes]):
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):

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

        fixed <rdar://problem/6361578> Web Kit UI strings: a few edits

        Reviewed by Tim Hatcher

        * Misc/WebKitErrors.m:
        "Cannot show content with specified mime type" -> "Content with specified MIME type can't be shown"
        "Cannot show URL" -> "The URL can't be shown"
        "Cannot find plug-in" -> "The plug-in can't be found"
        "Cannot load plug-in" -> "The plug-in can't be loaded"
        
        * Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/info.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib: Added.
        * Panels/English.lproj/WebAuthenticationPanel.nib/objects.nib: Removed.
        Changed placeholder fine print in the nib to match one of the two strings it might be replaced by.
        This automagically updated the nib to a newer format, hence the objects -> keyedobjects change.
        I could have changed the placeholder fine print to be empty but this lets localizers understand
        the dialog layout better.
        
        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        "you need to log in" -> "you must log in"
        "Your log-in information" -> "Your login information"
        "The name or password entered" -> "The user name or password you entered"
        "Please try again." -> "Make sure you're entering them correctly, and then try again."        

2008-11-12  Stephanie Lewis  <slewis@apple.com>

        Fix Mac build.        

        * Panels/WebAuthenticationPanel.m:

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

        fixed <rdar://problem/3839110> Authentication dialogs talk about passwords being sent "in the clear"

        Reviewed by Tim Hatcher

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        use "unencrypted" instead of "in the clear". Also, use the "Your log-in information
        will be sent securely" version when the receiving server is https, regardless of
        whether it uses basic or digest authentication.

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

        Reviewed by Mark Rowe.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22223
          <rdar://problem/6366864> REGRESSION(r38245): "View Source" crashes the browser

        * WebView/WebFrameView.mm: (-[WebFrameView viewDidMoveToWindow]):
        Add missing null check.

2008-11-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Fix stupid bug.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):

2008-11-10  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Move _web_encodingForResource from WebKit into WebCore and change return type

        This change is needed to implement NSAPI in WebCore for Mac, see:

        https://bugs.webkit.org/show_bug.cgi?id=21427


        * Misc/WebKitNSStringExtras.m:
        (+[NSString _web_encodingForResource:]):

2008-11-10  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Moved the implementation of _webkit_isCaseInsensitiveEqualToString to
        WebCore's WebCoreNSStringExtras as _stringIsCaseInsensitiveEqualToString.

        This change is needed to implement NSAPI in WebCore for Mac, see:

        https://bugs.webkit.org/show_bug.cgi?id=21427

        * Misc/WebKitNSStringExtras.m:
        (-[NSString _webkit_isCaseInsensitiveEqualToString:]):

2008-11-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        WebKit/mac part of adding a master volume control for media elements in a WebView

        * WebView/WebView.mm:
        (-[WebView setMediaVolume:]): Added.
        (-[WebView mediaVolume]): Added.
        * WebView/WebViewPrivate.h:

2008-11-11  Aaron Golden  <agolden@apple.com>

        Bug 22134: -[WebHistoryItem dictionaryRepresentation] accesses past the end of a vector

        <https://bugs.webkit.org/show_bug.cgi?id=22134>

        Reviewed by Geoff Garen.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        (-[WebHistoryItem dictionaryRepresentation]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Move renewGState to the base class.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView renewGState]):
        * Plugins/WebNetscapePluginView.mm:

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Move start, stop and all the related methods down to WebBaseNetscapePluginView.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView updateAndSetWindow]):
        (-[WebBaseNetscapePluginView addWindowObservers]):
        (-[WebBaseNetscapePluginView removeWindowObservers]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView stop]):
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]):
        (-[WebBaseNetscapePluginView viewWillMoveToSuperview:]):
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]):
        (-[WebBaseNetscapePluginView viewWillMoveToHostWindow:]):
        (-[WebBaseNetscapePluginView viewDidMoveToHostWindow]):
        (-[WebBaseNetscapePluginView windowWillClose:]):
        (-[WebBaseNetscapePluginView windowBecameKey:]):
        (-[WebBaseNetscapePluginView windowResignedKey:]):
        (-[WebBaseNetscapePluginView windowDidMiniaturize:]):
        (-[WebBaseNetscapePluginView windowDidDeminiaturize:]):
        (-[WebBaseNetscapePluginView loginWindowDidSwitchFromUser:]):
        (-[WebBaseNetscapePluginView loginWindowDidSwitchToUser:]):
        (-[WebBaseNetscapePluginView preferencesHaveChanged:]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Move rightMouseDown, rightMouseUp and sendActivateEvent to the base plugin view. 
        Add stubs for createPlugin, loadStream, shouldStop and destroyPlugin.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView windowFocusChanged:]):
        (-[WebBaseNetscapePluginView createPlugin]):
        (-[WebBaseNetscapePluginView loadStream]):
        (-[WebBaseNetscapePluginView destroyPlugin]):
        (-[WebBaseNetscapePluginView sendActivateEvent:]):
        (-[WebBaseNetscapePluginView rightMouseDown:]):
        (-[WebBaseNetscapePluginView rightMouseUp:]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView windowFocusChanged:]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Factor plug-in type specific code out to three new methods, createPlugin, destroyPlugin and loadStream.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        (-[WebNetscapePluginView loadStream]):
        (-[WebNetscapePluginView start]):
        (-[WebNetscapePluginView shouldStop]):
        (-[WebNetscapePluginView destroyPlugin]):
        (-[WebNetscapePluginView stop]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move even more code down to WebBaseNetscapePluginView, get rid of some unnecessary methods.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView focusChanged]):
        (-[WebBaseNetscapePluginView visibleRect]):
        (-[WebBaseNetscapePluginView acceptsFirstResponder]):
        (-[WebBaseNetscapePluginView setHasFocus:]):
        (-[WebBaseNetscapePluginView becomeFirstResponder]):
        (-[WebBaseNetscapePluginView resignFirstResponder]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView focusChanged]):
        (-[WebNetscapePluginView tellQuickTimeToChill]):
        (-[WebNetscapePluginView updateAndSetWindow]):
        (-[WebNetscapePluginView start]):
        (-[WebNetscapePluginView stop]):
        (-[WebNetscapePluginView viewWillMoveToWindow:]):
        (-[WebNetscapePluginView createPluginScriptableObject]):
        (-[WebNetscapePluginView pluginView:receivedData:]):
        (-[WebNetscapePluginView pluginView:receivedError:]):
        (-[WebNetscapePluginView pluginViewFinishedLoading:]):
        (-[WebNetscapePluginView inputContext]):
        (-[WebNetscapePluginView hasMarkedText]):
        (-[WebNetscapePluginView insertText:]):
        (-[WebNetscapePluginView markedRange]):
        (-[WebNetscapePluginView selectedRange]):
        (-[WebNetscapePluginView setMarkedText:selectedRange:]):
        (-[WebNetscapePluginView unmarkText]):
        (-[WebNetscapePluginView validAttributesForMarkedText]):
        (-[WebNetscapePluginView attributedSubstringFromRange:]):
        (-[WebNetscapePluginView characterIndexForPoint:]):
        (-[WebNetscapePluginView doCommandBySelector:]):
        (-[WebNetscapePluginView firstRectForCharacterRange:]):
        (-[WebNetscapePluginView _viewHasMoved]):
        (-[WebNetscapePluginView _redeliverStream]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Move timer handling code down to WebBaseNetscapePluginView.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView stopTimers]):
        (-[WebBaseNetscapePluginView startTimers]):
        (-[WebBaseNetscapePluginView restartTimers]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Move a bunch of methods and ivars up to WebBaseNetscapePluginView.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView dealloc]):
        (-[WebBaseNetscapePluginView finalize]):
        (-[WebBaseNetscapePluginView removeTrackingRect]):
        (-[WebBaseNetscapePluginView resetTrackingRect]):
        (-[WebBaseNetscapePluginView dataSource]):
        (-[WebBaseNetscapePluginView webFrame]):
        (-[WebBaseNetscapePluginView webView]):
        (-[WebBaseNetscapePluginView currentWindow]):
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::windowFocusChanged):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebNetscapePluginView sendActivateEvent:]):
        (-[WebNetscapePluginView restartTimers]):
        (-[WebNetscapePluginView setHasFocus:]):
        (-[WebNetscapePluginView mouseDown:]):
        (-[WebNetscapePluginView mouseUp:]):
        (-[WebNetscapePluginView mouseEntered:]):
        (-[WebNetscapePluginView mouseExited:]):
        (-[WebNetscapePluginView handleMouseMoved:]):
        (-[WebNetscapePluginView mouseDragged:]):
        (-[WebNetscapePluginView scrollWheel:]):
        (-[WebNetscapePluginView keyUp:]):
        (-[WebNetscapePluginView keyDown:]):
        (-[WebNetscapePluginView flagsChanged:]):
        (-[WebNetscapePluginView updateAndSetWindow]):
        (-[WebNetscapePluginView setWindowIfNecessary]):
        (-[WebNetscapePluginView start]):
        (-[WebNetscapePluginView stop]):
        (-[WebNetscapePluginView isStarted]):
        (-[WebNetscapePluginView dealloc]):
        (-[WebNetscapePluginView finalize]):
        (-[WebNetscapePluginView drawRect:]):
        (-[WebNetscapePluginView windowBecameKey:]):
        (-[WebNetscapePluginView preferencesHaveChanged:]):
        (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        (-[WebNetscapePluginView _viewHasMoved]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker and Mark Rowe.

        Add a WebHostedNetscapePluginView class.
        
        * Plugins/WebHostedNetscapePluginView.h: Added.
        * Plugins/WebHostedNetscapePluginView.mm: Added.

        * Plugins/WebNetscapePluginPackage.h:
        Use the right define.
        
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase removePluginInstanceViewsFor:]):
        Check for WebBaseNetscapePluginView.
        
        (-[WebPluginDatabase destroyAllPluginInstanceViews]):
        Check for WebBaseNetscapePluginView.
        
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::NetscapePluginWidget):
        (NetscapePluginWidget::handleEvent):
        Use WebBaseNetscapePluginView.
        
        (netscapePluginViewClass):
        New function that returns the right netscape plugin view type to use.
        
        (WebFrameLoaderClient::createPlugin):
        Get the right class.
        
        * WebKitPrefix.h:
        Prefix the #define with WTF_.
        
        * WebView/WebHTMLView.mm:
        (-[NSArray _web_makePluginViewsPerformSelector:withObject:]):
        Check for WebBaseNetscapePluginView.
        
        * WebView/WebView.mm:
        Remove an unnecessary include.

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't use individual ivars for each plug-in vtable function. Instead, get them from the plugin package.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebNetscapePluginView setWindowIfNecessary]):
        (-[WebNetscapePluginView start]):
        (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
        (-[WebNetscapePluginView createPluginScriptableObject]):
        (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebNetscapePluginView loadPluginRequest:]):
        (-[WebNetscapePluginView _createPlugin]):
        (-[WebNetscapePluginView _destroyPlugin]):
        (-[WebNetscapePluginView _printedPluginBitmap]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Add a new WebBaseNetscapePluginView class.

        * Plugins/WebBaseNetscapePluginView.h: Added.
        * Plugins/WebBaseNetscapePluginView.mm: Added.
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
        (-[WebBaseNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebBaseNetscapePluginView handleMouseMoved:]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView cut:]):
        (-[WebNetscapePluginView copy:]):
        (-[WebNetscapePluginView paste:]):
        (-[WebNetscapePluginView selectAll:]):
        (-[WebNetscapePluginView start]):
        (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):

2008-11-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.
        
        Rename WebBaseNetscapePluginView to WebNetscapePluginView.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (WebNetscapePluginStream::setPlugin):
        * Plugins/WebBaseNetscapePluginView.h: Removed.
        * Plugins/WebBaseNetscapePluginView.mm: Removed.
        * Plugins/WebNetscapePluginEventHandler.h:
        (WebNetscapePluginEventHandler::WebNetscapePluginEventHandler):
        * Plugins/WebNetscapePluginEventHandler.mm:
        (WebNetscapePluginEventHandler::create):
        * Plugins/WebNetscapePluginEventHandlerCarbon.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::WebNetscapePluginEventHandlerCarbon):
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa):
        * Plugins/WebNetscapePluginView.h: Copied from mac/Plugins/WebBaseNetscapePluginView.h.
        * Plugins/WebNetscapePluginView.mm: Copied from mac/Plugins/WebBaseNetscapePluginView.mm.
        (+[WebNetscapePluginView setCurrentPluginView:]):
        (+[WebNetscapePluginView currentPluginView]):
        (-[WebNetscapePluginView loadPluginRequest:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase removePluginInstanceViewsFor:]):
        (-[WebPluginDatabase destroyAllPluginInstanceViews]):
        * Plugins/npapi.mm:
        (pluginViewForInstance):
        (NPN_MarkedTextAbandoned):
        (NPN_MarkedTextSelectionChanged):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::NetscapePluginWidget):
        (NetscapePluginWidget::handleEvent):
        (WebFrameLoaderClient::createPlugin):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]):
        (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]):
        (-[NSArray _web_makePluginViewsPerformSelector:withObject:]):
        * WebView/WebView.mm:

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

        Reviewed by John Sullivan.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15063
          <rdar://problem/5452227> REGRESSION (r25151): Switching to a tab waiting
          for first data does not clear the window

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::frameLoadCompleted): Added comments, and got rid of
        a local variable to make this code match the code in the function below
        more closely.
        (WebFrameLoaderClient::provisionalLoadStarted): Added comments.

        * WebView/WebFrame.mm:
        (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]): Improved comment.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollView]): Tweaked formatting.
        (-[WebFrameView initWithFrame:]): Ditto.
        (-[WebFrameView setFrameSize:]): Added a comment and tweaked formatting.
        (-[WebFrameView viewDidMoveToWindow]): Added. This is the change that fixes
        the bug. Calls setDrawsBackground:YES as appropriate since moving the view
        out of the window to switch to another view disrupts the special technique
        for showing the old page during the start of loading. This is the identical
        reason for the setFrameSize: method above, and the code is almost the same.

2008-11-08  David Kilzer  <ddkilzer@apple.com>

        Bug 22137: PLATFORM(MAC) build broken with HAVE(ACCESSIBILITY) disabled

        <https://bugs.webkit.org/show_bug.cgi?id=22137>

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _accessibilityTree]): Return nil if HAVE(ACCESSIBILITY)
        is false.

2008-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - WebKit/mac part of adding WebPreferences for controlling databases and local storage

        * WebView/WebPreferenceKeysPrivate.h: Added
        WebKitDatabasesEnabledPreferenceKey and
        WebKitLocalStorageEnabledPreferenceKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Made databases and local storage enabled
        by default.
        (-[WebPreferences databasesEnabled]): Added.
        (-[WebPreferences setDatabasesEnabled:]): Added.
        (-[WebPreferences localStorageEnabled]): Added.
        (-[WebPreferences setLocalStorageEnabled:]): Added.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Transfer the databases
        and local storage preferences to WebCore settings.

2008-11-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=22115
        NPN_HasPropertyUPP and NPN_HasMethodUPP entries in NPNetscapeFuncs are NULL
        
        Initialize the browser funcs correctly.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Backed out r38189 (and r38203) for Xcode 3.0.

        Apparently older versions of gcc have issues with this patch.
        Backing out a second time until the issues are resolved.

2008-11-06  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Move the remaining files in the kjs subdirectory of JavaScriptCore to
        a new parser subdirectory, and remove the kjs subdirectory entirely.

        The header SavedBuiltins.h was removed in r32587, so it no longer needs
        a forwarding header.

        * ForwardingHeaders/kjs: Removed.
        * ForwardingHeaders/kjs/SavedBuiltins.h: Removed.

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD WAS NOT BROKEN: Rolling r38189 back in.

        Please perform a clean build if you see crashes.

2008-11-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Backed out r38189 since it apparently broke the world.

2008-11-06  John Sullivan  <sullivan@apple.com>

        Fixed problem with switching between text-only zoom and full-content zoom
        
        There were two booleans tracking whether zoom was text-only, one in WebCore settings
        and one in WebViewPrivate. Fixed by eliminating the one in WebViewPrivate.

        Reviewed by Adam Roben

        * WebView/WebView.mm:
        remove declaration of zoomMultiplierIsTextOnly instance variable in WebViewPrivate
        (-[WebViewPrivate init]):
        removed initialization of zoomMultiplierIsTextOnly
        (-[WebView textSizeMultiplier]):
        call [self _realZoomMultiplierIsTextOnly] instead of accessing WebViewPrivate instance variable
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        update WebCore settings rather than WebViewPrivate instance variable
        (-[WebView _zoomMultiplier:]):
        call [self _realZoomMultiplierIsTextOnly] instead of accessing WebViewPrivate instance variable
        (-[WebView _realZoomMultiplierIsTextOnly]):
        return value from WebCore settings instead of accessing WebViewPrivate instance variable
        (-[WebView pageSizeMultiplier]):
        call [self _realZoomMultiplierIsTextOnly] instead of accessing WebViewPrivate instance variable

2008-11-06  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.
        
        Bug 21810: Remove use of static C++ objects that are destroyed at exit time (destructors)
        https://bugs.webkit.org/show_bug.cgi?id=21810

        * History/WebBackForwardList.mm:
        (backForwardLists): Changed to leak an object to avoid an exit-time destructor.
        * History/WebHistoryItem.mm:
        (historyItemWrappers): Ditto
        * Misc/WebStringTruncator.m:
        (fontFromNSFont): Ditto
        * Plugins/WebBaseNetscapePluginStream.mm:
        (streams): Ditto
        * WebView/WebView.mm:
        (aeDescFromJSValue): Ditto

2008-11-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark Rowe.

        Keep track of which plug-in host architecture would be needed for a given plug-in package.
        
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage _initWithPath:]):
        * WebKitPrefix.h:

2008-11-05  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Correct forwarding headers for files moved to the runtime subdirectory
        of JavaScriptCore and remove unused forwarding headers.

        * ForwardingHeaders/kjs/collector.h: Removed.
        * ForwardingHeaders/kjs/identifier.h: Removed.
        * ForwardingHeaders/kjs/interpreter.h: Removed.
        * ForwardingHeaders/kjs/lookup.h: Removed.
        * ForwardingHeaders/kjs/operations.h: Removed.
        * ForwardingHeaders/kjs/protect.h: Removed.
        * ForwardingHeaders/runtime/Interpreter.h: Copied from ForwardingHeaders/kjs/interpreter.h.
        * WebView/WebScriptDebugDelegate.mm:

2008-11-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Remove WebPlugInStreamLoaderDelegate.h
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebPlugInStreamLoaderDelegate.h: Removed.

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

        - Tiger build fix

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

2008-11-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Don't leak the CALayer.
        
        * Plugins/WebBaseNetscapePluginView.h:
        Make the layer a RetainPtr.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView start]):
        
        (-[WebBaseNetscapePluginView stop]):
        Make sure to clear out the layer here.

2008-11-04  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove the unused kjs/dtoa.h forwarding header.

        * ForwardingHeaders/kjs/dtoa.h: Removed.

2008-11-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        More cleanup. Make a bunch of instance variables RetainPtrs.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView visibleRect]):
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebBaseNetscapePluginView sendActivateEvent:]):
        (-[WebBaseNetscapePluginView sendDrawRectEvent:]):
        (-[WebBaseNetscapePluginView stopTimers]):
        (-[WebBaseNetscapePluginView restartTimers]):
        (-[WebBaseNetscapePluginView setHasFocus:]):
        (-[WebBaseNetscapePluginView mouseDown:]):
        (-[WebBaseNetscapePluginView mouseUp:]):
        (-[WebBaseNetscapePluginView mouseEntered:]):
        (-[WebBaseNetscapePluginView mouseExited:]):
        (-[WebBaseNetscapePluginView handleMouseMoved:]):
        (-[WebBaseNetscapePluginView mouseDragged:]):
        (-[WebBaseNetscapePluginView scrollWheel:]):
        (-[WebBaseNetscapePluginView keyUp:]):
        (-[WebBaseNetscapePluginView keyDown:]):
        (-[WebBaseNetscapePluginView flagsChanged:]):
        (-[WebBaseNetscapePluginView cut:]):
        (-[WebBaseNetscapePluginView copy:]):
        (-[WebBaseNetscapePluginView paste:]):
        (-[WebBaseNetscapePluginView selectAll:]):
        (-[WebBaseNetscapePluginView didStart]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView stop]):
        (-[WebBaseNetscapePluginView dataSource]):
        (-[WebBaseNetscapePluginView pluginPackage]):
        (-[WebBaseNetscapePluginView setPluginPackage:]):
        (-[WebBaseNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
        (-[WebBaseNetscapePluginView fini]):
        (-[WebBaseNetscapePluginView dealloc]):
        (-[WebBaseNetscapePluginView pluginView:receivedError:]):
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        (-[WebBaseNetscapePluginView userAgent]):
        (-[WebBaseNetscapePluginView getVariable:value:]):
        (-[WebBaseNetscapePluginView setVariable:value:]):
        (-[WebBaseNetscapePluginView _createPlugin]):
        (-[WebBaseNetscapePluginView _redeliverStream]):

2008-11-04  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Cleanup global history a tad.  

        Used to _addItemForURL always create a new item and merge it with a previous item if one existed.

        It is more efficient and less complicated to update the previous item if one exists.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:]):
        (-[WebHistory _visitedURL:withTitle:]):  Instead of calling the general purpose [WebHistoryPrivate addItem:]
          with a new history item, call the new special purposed visitedURL:withTitle:
        * History/WebHistoryInternal.h:

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem _visitedWithTitle:]): Call "visited()" on the WebCore history item with the pertinent info.
        * History/WebHistoryItemInternal.h:

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory):

2008-11-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=22065

        Only create the plug-in stream loader when the stream is started. 
        
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (WebNetscapePluginStream::start):

2008-11-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.
        
        https://bugs.webkit.org/show_bug.cgi?id=22065
        
        Remove some old, unused plug-in code.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView setVariable:value:]):

2008-11-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=21941

        Rename absolutePosition() to localToAbsolute(), and add the ability
        to optionally take transforms into account (which will eventually be the
        default behavior).

        * WebView/WebRenderNode.mm:
        (copyRenderNode):

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22030
        Make EventNames usable from multiple threads

        * WebView/WebHTMLView.mm:
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):
        Access event names via eventNames() function.

2008-11-04  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Delete a forwarding header for a file that no longer exists.

        * ForwardingHeaders/kjs/string_object.h: Removed.

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * ForwardingHeaders/kjs/JSLock.h: Removed.
        * ForwardingHeaders/kjs/SymbolTable.h: Removed.
        * ForwardingHeaders/runtime/JSLock.h: Copied from ForwardingHeaders/kjs/JSLock.h.
        * ForwardingHeaders/runtime/SymbolTable.h: Copied from ForwardingHeaders/kjs/SymbolTable.h.
        * Misc/WebCoreStatistics.mm:
        * Plugins/WebBaseNetscapePluginStream.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebView.mm:

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

        Fix the 64-bit build.

        Pull the frequently-made check for drawingModel == NPDrawingModelQuickDraw out into a
        helper function to avoid #ifdef'ing all of the new places that this check is made.

        A few other #ifdef's are moved inside functions to allow their call sites to remain #ifdef-free,
        and we rely on the compiler to optimise out the check (which will always be false in 64-bit) instead.

        * Plugins/WebBaseNetscapePluginView.mm:
        (isDrawingModelQuickDraw):
        (-[WebBaseNetscapePluginView fixWindowPort]):
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebBaseNetscapePluginView updateAndSetWindow]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView tellQuickTimeToChill]):
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]):
        (-[WebBaseNetscapePluginView _viewHasMoved]):

2008-11-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin Decker.
        
        - fix release build (and unitialized variable for CG drawing model!)

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]): initialize portState in all code paths

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=22053
        
        This patch adds initial support for the NPDrawingModelCoreAnimation drawing model. 
                
        * Plugins/WebBaseNetscapePluginView.h: Added _layer ivar.
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]): ASSERT this is not a plug-in using NPDrawingModelCoreAnimation.
        (-[WebBaseNetscapePluginView restorePortState:]): Ditto.
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]): Slightly refactored a small block of code which with the PortState.
        Plug-ins using the NPDrawingModelCoreAnimation drawing model have no PortState. 
        (-[WebBaseNetscapePluginView isNewWindowEqualToOldWindow]): ASSERT this is not a plug-in using NPDrawingModelCoreAnimation
        (-[WebBaseNetscapePluginView updateAndSetWindow]):  Ditto.
        (-[WebBaseNetscapePluginView setWindowIfNecessary]): Ditto.
        (-[WebBaseNetscapePluginView start]): If the plug-in is a plug-in using the Core Animation model, request a layer from it.
        (-[WebBaseNetscapePluginView drawRect:]): Return early for NPDrawingModelCoreAnimation plug-ins.
        (-[WebBaseNetscapePluginView getVariable:value:]): Tell plug-ins running on post-Tiger systems WebKit supports
         NPDrawingModelCoreAnimation.
        (-[WebBaseNetscapePluginView setVariable:value:]): Added the new NPDrawingModelCoreAnimation case, which initializes drawingMode.
        (-[WebBaseNetscapePluginView _viewHasMoved]): Reworded the conditional call to updateAndSetWindow to be specific to 
        CoreGraphics and QuickDraw plug-ins.

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console
        <https://bugs.webkit.org/show_bug.cgi?id=22019>

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):

2008-10-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - WebKit/mac part of <rdar://problem/6334641> Add WebView SPI for disabling document.cookie

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

2008-10-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        [WebHistory setLastVisitedTimeInterval:forItem] was internal to WebHistory.mm and 
        completely unused.  Nuke it!

        * History/WebHistory.mm:

2008-10-31  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/4361197> Screen Reader's Item Chooser shows scroll area for WebKit Application window

        If a WebFrameView does not allow scrolling, its scrollbars should not appear in the accessibility hierarchy.

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView accessibilityIsIgnored]):

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

        Reviewed by Jon Homeycutt.

        Explicitly default to building for only the native architecture in debug and release builds.

        * Configurations/DebugRelease.xcconfig:

2008-10-30  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Create a debugger directory in JavaScriptCore and move the relevant
        files to it.

        * ForwardingHeaders/debugger: Added.
        * ForwardingHeaders/debugger/DebuggerCallFrame.h: Copied from ForwardingHeaders/kjs/DebuggerCallFrame.h.
        * ForwardingHeaders/kjs/DebuggerCallFrame.h: Removed.
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:

2008-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (WebNetscapePluginStream::~WebNetscapePluginStream):
        (WebNetscapePluginStream::start):

2008-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove an unused forward class declaration.
        
        * Plugins/WebBaseNetscapePluginView.h:

2008-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove WebBaseNetscapePluginViewInternal.h and WebBaseNetscapePluginViewPrivate.h.

        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginViewInternal.h: Removed.
        * Plugins/WebBaseNetscapePluginViewPrivate.h: Removed.
        * Plugins/WebNetscapePluginEventHandler.mm:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        * Plugins/npapi.mm:
        * WebView/WebHTMLView.mm:

2008-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove WebNetscapePluginEmbeddedView, it adds nothing extra now. 
        
        Remove WebNetscapePlugInStreamLoaderClient since WebNetscapePluginStream is the client now.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebKitPluginContainerView.h:
        * Plugins/WebNetscapePluginEmbeddedView.h: Removed.
        * Plugins/WebNetscapePluginEmbeddedView.mm: Removed.
        * Plugins/WebNetscapePluginEventHandler.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::NetscapePluginWidget):
        (NetscapePluginWidget::handleEvent):
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebNetscapePlugInStreamLoaderClient.h: Removed.
        * WebCoreSupport/WebNetscapePlugInStreamLoaderClient.mm: Removed.
        * WebView/WebHTMLView.mm:
        (-[NSArray _web_makePluginViewsPerformSelector:withObject:]):

2008-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove the WebBaseNetscapePluginStream Objective-C object.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::create):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginView:receivedResponse:]):
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):

2008-10-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=21952
        
        Address an outstanding FIXME by removing unused SPI

        * History/WebHistory.mm:
        (-[WebHistory _addItemForURL:title:]): Fold addItem: into this method

        * History/WebHistoryPrivate.h: Removed unused/unneccessary SPI

2008-10-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/5188560> REGRESSION: Spell checker doesn't clear spelling/grammar marker after error is marked as Ignored

        * WebView/WebHTMLView.mm: IgnoreSpelling is now a WebCore command.  That command handles
        calling back into WebKit to perform the cross platform work that was removed in this change.

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Move ForwardingHeaders to their correct location after the creation of
        the runtime directory in JavaScriptCore.

        * ForwardingHeaders/kjs/JSFunction.h: Removed.
        * ForwardingHeaders/kjs/JSObject.h: Removed.
        * ForwardingHeaders/kjs/JSString.h: Removed.
        * ForwardingHeaders/kjs/JSValue.h: Removed.
        * ForwardingHeaders/runtime: Added.
        * ForwardingHeaders/runtime/JSFunction.h: Copied from ForwardingHeaders/kjs/JSFunction.h.
        * ForwardingHeaders/runtime/JSObject.h: Copied from ForwardingHeaders/kjs/JSObject.h.
        * ForwardingHeaders/runtime/JSString.h: Copied from ForwardingHeaders/kjs/JSString.h.
        * ForwardingHeaders/runtime/JSValue.h: Copied from ForwardingHeaders/kjs/JSValue.h.
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebScriptDebugger.mm:
        * WebView/WebView.mm:

2008-10-28  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21880
        "files" string for multifile uploads needs to be localized

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

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

        Add WebInspector methods to enable the profiler.

        https://bugs.webkit.org/show_bug.cgi?id=21927

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector isJavaScriptProfilingEnabled]): Added. Calls InspectorController::profilerEnabled.
        (-[WebInspector setJavaScriptProfilingEnabled:]): Added. Call InspectorController's disableProfiler
        or enableProfiler methods.

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

        Rename a few methods related to attaching and detaching the debugger.

        * Rename attachDebugger to enableDebugger.
        * Rename detachDebugger to disableDebugger.
        * Rename the debuggerAttached getter to debuggerEnabled.

        Reviewed by Darin Adler.

        * WebInspector/WebInspector.mm:
        (-[WebInspector isDebuggingJavaScript]):
        (-[WebInspector startDebuggingJavaScript:]):
        (-[WebInspector stopDebuggingJavaScript:]):

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

        Reviewed by Maciej Stachowiak.

        Use the C++ stream object for JS requests as well.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView destroyStream:reason:]):

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

        Reviewed by Dan Bernstein.
        
        Use the C++ stream object in WebBaseNetscapePluginView. Use a HashSet of RefPtrs to keep track of the streams.
        
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::~WebNetscapePluginStream):
        (WebNetscapePluginStream::setPlugin):
        (WebNetscapePluginStream::startStream):
        (WebNetscapePluginStream::destroyStream):
        (WebNetscapePluginStream::destroyStreamWithReason):
        (WebNetscapePluginStream::cancelLoadAndDestroyStreamWithError):
        (WebNetscapePluginStream::deliverData):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView stop]):
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
        (-[WebBaseNetscapePluginView disconnectStream:]):
        (-[WebBaseNetscapePluginView dealloc]):
        (-[WebBaseNetscapePluginView pluginView:receivedResponse:]):
        (-[WebBaseNetscapePluginView pluginView:receivedData:]):
        (-[WebBaseNetscapePluginView pluginView:receivedError:]):
        (-[WebBaseNetscapePluginView pluginViewFinishedLoading:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):

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

        Reviewed by Dan Bernstein.
        
        Move code from dealloc and finalize to the WebNetscapePluginStream destructor.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::~WebNetscapePluginStream):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):

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

        Reviewed by Sam Weinig.

        Get rid of WebNetscapePlugInStreamLoaderClient, the plug-in stream is its own client.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginView:receivedError:]):
        (-[WebBaseNetscapePluginView pluginViewFinishedLoading:]):
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView destroyStream:reason:]):

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

        Reviewed by Darin Adler.

        Change the Obj-C init methods to simply call WebNetscapePluginStream::create.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::create):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithFrameLoader:]):
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):

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

        Reviewed by Kevin Decker.

        Convert more code over to C++.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::plugin):
        (WebNetscapePluginStream::setRequestURL):
        Convert to C++.

        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::start):
        (WebNetscapePluginStream::stop):
        Ditto.
        
        (WebNetscapePluginStream::startStreamWithResponse):
        Ditto.
        
        (-[WebBaseNetscapePluginStream startStreamWithResponse:]):
        Call the C++ version.
        
        (-[WebBaseNetscapePluginStream impl]):
        New accessor for the C++ class.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginView:receivedData:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        (-[WebBaseNetscapePluginView destroyStream:reason:]):
        Call the C++ methods.

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

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21759
        Layering violation: FileChooser should not depend on Document/Frame/Page

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runOpenPanel):

2008-10-24  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.
        
        * WebView/WebUIDelegate.h:

2008-10-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/5440917> Support NPN_Construct
        
        Set construct.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):

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

        Rubber-stamped by Tim Hatcher.

        <rdar://problem/6119711> Remove the dependency on Foundation's private __COCOA_FORMAL_PROTOCOLS__ define.

        * Misc/EmptyProtocolDefinitions.h:

2008-10-24  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        WebKit part of fix for <rdar://problem/5839256> FILE CONTROL: multi-file upload.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runOpenPanel):
        (-[WebOpenPanelResultListener chooseFilenames:]):
        * WebView/WebUIDelegate.h:

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

        Implement new InspectorClient methods to work with Settings.

        https://bugs.webkit.org/show_bug.cgi?id=21856

        Reviewed by Darin Adler.

        * WebCoreSupport/WebInspectorClient.h: Add the new methods and
        guard the ObjC parts of the header.

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

        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _convertValueToObjcValue:]):
        (-[WebScriptCallFrame exception]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (aeDescFromJSValue):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        Use JSValue* instead of JSValuePtr.

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

        Build fix.

        * Misc/WebKitErrors.m:
        (-[NSError _initWithPluginErrorCode:contentURL:pluginPageURL:pluginName:MIMEType:]):

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

        Reviewed by Anders Carlsson.

        Remove FrameLoaderClient::detachedFromParent4.  It is no longer used by any port.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2008-10-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        <rdar://problem/6277777> REGRESSION (r36954): XMLHttpRequest not working when
        certain WebView delegate actions are taken

        * WebView/WebFrame.mm: (-[WebFrame _attachScriptDebugger]): Don't accidentally create
        a window shell if there is none yet.

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

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Remove most uses of JSValue, which will be removed in a future patch.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        Use JSValuePtr instead of JSValue.
        * WebView/WebScriptDebugger.h: Removed declaration of JSValue.

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

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Tweak a little more to get closer to where we can make JSValuePtr a class.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _convertValueToObjcValue:]): Use JSValuePtr.
        (-[WebScriptCallFrame exception]): Ditto.
        (-[WebScriptCallFrame evaluateWebScript:]): Ditto. And noValue.
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger): Use new DebuggerCallFrame
        constructor that doesn't require explicitly passing an exception.
        * WebView/WebView.mm:
        (aeDescFromJSValue): Use JSValuePtr.
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]): Ditto.

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

        Reviewed by Sam Weinig.

        - WebKit/mac part of https://bugs.webkit.org/show_bug.cgi?id=21736
          Long-dead decoded image data make up for most of the object cache's memory use over time

        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]): In the primary web browser model, set the
        cache's dead decoded data deletion interval to 60 seconds.

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

        Reviewed by Jon Honeycutt.

        Fix a leak of a CFStringRef reported by the build bot.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]): Use a autoreleased
        NSString rather than manually releasing a CFStringRef when we're done with it.

2008-10-15  Kenneth Russell  <kenneth.russell@sun.com>

        Reviewed and landed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=21572
        
        Initialize pluginFunc.size to the correct size before calling NP_GetEntryPoints.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/6272508> Crash occurs after loading flash content at http://www.macrumors.com/

        Restore some code related to the CoreGraphics drawing model that was misplaced in r37131.

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

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

        Reviewed by Cameron Zwarich.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
        Start the debugger without reloading the inspected page

        * WebInspector/WebInspector.mm:
        (-[WebInspector startDebuggingJavaScript:]): Updated for rename.

2008-10-14  Maxime Britto  <britto@apple.com>

        Reviewed by Darin Adler.

        Added SPI to use WebCore's TextIterator with WebKit.

        * WebView/WebTextIterator.h: Added.
        * WebView/WebTextIterator.mm: Added.
        (-[WebTextIteratorPrivate dealloc]):
        (-[WebTextIterator dealloc]):
        (-[WebTextIterator initWithRange:]): Creates a TextIterator 
        instance
        (-[WebTextIterator advance]): Asks the iterator to advance() .
        (-[WebTextIterator currentNode]): Returns the current DOMNode from 
        the iterator
        (-[WebTextIterator currentText]): Returns the current text from the 
        iterator
        (-[WebTextIterator atEnd]): Indicated whether the iterator has 
        reached the end of the range.
        * WebView/WebView.h:
        * WebView/WebView.mm:
        (-[WebView textIteratorForRect:]): Returns a WebTextIterator with 
        the DOMRange contained in the rectangle given as a parameter.

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-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-13  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Mark Rowe.
        
        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default

        * Configurations/DebugRelease.xcconfig:

2008-10-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - rename _setAlwaysUseATSU to _setAlwaysUsesComplexTextCodePath and
          update it for the renamed WebCoreTextRenderer method; keep the old
          method around for clients that use it

        * WebView/WebView.mm:
        (+[WebView _setAlwaysUseATSU:]):
        (+[WebView _setAlwaysUsesComplexTextCodePath:]):
        * WebView/WebViewPrivate.h:

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

        Don't convert JavaScriptCore header include paths to WebKit paths. This was needed
        back when NPAPI and WebScriptObject migrated from JavaScriptCore. Also remove
        JavaScriptCore from the VPATH.

        Reviewed by Sam Weinig.

        * MigrateHeaders.make:

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21403
          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger): Update since DebuggerCallFrame is simpler now.

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

        Roll out r37427 because it causes an infinite recursion loading about:blank.

        https://bugs.webkit.org/show_bug.cgi?id=21476

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21403
          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger): Update since DebuggerCallFrame is simpler now.

2008-10-07  David Hyatt  <hyatt@apple.com>

        Move viewless WebKit methods that Safari needs from WebViewInternal to WebViewPrivate.

        Reviewed by Tim Hatcher

        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):
        (-[WebView _registerDraggedTypes]):
        (-[WebView _usesDocumentViews]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _initWithFrame:frameName:groupName:usesDocumentViews:]):
        (-[WebView isFlipped]):
        (-[WebView viewWillDraw]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2008-10-07  David Hyatt  <hyatt@apple.com>

        Fix crash in isFlipped.  Null check _private since isFlipped can get called from within AppKit
        machinery during teardown of the WebView.

        Reviewed by Adam Roben

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

2008-10-07  David Hyatt  <hyatt@apple.com>

        Make viewless WebKit update focused and active state when the window becomes and loses key.
        The focus controller has been patched to understand that in viewless mode it can recur down and
        update all of the frames, which is why this code works now when placed just on the WebView.

        Reviewed by Adam Roben

        * WebView/WebView.mm:
        (-[WebView addWindowObservers]):
        (-[WebView removeWindowObservers]):
        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewDidMoveToWindow]):
        (-[WebView _updateFocusedAndActiveState]):
        (-[WebView _windowDidBecomeKey:]):
        (-[WebView _windowDidResignKey:]):
        (-[WebView _windowWillOrderOnScreen:]):

2008-10-07  David Hyatt  <hyatt@apple.com>

        Make sure the parent visibility state is set up properly on the outermost ScrollView widget.
        This fixes the repainting issues with viewless WebKit on Mac.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2008-10-07  David Hyatt  <hyatt@apple.com>

        Make sure viewless Mac WebKit does a layout if needed before drawing.

        Reviewed by Sam Weinig

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

2008-10-07  David Hyatt  <hyatt@apple.com>

        Make sure observers get hooked up to watch for size changes in viewless WebKit mode.

        Reviewed by Sam Weinig

        * ChangeLog:
        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]):
        * WebView/WebView.mm:
        (-[WebView viewWillDraw]):
        (-[WebView _boundsChanged]):
        (-[WebView addSizeObservers]):
        (-[WebView viewDidMoveToWindow]):
        (-[WebView viewDidMoveToSuperview]):

2008-10-07  David Hyatt  <hyatt@apple.com>

        Make sure WebView listens for size changes and resizes the frame view in viewless mode.

        Reviewed by Sam Weinig

        * WebView/WebView.mm:
        (-[WebView addSizeObservers]):
        (-[WebView viewDidMoveToWindow]):
        (-[WebView viewDidMoveToSuperview]):

2008-10-06  David Hyatt  <hyatt@apple.com>

        Enable viewless Mac WebKit to paint some basic pages.
        
        Reviewed by Sam Weinig

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::windowResizerRect):
        (WebChromeClient::repaint):
        (WebChromeClient::screenToWindow):
        (WebChromeClient::windowToScreen):
        (WebChromeClient::platformWindow):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::forceLayoutForNonHTML):
        (WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebFrameLoaderClient::createFrame):
        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameView.mm:
        * WebView/WebFrameViewInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawSingleRect:]):
        (-[WebHTMLView drawRect:]):
        * WebView/WebView.mm:
        (-[WebView isFlipped]):
        (-[WebView _boundsChanged]):
        (-[WebView _mustDrawUnionedRect:singleRects:count:]):
        (-[WebView drawSingleRect:]):
        (-[WebView drawRect:]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView initWithFrame:frameName:groupName:]):
        (-[WebView _initWithFrame:frameName:groupName:usesDocumentViews:]):
        (-[WebView initWithCoder:]):
        (-[WebView removeSizeObservers]):
        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewWillMoveToSuperview:]):
        (-[WebView _usesDocumentViews]):
        * WebView/WebViewInternal.h:

2008-10-06  Kevin Decker  <kdecker@apple.com>

        Rubber-stamped by Anders Carlsson.

        Rename _webkit_applicationCacheDirectoryWithBundleIdentifier to _webkit_localCacheDirectoryWithBundleIdentifier.
        
        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.m:
        (+[NSString _webkit_localCacheDirectoryWithBundleIdentifier:]):
        * WebView/WebDataSource.mm:
        (-[WebDataSource _transferApplicationCache:]):
        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make WebNetscapePluginStream a WebCore::NetscapePlugInStreamLoaderClient.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::~WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::didReceiveResponse):
        (-[WebBaseNetscapePluginStream startStreamWithResponse:]):
        (WebNetscapePluginStream::wantsAllStreams):
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        (WebNetscapePluginStream::didFail):
        (-[WebBaseNetscapePluginStream destroyStreamWithError:]):
        (WebNetscapePluginStream::didFinishLoading):
        (-[WebBaseNetscapePluginStream finishedLoading]):
        (WebNetscapePluginStream::didReceiveData):
        (-[WebBaseNetscapePluginStream receivedData:]):

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Bring back the stop method. It was called through performSelector, which
        is why I couldn't find any references to it.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream stop]):

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More conversion and cleanup.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::startStream):
        (-[WebBaseNetscapePluginStream startStreamWithResponse:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fold initWithRequestURL into initWithRequest.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Change the init methods not to return nil on failures. (These failures never occur anyway)
        
        Use initWithRequest as the initializer, initWithRequestURL is going to be merged with it.
        
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Convert more methods over to C++.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::ownerForStream):
        (WebNetscapePluginStream::pluginCancelledConnectionError):
        (WebNetscapePluginStream::errorForReason):
        (-[WebBaseNetscapePluginStream errorForReason:]):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (WebNetscapePluginStream::cancelLoadAndDestroyStreamWithError):
        (-[WebBaseNetscapePluginStream cancelLoadAndDestroyStreamWithError:]):
        (WebNetscapePluginStream::deliverData):
        (WebNetscapePluginStream::deliverDataTimerFired):
        (WebNetscapePluginStream::deliverDataToFile):
        (-[WebBaseNetscapePluginStream finishedLoading]):
        (-[WebBaseNetscapePluginStream receivedData:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView destroyStream:reason:]):

2008-10-06  David Hyatt  <hyatt@apple.com>

        Add SPI for a new viewless WebKit mode.  The idea is that when this flag is set there will be no
        views created except for the outermost WebView.

        Reviewed by Tim Hatcher

        * WebView/WebView.mm:
        * WebView/WebViewInternal.h:

2008-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Convert more methods over to C++.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::reasonForError):
        (WebNetscapePluginStream::destroyStreamWithReason):
        (WebNetscapePluginStream::cancelLoadWithError):
        (-[WebBaseNetscapePluginStream cancelLoadWithError:]):
        (WebNetscapePluginStream::destroyStreamWithError):
        (-[WebBaseNetscapePluginStream destroyStreamWithError:]):
        (-[WebBaseNetscapePluginStream cancelLoadAndDestroyStreamWithError:]):
        (-[WebBaseNetscapePluginStream _deliverDataToFile:]):
        (-[WebBaseNetscapePluginStream finishedLoading]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithError:]):

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21295
          Bug 21295: Replace ExecState with a call frame Register pointer

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger): Remove 0 passed for ExecState.

2008-10-03  John Sullivan  <sullivan@apple.com>

        Fixed Release build

        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::destroyStream):
        added !LOG_DISABLED guard around declaration of npErr used only in LOG

2008-10-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.
        
        Convert destroyStream over to C++.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::destroyStream):
        (-[WebBaseNetscapePluginStream _destroyStreamWithReason:]):
        (-[WebBaseNetscapePluginStream _deliverData]):

2008-10-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Use a Timer instead of -[NSObject performSelector:withObject:afterDelay];
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream _destroyStream]):
        (-[WebBaseNetscapePluginStream _deliverData]):
        (WebNetscapePluginStream::deliverDataTimerFired):

2008-10-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        More plug-in stream cleanup.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::create):
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithFrameLoader:]):
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):
        (-[WebBaseNetscapePluginStream setPlugin:]):
        (WebNetscapePluginStream::setPlugin):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (-[WebBaseNetscapePluginStream _destroyStream]):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Remove addToDirtyRegion.
        
        Reviewed by Oliver Hunt
        
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21328
        
        Make widget invalidation more cross-platform.
        
        (1) Make invalidateRect a pure virtual function on Widget.  All leaf widgets must now implement this function.
        
        (2) Scrollbars now send invalidations through the ScrollbarClient.  windowClipRect on ScrollbarClient has been removed and replaced with this invalidation call.
        This allows all scrollbar invalidations to go through the render tree so that transforms and reflections will be respected.
        
        (3) Plugins now have the native window invalidation code for windowed plugins.  Windowless plugins do a repaintRectangle on the plugin's renderer.
        
        (4) FrameViews now do a repaintRectangle on their owner element's renderer.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (PluginWidget::PluginWidget):
        (PluginWidget::invalidateRect):
        (NetscapePluginWidget::NetscapePluginWidget):
        (WebFrameLoaderClient::createPlugin):

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

        Reviewed by Geoff Garen.

        - https://bugs.webkit.org/show_bug.cgi?id=21321
          Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]): Use heap. instead of heap-> to
        work with the heap.
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]): Ditto.
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]): Ditto.
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]): Ditto.
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]): Ditto.
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]): Ditto.

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21314
        
        Make scrollBackingStore cross-platform.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::repaint):
        (WebChromeClient::scroll):

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

        Reviewed by Darin Adler and Cameron Zwarich.

        Updated for JavaScriptCore API changes: use a SourceCode instead of
        broken out parameters; treat sourceId as intptr_t.
        
        We still treat sourceId as int in some cases because of DashCode. See
        <rdar://problem/6263293> WebScriptDebugDelegate should use intptr_t for
        sourceId, not int.

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (toNSString):
        (WebScriptDebugger::sourceParsed):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):
        (WebScriptDebugger::didReachBreakpoint):

2008-10-01  David Hyatt  <hyatt@apple.com>

        Move prohibitsScrolling from the Frame to the ScrollView.

        Reviewed by Sam Weinig

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

2008-10-01  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21282
        
        Make contentsToScreen/screenToContents cross-platform.  Only implemented by Mac/Win right now.
        
        Reviewed by Adam Roben

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::repaint):
        (WebChromeClient::screenToWindow):
        (WebChromeClient::windowToScreen):

2008-09-30   Dave Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21269
  
        This patch makes the ScrollView::paint method cross-platform.  The paint method calls the base class
        Widget paint on platforms with native widgets (Mac and wx).  Otherwise it calls a virtual function,
        paintContents, to paint the ScrollView's contents, and then it paints each of the two scrollbars and
        the scrollbar corner.
        
        The scrollbar themes are now responsible for painting scrollbar corners.  At the moment ScrollbarThemeWin still
        paints white (which is incorrect), so a future patch will actually implement proper native scroll corner painting
        for Windows.
        
        paintContents is implemented by FrameView, and replaces Frame::paint.  All of the FramePrivate member
        variables used by Frame::paint have moved to FrameViewPrivate instead.  All callers of Frame::paint have
        been patched to use FrameView::paintContents instead.
       
        Reviewed by Darin Adler

        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:]):

2008-09-30  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        Remove the NPDrawingModelOpenGL entirely. To my knowledge no shipping plug-in ever used it, and no other browser engine
        ever supported it.
                              
        * Plugins/WebBaseNetscapePluginView.h: Removed AGL.h import and OpenGL related ivars.
        * Plugins/WebBaseNetscapePluginView.mm: Removed soft linking for OpenGL and AGL frameworks. 
        Also removed many methods AGL/CGL support methods that are no longer necessary.
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]): Removed NPDrawingModelOpenGL related code.
        (-[WebBaseNetscapePluginView restorePortState:]): Ditto.
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]): Ditto.
        (-[WebBaseNetscapePluginView isNewWindowEqualToOldWindow]): Ditto.
        (-[WebBaseNetscapePluginView setWindowIfNecessary]): Ditto.
        (-[WebBaseNetscapePluginView stop]): Ditto.
        (-[WebBaseNetscapePluginView dealloc]): Ditto.
        (-[WebBaseNetscapePluginView drawRect:]): 
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]): Ditto.
        (-[WebBaseNetscapePluginView invalidateRegion:]): Ditto.
        (-[WebBaseNetscapePluginView getVariable:value:]): Tell plug-ins WebKit does not support NPDrawingModelOpenGL.
        (-[WebBaseNetscapePluginView setVariable:value:]): Removed NPDrawingModelOpenGL related code. 
        (-[WebBaseNetscapePluginView _viewHasMoved]): Ditto.

2008-09-30  Dave Hyatt  <hyatt@apple.com>

        http://bugs.webkit.org/show_bug.cgi?id=21250
        
        Rename updateContents to repaintContentRectangle and make it cross-platform by always sending
        repaints up through the ChromeClient.
        
        Reviewed by Darin Adler

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::repaint):

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

        Reviewed by Mark Rowe and Adam Roben.

        No need to use pointers to store C++ objects as pointers in WebViewPrivate, we can just
        store them directly.
        
        * Configurations/Base.xcconfig:
        Set GCC_OBJC_CALL_CXX_CDTORS to YES.
        
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):
        (-[WebViewPrivate dealloc]):
        (-[WebViewPrivate finalize]):
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView setApplicationNameForUserAgent:]):
        (-[WebView setCustomUserAgent:]):
        (-[WebView customUserAgent]):
        (-[WebView WebCore::_userAgentForURL:WebCore::]):
        (-[WebView _addObject:forIdentifier:]):
        (-[WebView _objectForIdentifier:]):
        (-[WebView _removeObjectForIdentifier:]):

2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon.

        Changed copyright from Trolltech ASA to Nokia.
        
        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
        

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:

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

        Improves the Web Inspector node highlight so it does not scroll
        to reveal the node in the page. This makes the highlight less
        invasive and causes less things to change on screen. Also makes
        the highlight redraw when the WebView draws, so it stays current
        if the node changes on the page for any reason.

        <rdar://problem/6115804> Don't scroll when highlighting (21000)
        https://bugs.webkit.org/show_bug.cgi?id=21000

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController highlightNode:]): Call setNeedsDisplay:YES
        if there is an existing highlight.
        (-[WebInspectorWindowController didAttachWebNodeHighlight:]): Set the current
        highlight node on the inspected WebView.
        (-[WebInspectorWindowController willDetachWebNodeHighlight:]): Set the current
        highlight node on the inspected WebView to nil.
        * WebInspector/WebNodeHighlight.m:
        (-[WebNodeHighlight setNeedsUpdateInTargetViewRect:]): Disable screen updates
        until flush for the inspected window. Invalidate the whole highlight view since
        we don't know the rect that needs updated since the highlight can be larger than
        the highlighted element due to the margins and other factors.
        * WebInspector/WebNodeHighlightView.m:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawSingleRect:]): Call setNeedsUpdateInTargetViewRect: on the
        current highlight node.
        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]): Release the current highlight node.
        (-[WebView setCurrentNodeHighlight:]): Set the current highlight node.
        (-[WebView currentNodeHighlight]): Return the current highlight node.
        * WebView/WebViewInternal.h:

2008-09-28  David Kilzer  <ddkilzer@apple.com>

        Fix build warning in WebDefaultUIDelegate.m

        Reviewed by Dan Bernstein.

        This fixes a warning noticed by the clang static analyzer:
        .../WebDefaultUIDelegate.m: In function ‘-[WebDefaultUIDelegate webViewFirstResponder:]’:
        .../WebDefaultUIDelegate.m:92: warning: initialization from distinct Objective-C type

        Note that this doesn't actually cause any change in behavior since
        the gcc compiler ignores the semi-colon anyway.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webViewFirstResponder:]): Removed semi-colon
        from method signature.

2008-09-27  David Hyatt  <hyatt@apple.com>

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21182

        Make sure Mac null checks the view like the other platforms do now that Mac goes through WebCore
        to call setAllowsScrolling.

        Reviewed by Mark Rowe

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createFrame):

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-09-26  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.

        * Configurations/WebKit.xcconfig:

2008-09-26  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21164

        Rework concept of allowsScrolling/setAllowsScrolling to be cross-platform.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createFrame):
        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.m:
        * WebView/WebDynamicScrollBarsViewInternal.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView setAllowsScrolling:]):
        (-[WebFrameView allowsScrolling]):

2008-09-26  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21149

        More refactoring to make scrollbar modes cross-platform.  Reduce the protocol that
        WebDynamicScrollBarsView has to implement for communicating with WebCore to just three methods.

        Reviewed by Sam Weinig

        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView scrollingModes:WebCore::vertical:WebCore::]):
        (-[WebDynamicScrollBarsView setHorizontalScrollingMode:andLock:]):
        (-[WebDynamicScrollBarsView setVerticalScrollingMode:andLock:]):
        (-[WebDynamicScrollBarsView setScrollingModes:vertical:andLock:]):
        * WebView/WebDynamicScrollBarsViewInternal.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView setAllowsScrolling:]):
        * WebView/WebView.mm:
        (-[WebView setAlwaysShowVerticalScroller:]):
        (-[WebView setAlwaysShowHorizontalScroller:]):

2008-09-26  David Kilzer  <ddkilzer@apple.com>

        Fix Mac build with XSLT disabled

        Reviewed by Alexey.

        * Misc/WebCache.mm:
        (+[WebCache statistics]): Populate xslStyleSheet statistics with
        zeros if XSLT is disabled.

2008-09-25  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21101

        Fix the updating of the active state to not be dumb, so that viewless scrollbars repaint properly.

        Reviewed by Tim Hatcher

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

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

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=21079
          <rdar://problem/6203938> Disallow embedding Safari-generated pages
          (e.g bookmarks collection) in subframes

        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        Use the new +[WebView _canHandleRequest:forMainFrame:] so we can give
        a different answer for the main frame and subframes.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canHandleRequest): Ditto.

        * WebView/WebView.mm:
        (+[WebView _canHandleRequest:forMainFrame:]): Added forMainFrame. Only look
        for scheme-specific representations for the main frame, not subframes. 
        (+[WebView _canHandleRequest:]): Give answer for main frame -- calls the
        method above with YES for main frame.

        * WebView/WebViewInternal.h: Added _canHandleRequest:forMainFrame:.

2008-09-23  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21039

        Teach the viewless Mac scrollbar how to avoid the NSWindow resizer.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::windowResizerRect):

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-09-21  Dirk Schulze  <vbs85@gmx.de>

        Reviewed and landed by Eric Seidel.

        Moved CGFloat definition to WebKitPrefix so CGFloat can be used more
        freely throughout WebCore without worrying about breaking Tiger.

        * Misc/WebTypesInternal.h: Removed it from here.
        * WebKitPrefix.h: Added it here.

2008-09-20  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Revert r35688. We use a textured window on Leopard, which does not have the
        square corners of the standard Aqua window on Tiger.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]): Add back the call to WKNSWindowMakeBottomCornersSquare.

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

        Reviewed by Dan Bernstein.

        - speculative fix for https://bugs.webkit.org/show_bug.cgi?id=20943
          Assertion failure in RefCountedLeakCounter::cancelMessageSuppression() when closing a window

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Moved call to
        RefCountedLeakCounter::suppressMessages in here.
        (-[WebView initWithFrame:frameName:groupName:]): Moved it out of here.

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

        Reviewed by Dan Bernstein.

        Add SPI to WebView to allow DRT to clear the main frame's name between tests.

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

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

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20925
          LEAK messages appear every time I quit

        * WebView/WebPreferences.mm:
        (-[WebPreferences setFullDocumentTeardownEnabled:]): Removed unneeded call
        to setLogLeakMessages.
        * WebView/WebView.mm:
        (-[WebView _closeWithFastTeardown]): Call RefCountedLeakCounter::suppressMessages,
        telling it that we can't track leaks because at least one WebView was closed with
        fast teardown.
        (-[WebView _close]): Removed unneeded call to setLogLeakMessages. Added a call to
        cancelMessageSuppression since the WebView is no longer open.
        Added an explicit garbage collect to help with the case where we're closing during
        the quit process -- the garbageCollectSoon() calls done inside WebCore won't help
        us in that case.
        (-[WebView initWithFrame:frameName:groupName:]): Call
        RefCountedLeakCounter::suppressMessages telling it that we can't track leaks
        because at least one WebView is currently open.

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

        Reviewed by Adam Roben.

        Move the remainder of the stream ivars to the C++ object.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream _pluginCancelledConnectionError]):
        (-[WebBaseNetscapePluginStream initWithFrameLoader:]):
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):
        (-[WebBaseNetscapePluginStream setPlugin:]):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (-[WebBaseNetscapePluginStream start]):
        (-[WebBaseNetscapePluginStream stop]):
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        (-[WebBaseNetscapePluginStream _destroyStream]):
        (-[WebBaseNetscapePluginStream _destroyStreamWithReason:]):
        (-[WebBaseNetscapePluginStream cancelLoadWithError:]):
        (-[WebBaseNetscapePluginStream _deliverData]):

2008-09-17  David Hyatt  <hyatt@apple.com>

        Make the notion of Widget having an underlying native widget cross-platform.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::handleEvent):
        * WebView/WebFrame.mm:
        (-[WebFrame _dragSourceMovedTo:]):
        (-[WebFrame _dragSourceEndedAt:operation:]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _install]):
        * WebView/WebRenderNode.mm:
        (copyRenderNode):

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

        Reviewed by Cameron Zwarich.

        Move more instance variables down to the C++ class.

        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):
        (-[WebBaseNetscapePluginStream transferMode]):
        (-[WebBaseNetscapePluginStream plugin]):
        (-[WebBaseNetscapePluginStream setPlugin:]):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        (-[WebBaseNetscapePluginStream _destroyStream]):
        (-[WebBaseNetscapePluginStream _destroyStreamWithReason:]):
        (-[WebBaseNetscapePluginStream _deliverData]):
        (-[WebBaseNetscapePluginStream _deliverDataToFile:]):
        (-[WebBaseNetscapePluginStream finishedLoading]):
        (-[WebBaseNetscapePluginStream receivedData:]):

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

        Reviewed by Dave Hyatt.

        Move a bunch of instance variables into the C++ class.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream _pluginCancelledConnectionError]):
        (-[WebBaseNetscapePluginStream errorForReason:]):
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream setRequestURL:]):
        (-[WebBaseNetscapePluginStream setResponseURL:]):
        (-[WebBaseNetscapePluginStream setMIMEType:]):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (-[WebBaseNetscapePluginStream _destroyStream]):
        (-[WebBaseNetscapePluginStream _destroyStreamWithReason:]):
        (-[WebBaseNetscapePluginStream _deliverData]):
        (-[WebBaseNetscapePluginStream receivedData:]):

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

        Reviewed by Dave Hyatt.

        Add a new WebNetscapePluginStream C++ class. The idea is that it is supposed to replace the Obj-C 
        WebBaseNetscapePluginStream class. The plan is to gradually move/rewrite code from the Obj-C class to the C++ class
        until the C++ class can replace the Obj-C class.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        (WebNetscapePluginStream::create):
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithFrameLoader:]):
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):

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

        Reviewed by Dave Hyatt.

        Instead of storing a pointer to NPP method individually, just store a pointer to the NPNetscapeFuncs vtable.
        
        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream setPlugin:]):
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]):
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        (-[WebBaseNetscapePluginStream _destroyStream]):
        (-[WebBaseNetscapePluginStream _deliverData]):
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage pluginFuncs]):

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

        Reviewed by Dave Hyatt.

        Remove references to WebNetscapePluginStream.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebNetscapePluginEmbeddedView.h:

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

        Reviewed by Dave Hyatt.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20860
          REGRESSION: Crash in RenderLayer::hasVisibleContent() loading wavy.com

        * WebView/WebFrame.mm:
        (-[WebFrame _getVisibleRect:]): Changed to check if the RenderPart has
        layout before accessing it, instead of checking if the frame inside it
        has layout.

2008-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler, Beth Dakin

        Support strings for AXLists

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory AXDefinitionListTermText]):
        (-[WebViewFactory AXDefinitionListDefinitionText]):

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

        Reviewed by Mitz.

        Merge WebNetscapePluginStream into WebBaseNetscapePluginStream.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithFrameLoader:]):
        (-[WebBaseNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        (-[WebBaseNetscapePluginStream dealloc]):
        (-[WebBaseNetscapePluginStream finalize]):
        (-[WebBaseNetscapePluginStream start]):
        (-[WebBaseNetscapePluginStream stop]):
        (-[WebBaseNetscapePluginStream cancelLoadWithError:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginView:receivedResponse:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        * Plugins/WebNetscapePluginEmbeddedView.mm:
        * Plugins/WebNetscapePluginStream.h: Removed.
        * Plugins/WebNetscapePluginStream.mm: Removed.

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

        Fixed <rdar://problem/6110941> Clicking the print button in PDF content does nothing

        Reviewed by Darin Adler

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewPerformPrint:]):
        Implemented PDFKit delegate method that's called after a Print action in the PDF content

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

        Reviewed by John Sullivan.

        - fix a crash in -visibleRect when it is called during WebFrameView deallocation

        * WebView/WebFrameView.mm:
        (-[WebFrameView visibleRect]): Added an early return if _private is 0.

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

        Reviewed by John Sullivan.

        - eliminate excessive repainting when a clipped iframe is moved (noticed in <rdar://problem/6204032>)

        * WebView/WebFrame.mm:
        (-[WebFrame _getVisibleRect:]): Added. If the frame is in a RenderPart
        and has layout, gets the visible rect of the RenderPart and returns
        YES. Returns NO otherwise.
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView visibleRect]): Added. Overrides this NSView method to
        take clipping in the render tree into account.

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

        - Tiger build fix

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

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

        Reviewed by Darin Adler.

        - WebKit part of <rdar://problem/6206244> Use alternate character-to-glyph interface on Leopard

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC.

        * Misc/WebCoreStatistics.mm:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebBaseNetscapePluginView setWindowIfNecessary]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView createPluginScriptableObject]):
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView _printedPluginBitmap]):
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        * WebView/WebFrame.mm:
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):

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-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20639.
        Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE

        * Configurations/WebKit.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES.

2008-09-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS)

        * Configurations/WebKit.xcconfig:
        * WebKitPrefix.h: add rules for V8_BINDINGS

2008-09-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=19760

        Add a linked-on-or-after check to prevent substitute data from loading
        local resources on newer users of WebKit.

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

2008-08-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Fix regression I introducted in 35946
        Already covered by media/video-click-dlbclick-standalone.html

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation receivedData:withDataSource:]): Cancel the load here after
          calling [WebFrame _receivedData:] which more closely follows the path taken by PluginDocuments

2008-08-28  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        <rdar://problem/6095949> REGRESSION (5525.8-6527.1?): "this" is null
        when you first hit a breakpoint in Dashcode
        - We wanted to reset the callframe whenever eval() was called but
        dashcode uses eval() when broken to evaluate the state of the current
        call frame.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):

2008-08-27  Robert Kroeger  <rjkroege@liqui.org>

        Tweaked by Sam Weinig.

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=6595
        <rdar://problem/4432150>
        Right-click does not fire mouseup event

        Adds a rightMouseUp handler to the WebHTMLView.

        The added method generates mouseup events for button 2.  The result
        is that webkit will deliver mousedown and mouseup events for button
        2 in a fashion identical to FireFox and will retain event ordering
        identical to Internet Explorer.

        Test: fast/events/mouseup-from-button2.html

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

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-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

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

2008-08-20  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by John Sullivan.

        - rename shouldUpdateWhileHidden to shouldUpdateWhileOffscreen,
          rename related methods and variables accordingly, and make
          -setShouldUpdateWhileOffscreen: and -shouldUpdateWhileOffscreen
          WebView API.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebFrame.mm:
        (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView windowWillOrderOnScreen:]):
        * WebView/WebView.h:
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):
        (-[WebView setBackgroundColor:]):
        (-[WebView setDrawsBackground:]):
        (-[WebView setShouldUpdateWhileOffscreen:]):
        (-[WebView shouldUpdateWhileOffscreen]):
        * WebView/WebViewPrivate.h:

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

        Reviewed by Darin Adler.

        Switch to non-deprecated NSFileManager API.

        In order to minimize #if's the new NSFileManager APIs have been implemented for
        Tiger and call sites updated to use the new methods.

        * Misc/WebIconDatabase.mm:
        (importToWebCoreFormat):
        * Misc/WebKitNSStringExtras.m:
        (-[NSString _webkit_fixedCarbonPOSIXPath]):
        * Misc/WebKitSystemBits.m:
        * Misc/WebNSFileManagerExtras.h:
        * Misc/WebNSFileManagerExtras.m: Remove implementations of methods that are not used.
        (-[NSFileManager _webkit_backgroundRemoveFileAtPath:]):
        (-[NSFileManager attributesOfFileSystemForPath:error:]): Implement new API for Tiger in terms of Tiger API.
        (-[NSFileManager contentsOfDirectoryAtPath:error:]): Ditto.
        (-[NSFileManager moveItemAtPath:toPath:error:]): Ditto.
        (-[NSFileManager removeItemAtPath:error:]): Ditto.
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase _scanForNewPlugins]):

2008-08-20  Josh Aas  <joshmoz@gmail.com>

        Reviewed and landed by Anders.

        <rdar://problem/6163636> 
        rename NPCocoaEvent's "event" struct to "data" (20446)

        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::drawRect):
        (WebNetscapePluginEventHandlerCocoa::sendMouseEvent):
        (WebNetscapePluginEventHandlerCocoa::flagsChanged):
        (WebNetscapePluginEventHandlerCocoa::sendKeyEvent):
        (WebNetscapePluginEventHandlerCocoa::windowFocusChanged):
        (WebNetscapePluginEventHandlerCocoa::focusChanged):

2008-08-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/6145626>
        Allows a WebKit client to mark a frame as not-text-searchable 
        through SPI.

        * WebView/WebFrame.mm:
        (-[WebFrame _setExcludeFromTextSearch:]):
        * WebView/WebFramePrivate.h:

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * ForwardingHeaders/runtime/JSLock.h: Added.
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebBaseNetscapePluginView setWindowIfNecessary]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView createPluginScriptableObject]):
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView _printedPluginBitmap]):
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

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

        Fixes the Web Inspector flashing white while resizing after
        highlighting a page element. Calling disableScreenUpdatesUntilFlush
        when attaching and detaching the Inspector page highlight is bad,
        since the browser window might not flush again for a while. So screen
        updates could be disabled for long periods of time, causing backing store
        flashing while resizing. There is no need to call disableScreenUpdatesUntilFlush
        when attaching or detaching the child window.

        Reviewed by John Sullivan and Kevin McCullough.

        * WebInspector/WebNodeHighlight.m:
        (-[WebNodeHighlight attach]): Remove the call to disableScreenUpdatesUntilFlush.
        (-[WebNodeHighlight detach]): Ditto.

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

        Correctly remembers the attached state of the Web Inspector so
        it opens in that state for the next window, or next launch.

        Reviewed by Kevin McCullough.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController attach]): Set WebKitInspectorAttachedKey
        to YES in the user defaults.
        (-[WebInspectorWindowController detach]): Set WebKitInspectorAttachedKey
        to NO in the user defaults.

2008-08-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=19347
        <rdar://problem/5977562> Input methods do not work after switching to a password field
        and back.

        Fix <rdar://problem/5522011> (The content of the password field of Safari is displayed by
        reconversion) in a different way which doesn't conflict with context caching performed
        by AppKit.

        This original bug does not really occur in ToT or shipping Safari under Mac OS X 10.5.4,
        because input methods are disabled in password fields. Attempting to reconvert text typed
        with Romaji only yields a string of bullets. Still, it is probably better to match Cocoa
        password field behavior and disable reconversion completely.

        * WebView/WebHTMLView.mm:
        (isInPasswordField): Factored out code to determine that the current selection is in
        a password field.
        (inputContext): Removed a hack that was breaking TSMGetActiveDocument().
        (-[WebHTMLView attributedSubstringFromRange:]): Check for password fields.
        (-[WebHTMLView textStorage]): Ditto.

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

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * WebView/WebView.mm:
        (aeDescFromJSValue): Rewrite to use the JSValue::is functions instead
        of a switch on JSValue::type().

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Made room for a free word in JSCell.
        
        (Updated for JavaScriptCore changes.)

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

        Rubber-stamped by Geoff Garen.

        <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework

        * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
        between the Debug configuration and debug Production variant.

2008-08-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen and Timothy Hatcher.

        Add WebView SPI to set HTMLTokenizer yielding parameters.

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

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

        Fixes a bug where Safari's find banner would be permanently hidden
        when attaching or closing the Web Inspector while attached.

        https://bugs.webkit.org/show_bug.cgi?id=20376

        Reviewed by Kevin McCullough.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController close]):
        Carefully manipulate the WebFrameView's frame when closing to
        not assume the WebFrameView's frame fills the inspected WebView.
        (-[WebInspectorWindowController setAttachedWindowHeight:]):
        Carefully manipulate the WebFrameView's frame when docking to
        not assume the WebFrameView plus the Web Inspector WebViews fills
        the full inspected WebView.

2008-08-13  Stephanie Lewis  <slewis@apple.com>

        fix 64bit build

        * WebCoreSupport/WebInspectorClient.mm:

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

        Remember the docked state of the Web Inspector, so it can be
        reopened docked if it was last docked.

        https://bugs.webkit.org/show_bug.cgi?id=14271

        Reviewed by Kevin McCullough.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]): Initialize _shouldAttach
        to the value stored in the user defaults. If there has never
        been a value stored, default to being attached.
        (-[WebInspectorWindowController showWindow:]): Pass the attached
        state to InspectorController::setWindowVisible.

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

        Remove the Inspector's WebView for the view hierarchy when closed
        while attached. This prevents it from showing in the background
        while the page changes.

        Reviewed by Kevin McCullough.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController close:]): Call removeFromSuperview
        on the Inspector's WebView if it isn't attached, so it will not
        be visible when navigating pages while closed.

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

        Make the docked Web Inspector resizable.

        https://bugs.webkit.org/show_bug.cgi?id=14282

        Reviewed by Kevin McCullough.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::setAttachedWindowHeight): Call setAttachedWindowHeight:
        on the WebInspectorWindowController.
        (-[WebInspectorWindowController showWindow:]): Call setAttachedWindowHeight:.
        (-[WebInspectorWindowController setAttachedWindowHeight:]): Moved code
        from showWindow: and generalized to allow being called multiple times.
        Remembers the last height passed, which is used by showWindow: the next
        time the Inspector attaches.

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

        Remove unneeded header imports from some Web Inspector files.

        Reviewed by Adam Roben.

        * WebCoreSupport/WebInspectorClient.mm:
        * WebInspector/WebInspector.mm:
        * WebInspector/WebNodeHighlightView.m:

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

        Remove the call to WKNSWindowMakeBottomCornersSquare on the
        Web Inspector's window. This isn't needed anymore since the
        window style masks used always have square bottom corners.

        Reviewed by Adam Roben.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]): Remove the call
        to WKNSWindowMakeBottomCornersSquare.

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

        Make attaching and detaching the Web Inspector instantaneous.
        This also preserves the current view, other state, and keeps
        the script debugger attached.

        https://bugs.webkit.org/show_bug.cgi?id=19301

        Reviewed by Adam Roben.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController close]): Only call setWindowVisible(false)
        when not moving windows.

2008-08-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - replace -[WebPreferences updatesWhenOffscreen] with -[WebView shouldUpdateWhileHidden]

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebFrame.mm:
        (-[WebFrame _updateBackgroundAndUpdatesWhileHidden]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView windowWillOrderOnScreen:]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView setBackgroundColor:]):
        (-[WebView setDrawsBackground:]):
        (-[WebView shouldUpdateWhileHidden]):
        (-[WebView setShouldUpdateWhileHidden:]):
        * WebView/WebViewPrivate.h:

2008-08-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - fix <rdar://problem/6130216> Exception "windowRegionBeingDrawn != nil" in NSView when caching image of a subframe

        This change reintroduces <https://bugs.webkit.org/show_bug.cgi?id=5195> on Leopard.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inContext:topView:]): Removed an
        unsuccessful workaround for <rdar://problem/5668489>, because invoking
        layout may change the view hierarchy during the drawing operation,
        which is not supported on Leopard.

2008-08-08  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.

        * WebView/WebFrame.mm:
        (-[WebFrame _scrollDOMRangeToVisible:]):

2008-08-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fix for <rdar://problem/5865504>

        This bug was actually *largely* fixed by http://trac.webkit.org/changeset/35538.
        But with that same patch, it became possible for a WebResource to fail to initialize.  
        Therefore we were trying to add nil to an NSCFArray for certain situations, which is bad.
        Lets fix that, shall we?

        * WebView/WebArchive.mm:
        (-[WebArchive subresources]): 

2008-08-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Cameron Zwarich.

        Move more methods from Frame into ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=20294

        The WebKit side of this move.  Calls to frame() are now frame()->script()

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView getVariable:value:]):
        (-[WebBaseNetscapePluginView _destroyPlugin]):
        * Plugins/WebPluginController.mm:
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame windowObject]):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::callEvent):
        * WebView/WebView.mm:
        (-[WebView windowScriptObject]):

2008-08-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - fix an assertion failure in Cache::setCapacities()

        * Misc/WebKitSystemBits.h: Changed the return type of WebMemorySize()
        to uint64_t.
        * Misc/WebKitSystemBits.m:
        (WebMemorySize):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2008-08-05  Anders Carlsson  <andersca@apple.com>

        Pass in the correct class here.
        
        * WebView/WebResource.mm:
        (-[WebResourcePrivate dealloc]):

2008-08-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6037398>
        ER: Deallocate WebKit objects on the main thread, even if released on secondary thread
        
        Add calls to WebCoreObjCScheduleDeallocateOnMainThread in dealloc methods of objects we expose.

        * Carbon/CarbonWindowAdapter.m:
        (-[CarbonWindowAdapter dealloc]):
        * History/WebBackForwardList.mm:
        (-[WebBackForwardList dealloc]):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem dealloc]):
        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initialize]):
        (-[WebElementDictionary dealloc]):
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditCommand dealloc]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebArchive.mm:
        (-[WebArchivePrivate dealloc]):
        * WebView/WebDataSource.mm:
        (-[WebDataSourcePrivate dealloc]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]):
        (-[WebHTMLView dealloc]):
        * WebView/WebResource.mm:
        (-[WebResourcePrivate dealloc]):

2008-08-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Remove MainThreadObjectDeallocator.{h|mm}.

        * WebView/MainThreadObjectDeallocator.h: Removed.
        * WebView/MainThreadObjectDeallocator.mm: Removed.
        
        * WebView/WebView.mm:
        (-[WebView dealloc]):
        Call WebCoreObjCScheduleDeallocateOnMainThread instead.

2008-08-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Make the main thread object deallocator work with subclasses.
        
        * WebView/MainThreadObjectDeallocator.h:
        * WebView/MainThreadObjectDeallocator.mm:
        (deallocCallback):
        Call the correct dealloc method.
                
        (scheduleDeallocateOnMainThread):
        Store both the class and the instance, so we know which dealloc method to call.
        
        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]):
        Schedule deallocation on the main thread.

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

        Reviewed by Mark Rowe and Anders Carlsson.

        - fix WebMemorySize() reporting a value capped at 2GB

        * misc/WebKitSystemBits.m:
        (WebMemorySize): Changed to return the max_mem field, which, unlike
        memory_size, is not capped at 2GB.
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]): Made the cache sizes for over 2GB RAM the
        same as for 2GB, so that behavior on machines that have more than 2GB
        RAM is not affected by the fix to WebMemorySize().

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

        Build fix.

        * WebView/WebHTMLView.mm:

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

        Reviewed by Kevin Decker.

        Adopt the formal protocols where necessary.
        Final part of fix for <rdar://problem/5853147>.

        * WebCoreSupport/WebInspectorClient.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebView.mm:
        (-[WebView _openFrameInNewWindowFromMenu:]):

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

        Reviewed by Darin Adler.

        Declare empty protocols when using versions of AppKit that do not use formal protocols for delegates and data sources.
        Part one of fix for <rdar://problem/5853147>.

        * Misc/EmptyProtocolDefinitions.h:
        * WebKitPrefix.h:

2008-08-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Mitz Pettel

        Fix <rdar://problem/5820157> - Saving WebArchives of Mail attachments broken.

        This broke in r31355 when we stopped returning nil WebResources when there was nil
        resource data.

        * WebView/WebResource.mm:
        (-[WebResource _initWithCoreResource:]): Restore previous behavior of returning nil
          when the resource data is null.

2008-08-02  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Update the window gradient offset to match the inspector toolbar's new height.

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

2008-08-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        <rdar://problem/6120206>
        Crash when plug-in queries for NPPVpluginWantsAllNetworkStreams.
        
        Pass in a pointer to a void* to make sure that plug-ins don't overwrite the stack.

        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream wantsAllStreams]):

2008-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5949410>
        Add the ability to transfer a given application cache to a new database.

        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.m:
        (+[NSString _webkit_applicationCacheDirectoryWithBundleIdentifier:]):
        New method which returns the appopriate cache directory for a given bundle identifier.
        
        * WebView/WebDataSource.mm:
        (-[WebDataSource _transferApplicationCache:]):
        Transfer the application cache.
        
        * WebView/WebDataSourcePrivate.h:
        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):
        Change this to use _webkit_applicationCacheDirectoryWithBundleIdentifier.

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

        WebKit part of <rdar://problem/6116650> Text-only zoom setting should be stored in WebKit prefs

        Reviewed by Hyatt

        * WebView/WebPreferenceKeysPrivate.h:
        added WebKitZoomsTextOnlyPreferenceKey
        
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        default value of YES for WebKitZoomsTextOnlyPreferenceKey
        (-[WebPreferences zoomsTextOnly]):
        getter for WebKitZoomsTextOnlyPreferenceKey
        (-[WebPreferences setZoomsTextOnly:]):
        setter for WebKitZoomsTextOnlyPreferenceKey
        
        * WebView/WebPreferencesPrivate.h:
        declare zoomsTextOnly/setZoomsTextOnly:
        
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
        update WebCore::Settings value for zoomsTextOnly

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

        Fix layout test results for webarchive/test-xml-stylesheet.xml

        Reviewed by Darin Adler.

        Needed to expose -[WebHTMLRepresentation supportedNonImageMIMETypes]
        for DumpRenderTree.

        * WebView/WebHTMLRepresentationInternal.h: Added.

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * Plugins/WebBaseNetscapePluginView.mm: (-[WebBaseNetscapePluginView setWindowIfNecessary]):
        Don't define to npErr in release builds, as it is only used for logging.

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

        Fixed <https://bugs.webkit.org/show_bug.cgi?id=5195>
        drawing with cacheDisplayInRect:toBitmapImageRep: doesn't trigger layout on Leopard

        Reviewed by Dan

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inContext:topView:]):
        include Leopard in the #ifdef that forces a layout if needed

2008-07-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam and Hyatt

        Fix for <rdar://problem/6099748>

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Set the "don't enforce CSS mime type in strict mode" 
          quirk when running under iWeb 2

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Maciej.

        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
        call sites now).

        * ForwardingHeaders/runtime/JSLock.h: Removed.
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebBaseNetscapePluginView setWindowIfNecessary]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView createPluginScriptableObject]):
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView _printedPluginBitmap]):
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

2008-07-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Fixes <rdar://problem/6041390>

        Adds the ability to have a frame that is "disconnected" from the 
        main frame from the perspective of top and parent in 
        Javascript.

        * WebView/WebFrame.mm:
        (-[WebFrame _setIsDisconnectedFrame]):
        * WebView/WebFramePrivate.h:

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

        Tweak to the build fix to keep Dan happy.

        * Plugins/WebBaseNetscapePluginView.mm:
        * WebView/WebHTMLView.mm:

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

        Build fix.

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

2008-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Based on a patch by Dimcho Balev.
        
        https://bugs.webkit.org/show_bug.cgi?id=18676
        <rdar://problem/6106578>
        Plug-In API Proposal: Enable plugins to receive response body when an HTTP error occurs

        * Plugins/WebBaseNetscapePluginStream.h:
        Add NPP_GetValue pointer.
        
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream setPlugin:]):
        Initialize NPP_GetValue.
        
        (-[WebBaseNetscapePluginStream wantsAllStreams]):
        Call NPP_GetValue.
        
        * Plugins/WebPlugInStreamLoaderDelegate.h:
        * WebCoreSupport/WebNetscapePlugInStreamLoaderClient.h:
        * WebCoreSupport/WebNetscapePlugInStreamLoaderClient.mm:
        (WebNetscapePlugInStreamLoaderClient::wantsAllStreams):
        Implement this and call down to the stream.

2008-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/6105529> 
        https://bugs.webkit.org/show_bug.cgi?id=19659
        Turning off plugins causes crash
        
        When an active page has plug-ins, and plug-ins are disabled, they will be stopped and will
        end up in a state where they don't have an event handler. Because of this, we need to 
        check that the plug-in has been started before calling the event handler.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendActivateEvent:]):
        (-[WebBaseNetscapePluginView sendDrawRectEvent:]):
        (-[WebBaseNetscapePluginView setHasFocus:]):
        (-[WebBaseNetscapePluginView mouseDown:]):
        (-[WebBaseNetscapePluginView mouseUp:]):
        (-[WebBaseNetscapePluginView mouseEntered:]):
        (-[WebBaseNetscapePluginView mouseExited:]):
        (-[WebBaseNetscapePluginView handleMouseMoved:]):
        (-[WebBaseNetscapePluginView mouseDragged:]):
        (-[WebBaseNetscapePluginView scrollWheel:]):
        (-[WebBaseNetscapePluginView keyUp:]):
        (-[WebBaseNetscapePluginView keyDown:]):
        (-[WebBaseNetscapePluginView flagsChanged:]):
        (-[WebBaseNetscapePluginView cut:]):
        (-[WebBaseNetscapePluginView copy:]):
        (-[WebBaseNetscapePluginView paste:]):
        (-[WebBaseNetscapePluginView selectAll:]):
        (-[WebBaseNetscapePluginView drawRect:]):
        (-[WebBaseNetscapePluginView inputContext]):

2008-07-26  Daniel Jalkut  <jalkut@red-sweater.com>

        Reviewed by Geoff Garen.

        Changes to accommodate newly named/signatured loading methods in WebCore.

        * Plugins/WebNetscapePluginStream.mm:
        (-[WebNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]):
        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck _isForbiddenFileLoad]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

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-07-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5820667> 
        CrashTracer: [USER] 3759 crashes in Safari at FrameLoader::activeDocumentLoader const + 6 while canceling plug-in load
        
        Don't allow URLs to be loaded in response to an NPP_DestroyStream that happens when tearing down the plug-in.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):

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

        Reviewed by Adam Roben.

        <rdar://problem/5624143> WebView printing doesn't work correctly in x86_64

        Fix the return type of an NSView method that we override so that the correct data type is used in 64-bit.
        This prevents a garbage value being used for the scale factor that the NSView print machinery applies.

        * WebView/WebHTMLView.mm:

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

        Reviewed by Adam Roben.

        Fix CallDelegateReturningFloat for x86_64.  The x86_64 Objective-C runtime
        only uses objc_msgSend_fpret for long double return values.  For float return
        values the standard objc_msgSend is used, as on ppc and ppc64.

        * WebView/WebView.mm: Use objc_msgSend_float_return as the name of our version of
        objc_msgSend with the correct return type.  We can no longer call it objc_msgSend_fpret
        as that method is defined by the Objective-C runtime for x86_64.
        (CallDelegateReturningFloat):

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

        Reviewed by John Sullivan.

        - WebKit part of fixing <rdar://problem/6071850> Subviews not drawn correctly when using -cacheDisplayInRect:toBitmapImageRep:

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]): Changed
        to account for the case of being drawn into a bitmap context that is not
        a window's backing store. In that case, there are no valid "rects being
        drawn" to clip to.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inContext:topView:]):
        Added an override of this NSView method which is used in for
        -cacheDisplayInRect:toBitmapImageRep:. Like two existing NSView drawing
        machinery overrides, it sets subviews aside before invoking the
        superclass implementation. On Tiger, it also updates the layout.

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Eliminate per-thread JavaScript global data instance support and make arbitrary
        global data/global object combinations possible.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        Ask WebCore for its instance of JSGlobalData, now that it is not in per-thread storage.

2008-07-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        Disable WTF leak messages when using fast teardown.  Use full document teardown while running in debug.

        * WebView/WebPreferences.m: Removed.
        * WebView/WebPreferences.mm: Copied from http:/svn.webkit.org/repository/webkit/trunk/WebKit/mac/WebView/WebPreferences.m.
        (+[WebPreferences initialize]): if running in Default enable full  document teardown
        (-[WebPreferences editableLinkBehavior]):
        (-[WebPreferences setFullDocumentTeardownEnabled:]):
        * WebView/WebView.mm:
        (-[WebView _close]): disable leak messages if using fast teardown

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

        Reviewed by Sam Weinig.

        Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.

        * Configurations/WebKit.xcconfig:

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

        Reviewed by Sam Weinig.

        Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC.

        * Plugins/WebPlugin.h: Wrap annotations on methods declared in categories in the WEBKIT_CATEGORY_METHOD_ANNOTATION macro.
        * WebView/WebFrameLoadDelegate.h: Ditto.
        * WebView/WebUIDelegate.h: Ditto.

2008-07-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.
        
        Add availability macros for the new WebPlugin methods.

        * Plugins/WebPlugin.h:
        * Plugins/WebPluginViewFactory.h:

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

        Reviewed by Geoff Garen.

        Don't warn about deprecated functions in production builds.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2008-07-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/5823684> - Crash manipulating frame tree of a new frame before the new frame
        has been installed in a frame tree.

        The root of this problem was that calling init() on a new frame could end up calling arbitrary
        javascript that might end up removing the frame from the tree.  This opened up a small can of worms
        such as the frame not having yet been installed in its frame tree, and other assumed behavior while
        destroying the frame.

        Note that each platforms WebKit API layer needs to make this new guarantee:
        "The new Frame must be installed in its FrameTree before newCoreFrame->init() is called"
        I am fixing Mac, and Windows and GTK already have this property.  Wx currently has subframes disabled
        but will need to add this guarantee when re-enabling, and Qt is currently vulnerable to this same bug.

        Alternately, the way frames are created right now is roundabout and asinine, and this is a key
        architectural improvement we can make in the future so the individual platform clients are no longer
        vulnerable to this problem, which should really have been a WebCore issue.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createFrame):  Don't bother null checking the newCoreFrame - can't be NULL.
          Don't appendChild() the new frame here.
          Null-check the new frame's page before loading the URL into it, as it might already have been
          removed from the page.

        * WebView/WebFrame.mm:
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]):  If there is an ownerElement,
          go ahead and install the new frame in the frame tree *before* calling init() on it.

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

        Reviewed by Darin Adler.

        Make some WebPlugin and WebPluginFactory SPI public.
        
        * Plugins/WebPlugin.h:
        * Plugins/WebPluginPrivate.h:
        * Plugins/WebPluginViewFactory.h:
        * Plugins/WebPluginViewFactoryPrivate.h:

2008-07-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Anders.

        Port r34988 to Mac: don't call NPP_DestroyStream if NPP_NewStream was
        unsuccessful.

        * Plugins/WebBaseNetscapePluginStream.h: Added new member,
        newStreamSuccessful.
        * Plugins/WebBaseNetscapePluginStream.mm:
        (-[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]): Initialize new member.
        (-[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]): If NPP_NewStream is successful, set
        newStreamSuccessful to YES.
        (-[WebBaseNetscapePluginStream _destroyStream]): Only call
        NPP_DestroyStream if newStreamSuccessful is true.

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

        Reviewed by John Sullivan.

        - WebKit part of <rdar://problem/6008409> Need a way to disable updates in offscreen views

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView addWindowObservers]): Added code to observe when the
        window goes onscreen.
        (-[WebHTMLView removeWindowObservers]): Added.
        (-[WebHTMLView windowWillOrderOnScreen:]): Added. If the view is set to
        not update when offscreen, calls -setNeedsDisplay: just before it comes
        onscreen.
        * WebView/WebPreferenceKeysPrivate.h: Added preference key.
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]): Made updates when offscreen on by
        default.
        (-[WebPreferences updatesWhenOffscreen]): Added.
        (-[WebPreferences setUpdatesWhenOffscreen:]): Added.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Added code to update the
        updatesWhenOffscreen setting in WebCore.

2008-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Speculative fix for     
        <rdar://problem/5839800>
        CrashTracer: [USER] 5802 crashes in Safari at com.apple.WebKit: -[WebHTMLView(WebPrivate) _updateMouseoverWithFakeEvent] + 389
        
        Set _private->closed to YES before calling -[WebPluginController destroyAllPlugins].
        
        My theory is that the plug-in destruction callbacks could end up rescheduling timers or re-adding notifications.
        This is usually protected by _private->closed, but in this case it might still be false.

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

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

        Reviewed by John Sullivan.

        Remove WebSearchableTextView as it has been unused for some time now.

        * Misc/WebSearchableTextView.h: Removed.
        * Misc/WebSearchableTextView.m: Removed.

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

        Reviewed by John Sullivan.

        Don't leak the result of WKCopyCFLocalizationPreferredName when running under GC.

        * Misc/WebNSUserDefaultsExtras.m:
        (-[NSString _webkit_HTTPStyleLanguageCode]):

2008-07-02  Alexey Proskuryakov  <ap@webkit.org>

        Inspired and reviewed by Mark Rowe.

        Change non-API includes from JavaScriptCore/ to kjs/ and wtf/ to match prevalent style.

        * Carbon/HIViewAdapter.m:
        * DOM/WebDOMOperations.mm:
        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        * History/WebBackForwardList.mm:
        * History/WebHistory.mm:
        * History/WebHistoryItem.mm:
        * History/WebHistoryItemInternal.h:
        * Misc/WebCoreStatistics.mm:
        * Misc/WebDownload.m:
        * Misc/WebGraphicsExtras.c:
        * Misc/WebKitLogging.h:
        * Misc/WebKitSystemBits.m:
        * Misc/WebLocalizableStrings.m:
        * Misc/WebNSArrayExtras.m:
        * Misc/WebNSDataExtras.m:
        * Misc/WebNSDictionaryExtras.m:
        * Misc/WebNSFileManagerExtras.m:
        * Misc/WebNSPasteboardExtras.mm:
        * Misc/WebNSURLExtras.mm:
        * Misc/WebNSUserDefaultsExtras.m:
        * Panels/WebAuthenticationPanel.m:
        * Panels/WebPanelAuthenticationHandler.m:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.m:
        * Plugins/WebNetscapePluginEmbeddedView.mm:
        * Plugins/WebPluginContainerCheck.mm:
        * Plugins/WebPluginController.mm:
        * Plugins/WebPluginDatabase.mm:
        * WebCoreSupport/WebJavaScriptTextInputPanel.m:
        * WebCoreSupport/WebKeyGenerator.m:
        * WebCoreSupport/WebViewFactory.mm:
        * WebKitPrefix.h:
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebPDFRepresentation.m:
        * WebView/WebPDFView.mm:
        * WebView/WebScriptDebugger.mm:

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

        Reviewed by Darin Adler.

        Disable JSLock for per-thread contexts.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebBaseNetscapePluginView setWindowIfNecessary]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView createPluginScriptableObject]):
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebBaseNetscapePluginView loadPluginRequest:]):
        (-[WebBaseNetscapePluginView _printedPluginBitmap]):
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        Pass a parameter (always false) to JSLock and JSLock::DropAllLocks to indicate that WebKit
        doesn't need locking. In the future, it may be possible to remove some of these if we
        establish that this won't make JSC assertions fail (and that we don't want to add such
        assertions either).
        Added includes that are now needed.

2008-07-01  Kevin McCullough  <kmccullough@apple.com>

        Build fix.

        * WebView/WebView.mm:

2008-07-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use the PluginMainThreadScheduler, and implement NPN_PluginThreadAsyncCall.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView _createPlugin]):
        Register the plug-in instance.
        
        (-[WebBaseNetscapePluginView _destroyPlugin]):
        Unegister the plug-in instance.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        Set NPN_PluginThreadAsyncCall.
        
        * Plugins/npapi.mm:
        (NPN_PluginThreadAsyncCall):
        Implement this.

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

        Reviewed by Darin Adler.

        - WebKit part of moving the method to set the base writing direction from Frame to Editor

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView toggleBaseWritingDirection:]): Changed back to call the
        Editor method.
        (-[WebHTMLView changeBaseWritingDirection:]): Ditto.
        (-[WebHTMLView _changeBaseWritingDirectionTo:]): Ditto.

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

        Build fix: forgot to check in this file.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):

2008-06-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        - WebKit/mac part of <rdar://problem/3881497> Writing direction context menu item has no effect on text typed in Safari

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView toggleBaseWritingDirection:]): Changed to call
        WebCore::Frame::setSelectionBaseWritingDirection() instead of
        WebCore::Editor::setBaseWritingDirection().
        (-[WebHTMLView changeBaseWritingDirection:]): Ditto.
        (-[WebHTMLView _changeBaseWritingDirectionTo:]): Ditto.

2008-06-28  Darin Adler  <darin@apple.com>

        - fix build

        * WebView/WebView.mm:
        (aeDescFromJSValue): Use get instead of getItem, which no longer exists.

2008-06-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add a new MainThreadObjectDeallocator which can schedule dealloc calls on the main thread
        if necessary. Use this for the WebView class. 
                
        * WebView/MainThreadObjectDeallocator.h: Added.
        * WebView/MainThreadObjectDeallocator.mm: Added.
        (deallocCallback):
        (scheduleDeallocateOnMainThread):
        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]):
        (+[WebView initialize]):

2008-06-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.

        <rdar://problem/5984270> 
        REGRESSION (Tiger only) : Mail crashes because message load is being processed on a secondary thread
        
        * WebView/WebView.mm:
        (tigerMailReleaseIMP):
        New method that makes sure that the final release happens on the main thread.
        
        (-[WebView release]):
        New method that just calls [super release];
        
        (+[WebView initialize]):
        When running under Tiger mail, replace the release method with tigerMailReleaseIMP.

2008-06-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        Make Machine per-JSGlobalData.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):

2008-06-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Prepare JavaScript heap for being per-thread.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        Use JSGlobalData::threadInstance()->heap instead of static Collector calls.

2008-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Use create instead of new
        to create a CSSMutableStyleDeclaration.

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

        Reviewed by Darin Adler.

        <rdar://problem/5951874> WebHTMLHighlighter mistakenly gained two new methods, causing compile warnings

        _pauseNullEventsForAllNetscapePlugins and _resumeNullEventsForAllNetscapePlugins ended up being declared both in
        WebHTMLViewInternal.h and as members of the WebHTMLHighlighter protocol in WebHTMLViewPrivate.h.  They don't belong
        in the protocol, but they do need to be available outside of WebKit so they're being moved to the correct location
        in WebHTMLViewPrivate.h and removed from WebHTMLViewInternal.h.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]):
        (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebHTMLViewPrivate.h:

2008-06-15  Darin Adler  <darin@apple.com>

        - give Frame object functions shorter names: scriptProxy() -> script(),
          selectionController() -> selection(), animationController() -> animation()

        * Plugins/WebPluginController.mm:
        (-[WebPluginController webPlugInContainerSelectionColor]):
        * WebView/WebFrame.mm:
        (-[WebFrame _attachScriptDebugger]):
        (-[WebFrame _hasSelection]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        (-[WebFrame _convertToNSRange:]):
        (-[WebFrame _convertToDOMRange:]):
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebFrame _replaceSelectionWithText:selectReplacement:smartReplace:]):
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]):
        (-[WebFrame _selectedNSRange]):
        (-[WebFrame _selectNSRange:]):
        (-[WebFrame globalContext]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectedRange]):
        (-[WebHTMLView _hasSelection]):
        (-[WebHTMLView _hasSelectionOrInsertionPoint]):
        (-[WebHTMLView _hasInsertionPoint]):
        (-[WebHTMLView _isEditable]):
        (-[WebHTMLView _updateFocusedAndActiveState]):
        (-[WebHTMLView readSelectionFromPasteboard:]):
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView maintainsInactiveSelection]):
        (-[WebHTMLView paste:]):
        (isTextInput):
        (-[WebHTMLView inputContext]):
        (-[WebTextCompleteController doCompletion]):
        (-[WebHTMLView selectAll]):
        (-[WebHTMLView deselectAll]):
        (-[WebHTMLView selectedAttributedString]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebView setSelectedDOMRange:affinity:]):
        (-[WebView selectedDOMRange]):
        (-[WebView selectionAffinity]):

2008-06-15  Darin Adler  <darin@apple.com>

        - rename KJS::List to KJS::ArgList

        * WebView/WebScriptDebugger.h:

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for more JavaScriptCore files

        * WebView/WebView.mm:

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for a few key JavaScriptCore files

        * ForwardingHeaders/kjs/JSFunction.h: Copied from WebKit/mac/ForwardingHeaders/kjs/function.h.
        * ForwardingHeaders/kjs/JSObject.h: Copied from WebKit/mac/ForwardingHeaders/kjs/object.h.
        * ForwardingHeaders/kjs/JSString.h: Copied from WebKit/mac/ForwardingHeaders/kjs/internal.h.
        * ForwardingHeaders/kjs/JSValue.h: Copied from WebKit/mac/ForwardingHeaders/kjs/value.h.
        * ForwardingHeaders/kjs/function.h: Removed.
        * ForwardingHeaders/kjs/internal.h: Removed.
        * ForwardingHeaders/kjs/object.h: Removed.
        * ForwardingHeaders/kjs/value.h: Removed.
        * WebView/WebScriptDebugDelegate.mm:

2008-06-15  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - use JS prefix and simpler names for basic JavaScriptCore types,
          to complement JSValue and JSObject

        * WebView/WebView.mm:
        (aeDescFromJSValue):

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - new names for kjs_binding.h and kjs_proxy.h

        * WebView/WebFrame.mm:
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebView.mm:

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - renamed HTMLGenericFormElement to HTMLFormControlElement

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]):
        (-[WebHTMLRepresentation controlsInForm:]):

2008-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - more of https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createDocumentLoader): Use create instead of new.
        (WebFrameLoaderClient::createFrame): Remove now-obsolete adoptRef that was balanced by
        a ref call inside the Frame constructor. The lifetime rules for Frame are now the
        conventional ones without a special case.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _initWithDocumentLoader:]): Changed argument to be a PassRefPtr, since
        this function takes ownership of the DocumentLoader.
        (-[WebDataSource initWithRequest:]): Use create instead of new.
        * WebView/WebDataSourceInternal.h: Changed _initWithDocumentLoader argument to be a
        PassRefPtr and also cleaned up the header a bit.

        * WebView/WebDocumentLoaderMac.h:
        (WebDocumentLoaderMac::create): Added. Also made the constructor and a couple of virtual
        functions private.

        * WebView/WebFrame.mm:
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Use create instead
        of new.

2008-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - more work on https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * WebView/WebFrame.mm:
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2008-06-13  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for addition of FormState argument to action policy functions
        - added WebActionFormKey

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebFrameLoaderClient::actionDictionary):
        * WebKit.exp:
        * WebView/WebPolicyDelegate.mm:
        * WebView/WebPolicyDelegatePrivate.h:

2008-06-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan and Darin

        Clear up the confusion about _close (older private method) vs -close (newer public method).

        * WebView/WebView.mm:
        (-[WebView _isClosed]):
        simplified style
        (-[WebView _close]):
        added a comment about how clients and subclasses should use -close instead
        (-[WebView dealloc]):
        call -close instead of _close, so subclasses that override the public method will have the intended behavior
        (-[WebView close]):
        added a comment
        (-[WebView _windowWillClose:]):
        call -close instead of _close, so subclasses that override the public method will have the intended behavior

        * WebView/WebViewPrivate.h:
        added a comment about how clients and subclasses should use -close instead

2008-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - work on https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem init]):
        (-[WebHistoryItem initWithURLString:title:lastVisitedTimeInterval:]):
        (-[WebHistoryItem initWithURL:target:parent:title:]):
        (-[WebHistoryItem initWithURLString:title:displayTitle:lastVisitedTimeInterval:]):
        * WebView/WebView.mm:
        (+[WebView _decodeData:]):

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

        Reviewed by Tim.

        Bug 12983: Web Inspector break on the debugger keyword
        <https://bugs.webkit.org/show_bug.cgi?id=12983>

        Add stubs to allow old webkit debugger interface to build.

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:

2008-06-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5980961>
        
        In 64-bit Web Kit, converting between float and double, can cause rounding errors which in turn causes
        newBottom to be larger than oldBottom which is illegal.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):

2008-06-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Speculative fix for <rdar://problem/5661112> 
        CrashTracer: [USER] 49 crashes in DashboardClient at com.apple.WebCore: WebCore::RenderPart::setWidget + 62
        
        Defer loads while calling NPP_New. Some plug-ins start a run-loop inside NPP_New and finished loads could cause
        layouts to be triggered.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView _createPlugin]):

2008-05-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/5949462> REGRESSION: Can't paste screen captures into Mail
        
        AppKit started putting PNG instead of PICT onto the pasteboard for screen 
        captures.  Added support for PNG with kUTTypePNG.  Tiger doesn't support
        setting and retrieving pasteboard types with UTIs, but we don't know of any
        applications on Tiger that put only PNG on the pasteboard.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]):
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):

2008-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        <rdar://problem/5970312> 
        icon file specified for stand alone web app causes crash if the icon can't be found
        
        Handle the case where iconData is null.
        
        * Misc/WebIconFetcher.mm:
        (WebIconFetcherClient::finishedFetchingIcon):

2008-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5971845>
        https://bugs.webkit.org/show_bug.cgi?id=19313
        Add version member to NPCocoaEvent

        Initialize the version member to 0 for all events.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (initializeEvent):
        (WebNetscapePluginEventHandlerCocoa::drawRect):
        (WebNetscapePluginEventHandlerCocoa::sendMouseEvent):
        (WebNetscapePluginEventHandlerCocoa::flagsChanged):
        (WebNetscapePluginEventHandlerCocoa::sendKeyEvent):
        (WebNetscapePluginEventHandlerCocoa::windowFocusChanged):
        (WebNetscapePluginEventHandlerCocoa::focusChanged):

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

        Reviewed by Jessica Kahn.

        - fix <rdar://problem/5965013> Page 2 does not print correctly

        When printing, _recursiveDisplayRectIfNeededIgnoringOpacity:... and
        _recursiveDisplayAllDirtyWithLockFocus:... can be invoked without
        -viewWillDraw being sent first, which could lead to painting without
        valid layout. The fix is to ensure up-to-date layout in those methods
        when printing.

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

2008-05-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        Remove workaround, this is no longer a problem.
        
        * WebView/WebView.mm:
        (-[WebView _removeObjectForIdentifier:]):

2008-05-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=19183
        REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when
        clicking button in returnEvent-crash.html
        
        Added implementations for willExecuteProgram and didExecuteProgram, which
        take care of making sure we're not hanging on to stale data.

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-05-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5840884> _recursive_resumeNullEventsForAllNetscapePlugins and _pauseNullEvents not defined

        Follow-up for r33052.  _recursive_resumeNullEventsForAllNetscapePlugins and _recursive_pauseNullEventsForAllNetscapePlugins
        need to be declared in WebFramePrivate.h rather than WebFrameInternal.h so they can be used from outside of WebKit.

        * WebView/WebFrame.mm:
        (-[WebFrame _recursive_resumeNullEventsForAllNetscapePlugins]):
        (-[WebFrame _recursive_pauseNullEventsForAllNetscapePlugins]):
        * WebView/WebFrameInternal.h:
        * WebView/WebFramePrivate.h:

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

        Fix attaching and detaching the Web Inspector. This change removes
        the clunky animation that never looked right and was causing issues
        where the inspected WebView would get into a no useable state.

        <rdar://problem/5958812> Attaching and Detaching the Web Inspector
        can cause the inspected WebVIew to be unusable

        Reviewed by Adam Roben.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController close]): Removes animation code.
        Sets the frame directly and does a displayIfNeeded to prevent
        showing the Inspector in the page and in the Inspector window.
        (-[WebInspectorWindowController showWindow:]): Removes animation code.
        Sets the frame directly.
        (-[WebInspectorWindowController attach]): Simplified.
        (-[WebInspectorWindowController detach]): Ditto.

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

        Reviewed by Darin Adler.

        - fix broken documentation of
          webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:

        * WebView/WebUIDelegate.h: Fixed method name in HeaderDoc for
        -webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:

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

        <rdar://problem/5956403> Update the Develop menu to match the new Inspector items

        Reviewed by Adam Roben.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWebInspector:]):
        (-[WebInspectorWindowController showErrorConsole:]):
        (-[WebInspectorWindowController toggleDebuggingJavaScript:]):
        (-[WebInspectorWindowController toggleProfilingJavaScript:]):
        (-[WebInspectorWindowController validateUserInterfaceItem:]):
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector showConsole:]):
        (-[WebInspector showTimeline:]):
        (-[WebInspector isDebuggingJavaScript]):
        (-[WebInspector toggleDebuggingJavaScript:]):
        (-[WebInspector startDebuggingJavaScript:]):
        (-[WebInspector stopDebuggingJavaScript:]):
        (-[WebInspector isProfilingJavaScript]):
        (-[WebInspector toggleProfilingJavaScript:]):
        (-[WebInspector startProfilingJavaScript:]):
        (-[WebInspector stopProfilingJavaScript:]):

2008-05-22  Josh Aas  <joshmoz@gmail.com>

        Reviewed by Anders.

        <rdar://problem/5956429> 
        https://bugs.webkit.org/show_bug.cgi?id=19192
        remove NPNVpluginEventModel, fix example plugin
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView getVariable:value:]):

2008-05-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Add WebIconFetcher.
        
        * Misc/WebIconFetcher.h: Added.
        * Misc/WebIconFetcher.mm: Added.
        (WebIconFetcherClient::WebIconFetcherClient):
        (WebIconFetcherClient::finishedFetchingIcon):
        (WebIconFetcherClient::setFetcher):
        (-[WebIconFetcher init]):
        (-[WebIconFetcher dealloc]):
        (-[WebIconFetcher finalize]):
        (-[WebIconFetcher cancel]):
        (-[WebIconFetcher _initWithIconFetcher:client:]):
        (+[WebIconFetcher _fetchApplicationIconForFrame:target:selector:]):
        * Misc/WebIconFetcherInternal.h: Added.
        * WebView/WebFrame.mm:
        (-[WebFrame fetchApplicationIcon:selector:]):
        * WebView/WebFramePrivate.h:

=== End merge of squirrelfish ===

2008-05-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Tim Hatcher.
        
        Updated for API changes from merging with trunk WebCore's new debugger.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]): Explicitly check for an
        exception return, since the DebuggerCallFrame no longer automatically
        substitutes the exception for the return value.

        * WebView/WebScriptDebugger.mm: Use the dynamic global object, not the
        lexical global object, since the debugger attaches based on dynamic
        global object.

2008-05-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Re-enabled previously disabled debugging functionality.
        
        There are two major changes from how the WebKit debugger used to work:
        
        (1) All the interesting bits are implemented down in JavaScriptCore. The
        debugger just calls through to KJS::DebuggerCallFrame for everything.
        
        (2) Instead of copyihng a pointer to an ExecState once, the debugger
        copies the DebuggerCallFrame passed to it in each callback. This is
        because the VM no longer maintains a fully transparent execution state
        to which you can hold a pointer, and the DebuggerCallFrames it vends
        are temporaries.
        
        Also, we NULL out a WebScriptCallFrame's DebuggerCallFrame upon return
        from its function. This is safer than the old method, which was to
        hold a stale ExecState* and hope for the best.

2008-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Updated for API changes in KJS::Debugger.

        * WebView/WebFrame.mm:
        (-[WebFrame _attachScriptDebugger]): Changed the order of operations to
        fix an ASSERT that can happen when re-entering _attachScriptDebugger.

2008-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Updated WebScriptDebugger API to accept a SourceProvider instead
        of a WebCore::String, to avoid copying.

        (WebScriptDebugger::sourceParsed): Updated this function not to return
        a value.

2008-04-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix: #ifdef'd out some code that doesn't work anymore.

2008-04-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        #ifdef'd out some debugger code that doesn't work anymore.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2008-04-21  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * ChangeLog:
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2008-03-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Build fix.

=== Start merge of squirrelfish ===

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

        - fix build

        * WebView/WebViewPrivate.h: Remove declaration of closeWithFastTeardown. We can add it back later
        if we want, but if we do, we should probably make some refinements like checking _private->closed
        and applicationIsTerminating.

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

        Reviewed by Anders and Kevin Decker.

        - fix <rdar://problem/5951130> REGRESSION: crash on quit after reopening windows from previous session

        * WebView/WebView.mm:
        (-[WebViewPrivate dealloc]): Fix assertions to not complain when fast teardown is used.
        (-[WebView _closePluginDatabases]): Factored out some common code from both versions of close.
        (-[WebView _closeWithFastTeardown]): Added an underscore to this method's name, since it's internal.
        Streamlined the code a bit. Added a line of code to set _private->closed (this is the bug fix).
        (-[WebView _close]): Changed for new method name and to use _closePluginDatabases.

2008-05-19  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.
    
        more fast teardown performance work

        * Misc/WebDownload.m:
        (-[WebDownloadInternal downloadDidBegin:]):
        (-[WebDownloadInternal downloadDidFinish:]):
        (-[WebDownloadInternal download:didFailWithError:]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::disableSuddenTermination):
        (WebChromeClient::enableSuddenTermination):

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

        Reviewed by Sam Weinig.

        - fix <rdar://problem/5944596> IDNs are displayed as punycode in the authentication panel

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):

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

        Removes WebScriptDebugServer files and related calls. This removes
        the hooks that Drosera uses for debugging. Now that the Web Inspector
        has a better debugger, we don't need these anymore.

        Reviewed by Sam Weinig.

        * DefaultDelegates/WebScriptDebugServer.h: Removed.
        * DefaultDelegates/WebScriptDebugServer.m: Removed.
        * DefaultDelegates/WebScriptDebugServerPrivate.h: Removed.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebKit.exp:
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::sourceParsed):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        * WebView/WebViewPrivate.h:

2008-05-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/5942616> - Need to standardize LocalStorage persistence path

        Took the opportunity to touch up another pref that needs the same standardization.
        That pref is currently not in use on Mac.

        * WebView/WebPreferences.m:
        (-[WebPreferences _setFTPDirectoryTemplatePath:]):
        (-[WebPreferences _localStorageDatabasePath]):
        (-[WebPreferences _setLocalStorageDatabasePath:]):
        (-[WebPreferences _ftpDirectoryTemplatePath]):

2008-05-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Alice Liu

        <rdar://problem/5710317> REGRESSION:Selecting ranges of text should be possible using the keyboard (15310)

        * WebView/WebFrame.mm:
        (-[WebFrame _accessibilityTree]):

2008-05-15  Stephanie Lewis  <slewis@apple.com>
        
        fix mac build

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

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.

        Turn on fast teardown.  I added a preference for using full teardown because 
        the LEAKS output will be useless without a full teardown.  

        preference for fullteardown
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.m:
        (-[WebPreferences setFullDocumentTeardownEnabled:]):
        (-[WebPreferences fullDocumentTeardownEnabled]):
        * WebView/WebPreferencesPrivate.h:
        
        on application quit dispatch unload events and destroy plugins then exit
        * WebView/WebView.mm:
        (-[WebView closeWithFastTeardown]):
        (-[WebView _close]):
        * WebView/WebViewPrivate.h:

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.

        get the pending frame unload count from WebCore

        * WebView/WebFrame.mm:
        (-[WebFrame _pendingFrameUnloadEventCount]):
        * WebView/WebFramePrivate.h:

2008-05-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Kevin Decker
        
        - fixed <rdar://problem/5940275> Inspector highlighting moves to bottom-left corner of 
          screen when new tab appears
          
        The highlight should go away entirely, but this simple patch just makes it not jump away.
        The issue with it not going away entirely is harder to fix and covered by <rdar://problem/5322306>

        * WebInspector/WebNodeHighlight.m:
        (-[WebNodeHighlight _repositionHighlightWindow]):
        Bail out if target view isn't in a window

2008-05-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Anders.

        Track views that contain plugin instances so that they can be destroyed at application
        quit without walking the entire document tree.

        Add/Remove Netscape plugin views from instance list.  Start/stop are when netscape
        plugins are created and destroyed
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView stop]):
 
        Add/remove WebKit plugin views from instance list
        * Plugins/WebPluginController.mm:
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):

        Add a set of views with plugin instances to the WebPluginDatabase
        * Plugins/WebPluginDatabase.h:
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase init]):
        (-[WebPluginDatabase dealloc]):
        (-[WebPluginDatabase addPluginInstanceView:]):
        (-[WebPluginDatabase removePluginInstanceView:]):
        (-[WebPluginDatabase removePluginInstanceViewsFor:]):
        (-[WebPluginDatabase destroyAllPluginInstanceViews]):
        
        Handle cases where plugin views are detached before the plugin is destroyed.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::detachedFromParent2):
        (WebFrameLoaderClient::transitionToCommittedFromCachedPage):
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

        Add plugin instances to the set in the WebPluginDatabase by way of the WebView
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _destroyAllWebPlugins]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebView.mm:
        (-[WebView addPluginInstanceView:]):
        (-[WebView removePluginInstanceView:]):
        (-[WebView removePluginInstanceViewsFor:]):
        * WebView/WebViewInternal.h:

2008-05-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Until the settings/preferences equation can be reworked, we'll need to manually set the local storage path
        before setting the page group of the new page.
        
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Set the LocalStorage path 
          immediately after creating the page so it is in place for initializing the LocalStorageThread

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

        Fixes the bug where the Web Inspector would flash white while resizing.
        This was cause by deferring the window creation.

        <rdar://problem/5873549> REGRESSION: Inspector flickers horribly while resizing (17979)

        Reviewed by Darin Adler.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]): Don't defer the window creation.

2008-05-15  Alexey Proskuryakov  <ap@webkit.org>

        Tiger build fix.

        * Misc/WebNSAttributedStringExtras.mm: Import WebTypesInternal.h for NSUInteger.

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

        Reviewed and landed by Alexey.

        Use TextIterator in +[NSAttributedString _web_attributedStringFromRange:].

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]):

2008-05-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Add missing NULL check to match rest of file, this was found by the editing fuzzer.

        * WebView/WebResource.mm:
        (-[WebResource data]):

2008-05-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        NPP_ValidAttributesForMarkedText should return NSArray*, not NSArray.

        * Plugins/nptextinput.h:

2008-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Don't empty the application cache in _setCacheModel, since it will be called during initialization.
        Instead, do it in [WebCache empty].
        
        * Misc/WebCache.mm:
        (+[WebCache empty]):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2008-05-13  chris fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin

        <rdar://problem/4780592> WebKit application has its window announced as HTML content

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

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

        Fixes a crash seen in Xcode where CallUIDelegateReturningBoolean
        was referencing a nil WebView under validateUserInterfaceItem.
        The validateUserInterfaceItem methods was being called at a time
        when the WebHTMLView is being torndown.

        <rdar://problem/5806229> A crash occurs at CallUIDelegateReturningBoolean()
        while mousing down on menu bar after Xcode News window is opened

        Reviewed by Ada Chan.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItem:]): NULL check the WebView and
        return NO when it is nil. Adds a comment.
        * WebView/WebPDFView.mm:
        (-[WebPDFView validateUserInterfaceItem:]): Ditto.

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

        Reviewed by John Sullivan.

        <rdar://problem/5926425> HIWebViewCreateWithClass declared as API in HIWebView.h but never exported from WebKit.framework

        * Carbon/HIWebView.h: Remove HIWebViewCreateWithClass.
        * Carbon/HIWebView.m: Ditto.
        (HIWebViewCreate):
        (HIWebViewConstructor):

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

        Reviewed by Ada Chan.

        - WebKit/mac changes for https://bugs.webkit.org/show_bug.cgi?id=17097
          <rdar://problem/5715471> CGFontRefs (and HFONTs on Windows) leak because FontCache grows without bound

        Added font cache statistics and a function to purge inactive font data.

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics cachedFontDataCount]):
        (+[WebCoreStatistics cachedFontDataInactiveCount]):
        (+[WebCoreStatistics purgeInactiveFontData]):
        (+[WebCoreStatistics glyphPageCount]):

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

        Reviewed by Tim Hatcher.

        Decorate some deprecated delegate methods with the availability macros.

        The compiler doesn't appear to warn if a delegate implements these methods, but using the availability
        macros is good for consistency and documentation.

        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebUIDelegate.h:

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

        Reviewed by Tim Hatcher.

        <rdar://problem/5835604> Deprecate HIWebView

        Use of HIWebView is deprecated in favor of embedding a WebView in a HICocoaView.

        * Carbon/CarbonUtils.h: Include the availability macro header and decorate the functions appropriately.
        * Carbon/HIWebView.h: Ditto.

2008-05-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.

        Fixed: <rdar://problem/5840884>_recursive_resumeNullEventsForAllNetscapePlugins and _pauseNullEvents not defined
        
        Re-added these SPI methods because they are needed by some clients. They were accidentally removed
        in changeset <http://trac.webkit.org/changeset/31028>
        
        * Plugins/WebBaseNetscapePluginView.h: Added stopTimers, restartTimers to the header.
        * WebView/WebFrame.mm:
        (-[WebFrame _recursive_resumeNullEventsForAllNetscapePlugins]): Re-addd.
        (-[WebFrame _recursive_pauseNullEventsForAllNetscapePlugins]): Ditto.
        * WebView/WebFrameInternal.h: Ditto.
        * WebView/WebHTMLView.mm: Ditto.
        (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]): Ditto.
        (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]): Ditto.
        * WebView/WebHTMLViewInternal.h: Ditto.
        * WebView/WebHTMLViewPrivate.h: Ditto.

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey.

        Empty the application cache when changing the cache model.
        
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2008-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5774495> Make Unicode text input possible in Netscape-style plug-ins
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView start]):
        Get the plug-in text input vtable pointer.
        
        (-[WebBaseNetscapePluginView stop]):
        Set the plug-in text input vtable pointer to 0.
        
        (-[WebBaseNetscapePluginView inputContext]):
        Return 0 for Carbon plug-ins since we don't want Cocoa to handle text input for them.
        
        (-[WebBaseNetscapePluginView hasMarkedText]):        
        (-[WebBaseNetscapePluginView insertText:]):
        (-[WebBaseNetscapePluginView markedRange]):
        (-[WebBaseNetscapePluginView selectedRange]):
        (-[WebBaseNetscapePluginView setMarkedText:selectedRange:]):
        (-[WebBaseNetscapePluginView unmarkText]):
        (-[WebBaseNetscapePluginView validAttributesForMarkedText]):
        (-[WebBaseNetscapePluginView attributedSubstringFromRange:]):
        (-[WebBaseNetscapePluginView characterIndexForPoint:]):
        (-[WebBaseNetscapePluginView doCommandBySelector:]):
        (-[WebBaseNetscapePluginView firstRectForCharacterRange:]):
        (-[WebBaseNetscapePluginView conversationIdentifier]):
        Implement NSTextInput and call into the plug-in text input vtable.
        
        (browserTextInputFuncs):
        New method which returns the browser input vtable.
        
        (-[WebBaseNetscapePluginView getVariable:value:]):
        Support getting the browser input vtable pointer.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::keyDown):
        (WebNetscapePluginEventHandlerCocoa::sendKeyEvent):
        If the plug-in returns 0 when a NPCocoaEventKeyDown is passed to NPP_HandleEvent,
        it means that the event should be passed on to the input manager.
         
        * Plugins/npapi.mm:
        (NPN_MarkedTextAbandoned):
        (NPN_MarkedTextSelectionChanged):
        Add implementations of browser input method methods.
        
        * Plugins/nptextinput.h: Added.
        Add file with new text input API.

2008-05-12  Alexey Proskuryakov  <ap@webkit.org>

        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
        SquirrelFish merging.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):

2008-05-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        REGRESSION (3.1.1-TOT): Arrow keys are sticky in Google Maps street view
        https://bugs.webkit.org/show_bug.cgi?id=18880
        <rdar://problem/5909513>

        Stop suspending key up events before calling handleEvent.
        
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::sendEvent):

2008-05-06  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Andersca.

        prepare for plugin fast teardown work - make WebPluginDatabase a objective C++ file.

        * Plugins/WebPluginDatabase.m: Removed.
        * Plugins/WebPluginDatabase.mm: Copied from WebKit/mac/Plugins/WebPluginDatabase.m.
        * Plugins/npapi.m: Removed.
        * Plugins/npapi.mm: Copied from WebKit/mac/Plugins/npapi.m.

2008-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Initialize numArchs to 0.
        
        * Plugins/WebBasePluginPackage.m:
        (-[WebBasePluginPackage isNativeLibraryData:]):

2008-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add implementation of NPN_PopUpContextMenu.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView popUpContextMenu:]):
        * Plugins/WebBaseNetscapePluginViewPrivate.h:
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins/npapi.m:
        (NPN_PopUpContextMenu):

2008-05-06  Anders Carlsson  <andersca@apple.com>

        Fix typo (don't read random memory).
        
        * Plugins/WebBasePluginPackage.m:
        (-[WebBasePluginPackage isNativeLibraryData:]):

2008-05-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Change the isNativeLibraryData: method to handle universal binaries.
        
        * Plugins/WebBasePluginPackage.m:
        (swapIntsInHeader):
        (-[WebBasePluginPackage isNativeLibraryData:]):

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Preparation for upcoming work making LocalStorage persistent.

        When the application terminates, all LocalStorage areas must be sync'ed out to disk first.

        * WebView/WebView.mm:
        (+[WebView _applicationWillTerminate]):  Close all LocalStorage areas before quitting.

2008-05-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/5884383>
        Escape look-a-like characters from the the entire url.

        * Misc/WebNSURLExtras.mm:
        (escapeUnsafeCharacters):
        (-[NSURL _web_userVisibleString]):

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

        Reviewed by Darin Adler.
        
        <rdar://problem/5865171> REGRESSION: Creating a new quote places caret at beginning of quote instead of the end

        * WebView/WebView.mm:
        (-[WebView _updateSettingsFromPreferences:]): Disable Range mutation on changes to
        the document for Tiger and Leopard Mail.  There is code in Mail that does it, and
        the two interfere.

2008-05-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Make the Inspector's localizable strings file match the format used by Dashboard widgets.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::localizedStringsURL):

2008-05-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jess.

        Apparently preflighting can cause hangs for some reason. Revert this for now.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage _initWithPath:]):
        * Plugins/WebPluginPackage.m:
        (-[WebPluginPackage initWithPath:]):

2008-05-05  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - https://bugs.webkit.org/show_bug.cgi?id=18789
          fix some shouldCloseWithWindow edge cases

        * WebView/WebView.mm:
        (-[WebView viewWillMoveToWindow:]): Fix bug where we would stop observing the
        NSWindowWillCloseNotification if the view was moved out of the window but still
        had that window set as the host window. Also make sure this function doesn't do
        anything if the WebView is already closed.
        (-[WebView setHostWindow:]): Ditto.

2008-05-04  David Kilzer  <ddkilzer@apple.com>

        Make parameters match for WebChromeClient::addMessageToConsole()

        Reviewed by John.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::addMessageToConsole): Renamed sourceID parameter
        to sourceURL to match implementation in WebChromeClient.mm.

2008-05-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.

        Various Cocoa event model and 64-bit plug-in fixes.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::sendMouseEvent):
        Set click count.
        
        (WebNetscapePluginEventHandlerCocoa::flagsChanged):
        (WebNetscapePluginEventHandlerCocoa::sendKeyEvent):
        Don't try to get the mouse location for keyboard events.
        
        * Plugins/WebPluginPackage.m:
        (-[WebPluginPackage initWithPath:]):
        Preflight the bundle so we won't show 32-bit WebKit plug-ins when running as 64-bit.

2008-05-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        The event union is now named.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::drawRect):
        (WebNetscapePluginEventHandlerCocoa::sendMouseEvent):
        (WebNetscapePluginEventHandlerCocoa::flagsChanged):
        (WebNetscapePluginEventHandlerCocoa::sendKeyEvent):
        (WebNetscapePluginEventHandlerCocoa::windowFocusChanged):
        (WebNetscapePluginEventHandlerCocoa::focusChanged):

2008-05-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.

        Make sure that 32-bit only plug-ins aren't shown when running as 64-bit.
        
        Call preflightAndReturnError on the bundle, which will check if any of the architectures
        in the bundle match the current architecture.
        
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage _initWithPath:]):

2008-05-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=18826
        Make JavaScript heap per-thread

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        Replaced static Collector calls with calls to a current thread's instance.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        Pass ExecState to jsString().

2008-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark.

        64-bit NPAPI plugin build fixes.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebBaseNetscapePluginView updateAndSetWindow]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView windowBecameKey:]):
        * Plugins/WebNetscapeDeprecatedFunctions.c:
        * Plugins/WebNetscapeDeprecatedFunctions.h:
        * Plugins/WebNetscapePluginEventHandler.mm:
        (WebNetscapePluginEventHandler::create):
        * Plugins/WebNetscapePluginEventHandlerCarbon.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        * Plugins/WebPluginDatabase.m:
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]):

2008-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Tim.

        Remove duplicate npfunctions.h header from WebKit.

        * MigrateHeaders.make:
        Migrate npfunctions.h
        
        * Plugins/npfunctions.h: Removed.

2008-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.
        
        Add null checks for the event handler.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView stopTimers]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):

2008-05-01  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2008-05-01  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * Plugins/npfunctions.h:

2008-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Forward mouse move events to the Netscape plug-in view.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView handleMouseMoved:]):
        New method that just calls the current event handler.
        
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::flagsChanged):
        NSFlagsChanged is not a regular keyboard event and some of the NSEvent accessors
        don't work on it so don't call them.
        
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::NetscapePluginWidget):
        New Widget subclass to be used for Netscape plug-ins.
        
        (NetscapePluginWidget::handleEvent):
        Forward NSMouseMoved events to the plug-in.
        
        (WebFrameLoaderClient::createPlugin):
        Wrap the plug-in view in a NetscapePluginWidget.

2008-05-01  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Anders.

        GTK+ build fix for changes in r32752. Use int32, not int32_t types in
        npapi.h.

        Additional fix to use same signedness in npapi.h and Mac for the
        interval parameter.

        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (PluginTimer::PluginTimer):
        (-[WebBaseNetscapePluginView stopTimers]):
        (-[WebBaseNetscapePluginView restartTimers]):
        (-[WebBaseNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        (-[WebBaseNetscapePluginView unscheduleTimer:]):
        * Plugins/WebBaseNetscapePluginViewPrivate.h:
        * Plugins/npapi.m:
        (NPN_ScheduleTimer):
        (NPN_UnscheduleTimer):
        * Plugins/npfunctions.h:

2008-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add new Cocoa event model and the NPN_ScheduleTimer/NPN_UnscheduleTimer methods.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (PluginTimer::PluginTimer):
        (PluginTimer::start):
        (PluginTimer::fired):
        (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebBaseNetscapePluginView stopTimers]):
        (-[WebBaseNetscapePluginView restartTimers]):
        (-[WebBaseNetscapePluginView scrollWheel:]):
        (-[WebBaseNetscapePluginView flagsChanged:]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView eventModel]):
        (-[WebBaseNetscapePluginView fini]):
        (-[WebBaseNetscapePluginView getVariable:value:]):
        (-[WebBaseNetscapePluginView setVariable:value:]):
        (-[WebBaseNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        (-[WebBaseNetscapePluginView unscheduleTimer:]):
        * Plugins/WebBaseNetscapePluginViewInternal.h:
        * Plugins/WebBaseNetscapePluginViewPrivate.h:
        * Plugins/WebNetscapePluginEventHandler.h:
        * Plugins/WebNetscapePluginEventHandler.mm:
        (WebNetscapePluginEventHandler::create):
        * Plugins/WebNetscapePluginEventHandlerCarbon.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::scrollWheel):
        (WebNetscapePluginEventHandlerCarbon::flagsChanged):
        (WebNetscapePluginEventHandlerCarbon::platformWindow):
        * Plugins/WebNetscapePluginEventHandlerCocoa.h: Added.
        (WebNetscapePluginEventHandlerCocoa::startTimers):
        (WebNetscapePluginEventHandlerCocoa::stopTimers):
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm: Added.
        (WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa):
        (WebNetscapePluginEventHandlerCocoa::drawRect):
        (WebNetscapePluginEventHandlerCocoa::mouseDown):
        (WebNetscapePluginEventHandlerCocoa::mouseDragged):
        (WebNetscapePluginEventHandlerCocoa::mouseEntered):
        (WebNetscapePluginEventHandlerCocoa::mouseExited):
        (WebNetscapePluginEventHandlerCocoa::mouseMoved):
        (WebNetscapePluginEventHandlerCocoa::mouseUp):
        (WebNetscapePluginEventHandlerCocoa::scrollWheel):
        (WebNetscapePluginEventHandlerCocoa::sendMouseEvent):
        (WebNetscapePluginEventHandlerCocoa::keyDown):
        (WebNetscapePluginEventHandlerCocoa::keyUp):
        (WebNetscapePluginEventHandlerCocoa::flagsChanged):
        (WebNetscapePluginEventHandlerCocoa::sendKeyEvent):
        (WebNetscapePluginEventHandlerCocoa::windowFocusChanged):
        (WebNetscapePluginEventHandlerCocoa::focusChanged):
        (WebNetscapePluginEventHandlerCocoa::platformWindow):
        (WebNetscapePluginEventHandlerCocoa::sendEvent):
        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):
        * Plugins/npapi.m:
        (NPN_ScheduleTimer):
        (NPN_UnscheduleTimer):
        * Plugins/npfunctions.h:

2008-04-30  Brady Eidson  <beidson@apple.com>

        Fix my WebPreferences revert check-in

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

2008-04-30  Brady Eidson  <beidson@apple.com>

        Rubberstamped by John Sullivan

        Revert the remainder of my original preferences changes from last week.
        They caused a massive PLT regression (too many notifications being sent out
        or listened to that weren't previously) and it's not in my schedule to refine
        the preferences code instead of working on my feature!

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

2008-04-30  Anders Carlsson  <andersca@apple.com>

        Fix the 64-bit build.
        
        * Plugins/WebNetscapePluginEventHandler.h:
        * Plugins/WebNetscapePluginEventHandler.mm:
        * Plugins/WebNetscapePluginEventHandlerCarbon.h:
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:

2008-04-29  David D. Kilzer  <ddkilzer@apple.com>

        BUILD FIX for Release build.

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::drawRect): Declare acceptedEvent
        separately so the compiler doesn't complain about an unused variable.
        (WebNetscapePluginEventHandlerCarbon::TSMEventHandler): Ditto.

2008-04-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Refactor the Carbon event handling code out into a separate class in preparation for adding
        the Cocoa event handling code.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebBaseNetscapePluginView sendActivateEvent:]):
        (-[WebBaseNetscapePluginView sendDrawRectEvent:]):
        (-[WebBaseNetscapePluginView stopTimers]):
        (-[WebBaseNetscapePluginView restartTimers]):
        (-[WebBaseNetscapePluginView setHasFocus:]):
        (-[WebBaseNetscapePluginView mouseDown:]):
        (-[WebBaseNetscapePluginView mouseUp:]):
        (-[WebBaseNetscapePluginView mouseEntered:]):
        (-[WebBaseNetscapePluginView mouseExited:]):
        (-[WebBaseNetscapePluginView mouseDragged:]):
        (-[WebBaseNetscapePluginView keyUp:]):
        (-[WebBaseNetscapePluginView keyDown:]):
        (-[WebBaseNetscapePluginView cut:]):
        (-[WebBaseNetscapePluginView copy:]):
        (-[WebBaseNetscapePluginView paste:]):
        (-[WebBaseNetscapePluginView selectAll:]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView stop]):
        (-[WebBaseNetscapePluginView fini]):
        (-[WebBaseNetscapePluginView drawRect:]):
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]):
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]):
        (-[WebBaseNetscapePluginView windowBecameKey:]):
        (-[WebBaseNetscapePluginView windowResignedKey:]):
        (-[WebBaseNetscapePluginView windowDidMiniaturize:]):
        (-[WebBaseNetscapePluginView windowDidDeminiaturize:]):
        (-[WebBaseNetscapePluginView loginWindowDidSwitchFromUser:]):
        (-[WebBaseNetscapePluginView loginWindowDidSwitchToUser:]):
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        (-[WebBaseNetscapePluginView _viewHasMoved]):
        * Plugins/WebBaseNetscapePluginViewInternal.h:
        * Plugins/WebNetscapePluginEmbeddedView.h:
        * Plugins/WebNetscapePluginEventHandler.h: Added.
        (WebNetscapePluginEventHandler::~WebNetscapePluginEventHandler):
        (WebNetscapePluginEventHandler::currentEventIsUserGesture):
        (WebNetscapePluginEventHandler::WebNetscapePluginEventHandler):
        * Plugins/WebNetscapePluginEventHandler.mm: Added.
        (WebNetscapePluginEventHandler::create):
        * Plugins/WebNetscapePluginEventHandlerCarbon.h: Added.
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm: Added.
        (WebNetscapePluginEventHandlerCarbon::WebNetscapePluginEventHandlerCarbon):
        (getCarbonEvent):
        (modifiersForEvent):
        (WebNetscapePluginEventHandlerCarbon::sendNullEvent):
        (WebNetscapePluginEventHandlerCarbon::drawRect):
        (WebNetscapePluginEventHandlerCarbon::mouseDown):
        (WebNetscapePluginEventHandlerCarbon::mouseUp):
        (WebNetscapePluginEventHandlerCarbon::mouseEntered):
        (WebNetscapePluginEventHandlerCarbon::mouseExited):
        (WebNetscapePluginEventHandlerCarbon::mouseDragged):
        (WebNetscapePluginEventHandlerCarbon::mouseMoved):
        (WebNetscapePluginEventHandlerCarbon::keyDown):
        (keyMessageForEvent):
        (WebNetscapePluginEventHandlerCarbon::keyUp):
        (WebNetscapePluginEventHandlerCarbon::focusChanged):
        (WebNetscapePluginEventHandlerCarbon::windowFocusChanged):
        (WebNetscapePluginEventHandlerCarbon::TSMEventHandler):
        (WebNetscapePluginEventHandlerCarbon::installKeyEventHandler):
        (WebNetscapePluginEventHandlerCarbon::removeKeyEventHandler):
        (WebNetscapePluginEventHandlerCarbon::nullEventTimerFired):
        (WebNetscapePluginEventHandlerCarbon::startTimers):
        (WebNetscapePluginEventHandlerCarbon::stopTimers):
        (WebNetscapePluginEventHandlerCarbon::sendEvent):

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

        Reviewed by David Harrison.

        Ensure that WebDynamicScrollBarsView defines WebCoreScrollbarAlwaysOn to keep Mail building.

        * WebKit.exp:
        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.m:

2008-04-29  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT)

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebView/WebClipView.m:
        (-[WebClipView scrollWheel:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView addMouseMovedObserver]):
        (-[WebHTMLView removeMouseMovedObserver]):
        (-[WebHTMLView acceptsFirstMouse:]):
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):
        * WebView/WebViewPrivate.h:

2008-04-28  Rob Buis  <buis@kde.org>

        Reviewed by Maciej.

        Build fix for Tiger.

        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):

2008-04-28  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein, Tim Hatcher, Anders Carlsson, and Darin Adler.

        WebKit part of fix for <rdar://problem/3709505>
        Safari should have a way to upload bundles from the file upload control (as zip)

        Added UIDelegate methods to let the application handle generating replacement files for uploads.
        In this case, Safari will create archived files for bundles so they can be uploaded properly.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:shouldReplaceUploadFile:usingGeneratedFilename:]):
        (-[WebDefaultUIDelegate webView:generateReplacementFile:]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldReplaceWithGeneratedFileForUpload):
        (WebChromeClient::generateReplacementFile):
        * WebView/WebUIDelegatePrivate.h:

2008-04-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam, Mark, Adele and Darin.

        Initialize the application cache path.
        
        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2008-04-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/4911289> Add tabindex property to all children 
        of HTMLElement (7138)
        http://bugs.webkit.org/show_bug.cgi?id=7138

        * MigrateHeaders.make:
        Removing DOMHTMLLabelElementPrivate.h and DOMHTMLLegendElementPrivate.h
        because now that focus() has been moved to DOMHTMLElement.h, these
        files are no longer needed.

2008-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix run-webkit-tests --threading
        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
        Proxy server issue in Sunday's Nightly

        * WebView/WebView.mm: (-[WebViewPrivate init]): Initialize threading. Previously, this was
        only done from icon database code, which is not robust enough.

2008-04-20 Adam Barth <hk9565@gmail.com>

        Reviewed by Adam Roben and Sam Weinig.

        Updated WebSecurityOrigin to match new SecurityOrigin API.

        Collin Jackson <collinj-webkit@collinjackson.com> also contributed to this patch.

        * Storage/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin host]):
        (-[WebSecurityOrigin domain]):
        * Storage/WebSecurityOriginPrivate.h:

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

        Rubber-stamped by Sam Weinig.

        Add some content to an empty ICU header file to prevent verification errors.

        * icu/unicode/utf_old.h:

2008-04-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Add offlineWebApplicationCacheEnabled preference.
        
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]):
        (-[WebPreferences offlineWebApplicationCacheEnabled]):
        (-[WebPreferences setOfflineWebApplicationCacheEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _updateSettingsFromPreferences:]):

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

        Reviewed by Sam Weinig.

        Remove code for calculating the glyph cache size.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Remove unused symbol.

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

        Reviewed by Sam Weinig.

        Add a definition of BUILDING_ON_LEOPARD to complement BUILDING_ON_TIGER.

        * WebKitPrefix.h:

2008-04-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Fix layout test regressions from my earlier preferences/settings tweak.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Even if we're not posting
          the notification to update the settings, each WebView still needs to register for the
          notification - restore that behavior.

2008-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - preparation for https://bugs.webkit.org/show_bug.cgi?id=3729
          <rdar://problem/4036353> REGRESSION: arrow keys move insertion bar backwards in RTL text

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtNode:offset:affinity:]): Changed to use
        VisiblePosition::caretRect() instead of the RenderObject method which
        was removed.

2008-04-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Rework the Settings population again.

        * WebView/WebView.mm:
        (-[WebView _updateSettingsFromPreferences:]): This method is called both from _preferencesChangedNotification
          and directly from WebView's common init function.
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _commonInitializationWithFrameName:groupName:]): Call _updateSettingsFromPreferences immediately
          after creating the new Page

2008-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix crash in regression test where we'd ask a frame for a user agent string
          after the WebView was already closed

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::userAgent): Assert that the WebView is not nil. Also
        added some code to prevent the crash in release builds if this problem happens
        again.

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Change some String arguments to be const references instead.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldInsertText):

2008-04-24  John Sullivan  <sullivan@apple.com>

        Mac build fix
        
        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory AXButtonActionVerb]):
        implement this method using the text in WebCoreLocalizedStrings.cpp
        (-[WebViewFactory AXRadioButtonActionVerb]):
        ditto
        (-[WebViewFactory AXTextFieldActionVerb]):
        ditto
        (-[WebViewFactory AXCheckedCheckBoxActionVerb]):
        ditto
        (-[WebViewFactory AXUncheckedCheckBoxActionVerb]):
        ditto
        (-[WebViewFactory AXLinkActionVerb]):
        ditto

2008-04-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        In some current work I noticed that when a new Page is created, it is possible that it requires info from its Settings
        object before the Settings object is initialized.  It seems quite prudent to post the preferences changed notification,
        thereby populating the Settings object, immediately after the Page is created.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Post the notification right after the Page is created

2008-04-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Jess
        
        - fixed <rdar://problem/5886655> JavaScript input panel automatic resizing doesn't work right with HiDPI

        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]):
        deploy userSpaceScaleFactor when using view distances on the window

2008-04-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add NPN_Construct and NPN_PluginThreadAsyncCall declarations.
        
        * Plugins/npfunctions.h:

2008-04-20  Matt Lilek  <webkit@mattlilek.com>

        Mysteriously reviewed by mitz|away.

        Bug 18111: Closing a tab while dragging crashes Safari
        https://bugs.webkit.org/show_bug.cgi?id=18111

        Null check the page before handling drag events.

        * WebView/WebView.mm:
        (-[WebView draggingUpdated:]):
        (-[WebView draggingExited:]):

2008-04-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Add a WebPreference for the path of the local storage persistent store.

        * WebView/WebPreferenceKeysPrivate.h:

        * WebView/WebPreferences.m:
        (-[WebPreferences _localStorageDatabasePath]):
        (-[WebPreferences _setLocalStorageDatabasePath:]):
        * WebView/WebPreferencesPrivate.h:

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

2008-04-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Don't clear the PageGroup on _close, as the WebCore::Page destructor already does this.
        No reason to do the work twice...

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

2008-04-17  Eric Seidel  <eric@webkit.org>

        Reviewed by beth.

        Rename Frame::renderer() to contentRenderer() and fix uses.

        * Misc/WebCoreStatistics.mm:
        * WebView/WebRenderNode.mm:
        (-[WebRenderNode initWithWebFrameView:]):

2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by mrowe.

        * WebView/WebFrame.mm: Remove temporary build fix.

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

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/5863552> REGRESSION (r30741): Attachments don't appear in the iChat message window after sending

        The order of arguments to -[NSDictionary initWithObjects:andKeys:] had been transposed accidentally during refactoring.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Pass the arguments in the correct order.

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

        Rubber-stamped by Dan Bernstein.

        Fix the Mac build.

        * WebView/WebFrame.mm: Define HAVE_ACCESSIBILITY before including AccessibilityObject.h and AXObjectCache.h to get things building
        for now.  This comes from config.h in WebCore but we don't have an equivalent in WebKit so we'll need to work out the correct place
        for this to live going forward.

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-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.

        * Configurations/WebKit.xcconfig:

2008-04-15  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan

        Do a more complete job adding the "WebArchiveDebugMode" pref

        * WebView/WebPreferences.m: Add both getter *and* setter
        (-[WebPreferences webArchiveDebugModeEnabled]):
        (-[WebPreferences setWebArchiveDebugModeEnabled:]):
        * WebView/WebPreferencesPrivate.h:

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Call the renamed getter

2008-04-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Add a hidden pref to debug WebArchive loading.  With this pref on, when loading a WebArchive,
        if the resource isn't in the ArchiveResourceCollection, the loader will not fall back to the 
        network and will instead fail the load as "cancelled."

        * WebView/WebPreferenceKeysPrivate.h:

        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]):
        (-[WebPreferences _webArchiveDebugModeEnabled]):
        * WebView/WebPreferencesPrivate.h:

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

2008-04-11  David Hyatt  <hyatt@apple.com>

        Rename CachedResource ref/deref methods to addClient/removeClient.

        Reviewed by olliej

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]):
        (-[WebHTMLViewPrivate finalize]):
        (-[WebHTMLViewPrivate clear]):
        (-[WebHTMLView setPromisedDragTIFFDataSource:WebCore::]):

2008-04-07  Brady Eidson  <beidson@apple.com>

        Add "ENABLE_DOM_STORAGE" to keep in sync with the rest of the project

        * Configurations/WebKit.xcconfig:

2008-04-04  Adam Roben  <aroben@apple.com>

        Use WebCore's ICU headers instead of our own copy

        Rubberstamped by Tim Hatcher.

        * Configurations/WebKit.xcconfig: Pick up ICU headers from WebCore's
        PrivateHeaders.

2008-04-04  Adam Roben  <aroben@apple.com>

        Fix <rdar://problem/5804776> Would like to use WebCore's
        ForwardingHeaders in WebKit without manually creating copies

        Patch by Tim Hatcher, typed by me.

        * Configurations/WebKit.xcconfig: Use the copy of ForwardingHeaders in
        WebCore's PrivateHeaders instead of our own copy.

2008-04-04  Ada Chan  <adachan@apple.com>

        Now we pass width and height directly as integers to format
        the window title for a standalone image.

        Reviewed by Dan.

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory imageTitleForFilename:width:height:]):

2008-04-03  Nicholas Shanks  <webkit@nickshanks.com>

        Updated by Dan Bernstein. Reviewed by Dave Hyatt.

        - WebKit part of fixing http://bugs.webkit.org/show_bug.cgi?id=6484
          font-weight does not properly support graded weights

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _styleFromFontAttributes:]):
        (-[WebHTMLView _originalFontB]):
        (-[WebHTMLView _addToStyle:fontA:fontB:]):

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-03-31  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _accessibilityTree]):
        The syntax for fetching an object from the AXObjectCache changed slightly

2008-03-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Jon Honeycutt
        
        Move a WebArchive loading check into WebCore

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation receivedData:withDataSource:]): Don't check "isDisplayingWebArchive" as WebCore is now
          responsible for checking that state

2008-03-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin and Mitz's rubber stamp

        Remove dataForArchivedSelection(WebCore::Frame*) from the EditorClient - only usage is now directly in WebCore

        * WebCoreSupport/WebEditorClient.mm:
        * WebCoreSupport/WebEditorClient.h:

2008-03-28  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Darin Adler

        Remove WebArchiver.h/mm

        * WebView/WebArchiver.h: Removed.
        * WebView/WebArchiver.mm: Removed.

        * DOM/WebDOMOperations.mm:
        * WebCoreSupport/WebDragClient.mm:
        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebDataSource.mm:
        * WebView/WebHTMLView.mm:

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Now that WebCore can create archives from a frame selection directly, we don't need it in WebArchiver anymore

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::dataForArchivedSelection):

        * WebView/WebArchiver.h: Nuke archiveSelectionInFrame, as there are no remaining users
        * WebView/WebArchiver.mm: Ditto

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _writeSelectionWithPasteboardTypes:toPasteboard:cachedAttributedString:]):

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        More Kit->Core WebArchive changes.

        Create an archive from the current selection in a frame

        * WebView/WebArchiver.mm: Remove one more *undeclared* method, the last method will drop off
          easily in a followup

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        WebArchive saga continues - Can now make archives from ranges in WebCore

        * DOM/WebDOMOperations.mm:
        (-[DOMRange webArchive]):
        (-[DOMRange markupString]):

        * WebView/WebArchiver.h: Remove newly obsolete [WebArchiver archiveRange:]
        * WebView/WebArchiver.mm:

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        More Kit->Core webarchive code movement

        * DOM/WebDOMOperations.mm:
        (-[DOMNode markupString]): Call createFullMarkup() instead

        * WebView/WebFrame.mm: Remove obsolete _markupStringFromNode
        * WebView/WebFrameInternal.h: Ditto

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Fold [WebArchiver archiveFrame:] into WebDataSource - the last remaining caller

        * WebView/WebArchiver.h:
        * WebView/WebArchiver.mm:
        * WebView/WebDataSource.mm:
        (-[WebDataSource webArchive]):

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Remove unused [WebArchiver archiveNode:], made obsolete in r31400

        * WebView/WebArchiver.h:
        * WebView/WebArchiver.mm:

2008-03-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        "Yet another transitional step" to empty out WebKit-based code for archiving.

        With this patch, the key operation of "Creating a WebArchive rooted at a single Node" takes place
        entirely within WebCore, and opens the door to saving WebArchives on Windows.

        * DOM/WebDOMOperations.mm:
        * WebView/WebArchiver.mm:
        (+[WebArchiver _archiveWithMarkupString:fromFrame:nodes:]):

2008-03-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Move [WebDataSource mainResource] and [WebDataSource subresources] down into WebCore
        as the push to core-ify WebArchives continues.

        This patch also introduces a behavior change.  WebCore allows ArchiveResources with null or empty data.  
        WebKit has had the inexplicable distinction of allowing empty Data in a WebResource, but not null.  
        Since WebResource is API, I decided to leave it be to avoid a behavior change.  But internally created resources 
        (as in "while archiving a page") are accepting of null or empty data.

        This actually fixes a bug where not all subframes are archived, and resulted in a layout test change. 

        * WebView/WebDataSource.mm:
        (-[WebDataSource mainResource]): Call DocumentLoader implementation
        (-[WebDataSource subresources]): Ditto
        * WebView/WebFrame.mm: Remove [WebFrame _getAllResourceDatas:andResponses:] as its only caller is obsolete
        * WebView/WebFrameInternal.h:

2008-03-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Change the "init from WebCore resource" version of WebResource to take PassRefPtr
        (more efficient)

        * WebView/WebResource.mm:
        (-[WebResource _initWithCoreResource:]):
        * WebView/WebResourceInternal.h:

2008-03-26  Brady Eidson  <beidson@apple.com>

        Build fix - accidentally checked in this change which was work in progress

        * DOM/WebDOMOperations.mm:

2008-03-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        When we create a WebArchive, we walk every node from some starting point, asking each node
        along the way "What are your subresource URLs?"

        That logic is currently in DOMNode in WebKitMac - this patch moves that ability down into
        WebCore::Node

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _subresourceURLs]): One generic DOMNode method can now handle all DOMNodes by
          calling into individual WebCore::Node implementations
        * DOM/WebDOMOperationsPrivate.h:

2008-03-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe

        Part of the continued push to move WebArchive-related code down to WebCore, this
        moves [WebDataSource subresourceForURL:] down to DocumentLoader->subresource()

        * WebView/WebDataSource.mm:
        (-[WebDataSource subresourceForURL:]): Call through to the DocumentLoader 

        * WebView/WebFrame.mm: Remove [WebFrame _getData:andResponse:forURL:], as its only use
          has now been ported down to WebCore
        * WebView/WebFrameInternal.h:

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

        Rubber-stamped by Brady Eidson.

        Update FEATURE_DEFINES to be consistent with the other locations in which it is defined.

        * Configurations/WebKit.xcconfig:

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

        Reviewed by David Hyatt.

        Make the Ahem font antialias correctly on Acid3 on Tiger.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

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

        Fix the Mac build.

        * MigrateHeaders.make: Copy the newly generated header into the right place.

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Beth Dakin

        Remove entirely unused internal method

        * WebView/WebArchiver.h:
        * WebView/WebArchiver.mm:

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        <rdar://problem/5819308> - View Source is empty when view webarchives

        * WebCore.base.exp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setParsedArchiveData):
        (WebCore::DocumentLoader::parsedArchiveData):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument): Set the archive's MainResource data as the parsedArchiveData
          in the DocumentLoader

2008-03-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17933
          Reopen All Windows From Last Session causes crash

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]): Added null
        check.

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Jon Honeycutt's rubberstamp

        Fix a leak with the new WebArchive setup

        * WebView/WebArchive.mm:
        (-[WebArchivePrivate setCoreArchive:]): Deref() the old WebArchive

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Removed the concept of "pending archive resources" and the "archive resources delivery timer"
        from WebFrameLoaderClient, as those concepts have been pushed into WebCore

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

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Remove newly obsolete FrameLoaderClient methods

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2008-03-25  Brady Eidson  <beidson@apple.com>

        Release build fix

        * WebView/WebArchive.mm:
        (-[WebArchive subresources]):
        (-[WebArchive subframeArchives]):

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        <rdar://problem/4516169> - Support WebArchives on Windows
        And paves the way for many future WebArchive bug fixes and enhancements

        This change moves most of the real workhorse code about WebArchives into WebCore.  It maintains 
        1-to-1 relationships between a few objects in WebCore and WebKit.  Such as:
         * WebArchive <-> LegacyWebArchive
         * WebResource <-> ArchiveResource
         * WebUnarchivingState <-> ArchiveResourceCollection
 
        The other biggest changes involve many FrameLoaderClient methods that existed soley for WebArchives 
        and now exist in WebCore

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::clearUnarchivingState): Emptied - to be removed in a followup patch
        (WebFrameLoaderClient::finalSetupForReplace):
        (WebFrameLoaderClient::setDefersLoading):
        (WebFrameLoaderClient::willUseArchive):
        (WebFrameLoaderClient::isArchiveLoadPending):
        (WebFrameLoaderClient::cancelPendingArchiveLoad):
        (WebFrameLoaderClient::clearArchivedResources):
        (WebFrameLoaderClient::createFrame):

        * WebView/WebArchive.mm:
        (+[WebArchivePrivate initialize]):
        (-[WebArchivePrivate init]):
        (-[WebArchivePrivate initWithCoreArchive:]):
        (-[WebArchivePrivate coreArchive]):
        (-[WebArchivePrivate setCoreArchive:]):
        (-[WebArchivePrivate dealloc]):
        (-[WebArchivePrivate finalize]):
        (-[WebArchive init]):
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
        (-[WebArchive initWithData:]):
        (-[WebArchive initWithCoder:]):
        (-[WebArchive encodeWithCoder:]):
        (-[WebArchive mainResource]):
        (-[WebArchive subresources]):
        (-[WebArchive subframeArchives]):
        (-[WebArchive data]):
        (-[WebArchive _initWithCoreLegacyWebArchive:WebCore::]):
        (-[WebArchive WebCore::]):
        * WebView/WebArchiveInternal.h: Added.

        * WebView/WebDataSource.mm:
        (-[WebDataSourcePrivate dealloc]):
        (-[WebDataSource _addSubframeArchives:]):
        (-[WebDataSource _documentFragmentWithArchive:]):
        (-[WebDataSource subresourceForURL:]):
        (-[WebDataSource addSubresource:]):
        * WebView/WebDataSourceInternal.h:

        * WebView/WebFrame.mm:
        (-[WebFrame loadArchive:]):
        * WebView/WebFrameInternal.h:

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):

        * WebView/WebResource.mm:
        (+[WebResourcePrivate initialize]):
        (-[WebResourcePrivate init]):
        (-[WebResourcePrivate initWithCoreResource:]):
        (-[WebResourcePrivate dealloc]):
        (-[WebResourcePrivate finalize]):
        (-[WebResource initWithCoder:]):
        (-[WebResource encodeWithCoder:]):
        (-[WebResource data]):
        (-[WebResource URL]):
        (-[WebResource MIMEType]):
        (-[WebResource textEncodingName]):
        (-[WebResource frameName]):
        (-[WebResource _initWithCoreResource:WebCore::]):
        (-[WebResource WebCore::]):
        (-[WebResource _ignoreWhenUnarchiving]):
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]):
        (-[WebResource _fileWrapperRepresentation]):
        (-[WebResource _response]):
        (-[WebResource _stringValue]):
        * WebView/WebResourceInternal.h: Added.
        * WebView/WebResourcePrivate.h:

        * WebView/WebUnarchivingState.h: Removed.
        * WebView/WebUnarchivingState.m: Removed.

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

        Reviewed by Mark Rowe.

        Bug 18030: REGRESSION(r31236): Space bar fails to scroll down page
        <http://bugs.webkit.org/show_bug.cgi?id=18030>

        Rollout keyDown changes from r31236 -- fix for keyDown behaviour is
        tracked by Bug 18057: keyDown incorrectly propagates up the frame tree
        <http://bugs.webkit.org/show_bug.cgi?id=18057>

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

2008-03-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej, landed by Brady

        Bug 3580: iFrames Appear to be Cached
        <http://bugs.webkit.org/show_bug.cgi?id=3580>

        Bug 15486: REGRESSION: Reload causes WebKit to *forget* fragment URLs
        <http://bugs.webkit.org/show_bug.cgi?id=15486>

        Bug 15554: Reload causes <object> to use old data
        <http://bugs.webkit.org/show_bug.cgi?id=15554>

        If a page is reloaded, a child frame's URL can not be taken from a history item.

        * WebView/WebFrame.mm:
        (-[WebFrame _loadURL:referrer:intoChild:]):

2008-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix <rdar://problem/5817067> -[WebDataSource unreachableURL] invokes KURL's copy constructor

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem URL]): Use a reference to avoid making a copy.
        * WebView/WebDataSource.mm:
        (-[WebDataSource _URL]): Ditto.
        (-[WebDataSource unreachableURL]): Ditto.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Ditto.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * History/WebHistory.mm:
        * Misc/WebElementDictionary.mm:
        * Misc/WebNSAttributedStringExtras.mm:
        Remove unneeded imports of KURL.h.

2008-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin's rubberstamp

        Rename this file for upcoming work.

        * WebView/WebArchive.m: Removed.
        * WebView/WebArchive.mm: Copied from WebKit/mac/WebView/WebArchive.m.

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

        Build fix.

        * MigrateHeaders.make: Added DOMSVGAltGlyphElement.h and DOMSVGAltGlyphElementInternal.h.

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

        Reviewed by Maciej.

        Bug 17670: Key events may improperly propagate from iframe to parent frame
        <http://bugs.webkit.org/show_bug.cgi?id=17670>
        Bug 16381: REGRESSION: Shift, command, option, ctrl keys in Gmail Rich Text changes focus
        <http://bugs.webkit.org/show_bug.cgi?id=16381>

        Prevent the Cocoa event system from propagating key events to the parent WebHTMLView,
        as that results in us dispatching the key events for each frame going up the frame
        tree.

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

2008-03-21  Timothy Hatcher  <timothy@apple.com>

        Bug 17980: Regression: Inspector highlighting of webpage not cleared when going to new URL
        http://bugs.webkit.org/show_bug.cgi?id=17980

        Reviewed by Adam.

        The new highlight drawing was not honoring the fade value, so it was
        always drawing at full opacity. The animation code didn't match Windows
        and the new highlight anyway, so it has been removed. The highlight
        how just detaches when it is hidden.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController windowShouldClose:]): Call hideHighlight.
        (-[WebInspectorWindowController close]): Ditto.
        (-[WebInspectorWindowController highlightNode:]): Call attach.
        (-[WebInspectorWindowController hideHighlight]): Call detach and release _currentHighlight.
        * WebInspector/WebNodeHighlight.h:
        * WebInspector/WebNodeHighlight.m:
        (-[WebNodeHighlight initWithTargetView:inspectorController:]):
        (-[WebNodeHighlight dealloc]): Assert we have no _highlightView.
        (-[WebNodeHighlight attach]): Renamed from attachHighlight.
        (-[WebNodeHighlight detach]): Renamed from detachHighlight.
        (-[WebNodeHighlight setNeedsUpdateInTargetViewRect:]): Renamed from setHolesNeedUpdateInTargetViewRect:.
        * WebInspector/WebNodeHighlightView.h:
        * WebInspector/WebNodeHighlightView.m:
        (-[WebNodeHighlightView setNeedsDisplayInRect:]): Renamed from setHolesNeedUpdateInRect:.

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

        Reviewed by Sam Weinig.

        Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit.
        This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
        command-line.

        * Configurations/WebKit.xcconfig:

2008-03-20  Adam Roben  <aroben@apple.com>

        Make WebNodeHighlightView use InspectorController to do its painting

        Reviewed by Tim Hatcher.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController highlightNode:]): Pass the
        InspectorController to the WebNodeHighlight, and don't call
        setHighlightedNode: (which has been removed).
        (-[WebInspectorWindowController hideHighlight]): Removed call to
        setHighlightedNode:.
        * WebInspector/WebNodeHighlight.h:
          - Replaced _highlightNode with _inspectorController
          - Removed _highlightedNode accessors
          - Added -inspectorController method
        * WebInspector/WebNodeHighlight.m:
        (-[WebNodeHighlight initWithTargetView:inspectorController:]): Now
        takes an InspectorController* and stores it in _inspectorController.
        (-[WebNodeHighlight dealloc]): Removed code dealing with
        _highlightedNode.
        (-[WebNodeHighlight inspectorController]): Added.
        * WebInspector/WebNodeHighlightView.m: Removed FileInternal category.
        (-[WebNodeHighlightView isFlipped]): Added. WebCore expects all
        GraphicsContexts to be based on a flipped CGContext, so we have to
        specify that this view is flipped.
        (-[WebNodeHighlightView drawRect:]): Changed to create a
        GraphicsContext and pass it to InspectorController::drawNodeHighlight.

2008-03-18  David Hyatt  <hyatt@apple.com>

        Add support for a preference in WebKit that can be used in nightly builds to test full page
        zoom.

        Reviewed by Antti

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebView.mm:
        (-[WebView setTextSizeMultiplier:]):
        (-[WebView canMakeTextSmaller]):
        (-[WebView makeTextSmaller:]):
        (-[WebView canMakeTextLarger]):
        (-[WebView makeTextLarger:]):
        (-[WebView canMakeTextStandardSize]):
        (-[WebView makeTextStandardSize:]):

2008-03-17  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Export _NPN_IntFromIdentifier as part of our NPAPI interface

        * Plugins/WebNetscapePluginPackage.m:
        (-[WebNetscapePluginPackage load]):

2008-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Brian Dash's rubberstamp

        Remove a class declaration for a class that has never existed

        * WebView/WebResource.h:

2008-03-14  David D. Kilzer  <ddkilzer@apple.com>

        Unify concept of enabling the Mac Java bridge.

        Reviewed by Darin and Anders.

        * Plugins/WebPluginJava.h: Removed unused file.
        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::javaApplet): Added #if ENABLE(MAC_JAVA_BRIDGE) guard.
        * WebCoreSupport/WebFrameLoaderClient.mm: Ditto for #import and NSView SPI method.
        (WebFrameLoaderClient::javaApplet): Ditto.

2008-03-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        * ForwardingHeaders/wtf/Deque.h: Added.

2008-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Call originalRequest, not initialRequest.
        
        * WebView/WebDataSource.mm:
        (-[WebDataSource initialRequest]):

2008-03-12  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - cleanup after removing the bridge

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument URLWithAttributeString:]): Call computeURL directly.

        * Misc/WebCoreStatistics.mm:
        (-[WebFrame renderTreeAsExternalRepresentation]): Call externalRepresentation directly.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView loadPluginRequest:]): Use core function instead of
        _frameLoader method.
        (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        Ditto.
        * Plugins/WebPluginController.mm:
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]): Ditto.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::frameLoaderDestroyed): Added a call to the new _clearCoreFrame
        method. Without this we could leave a stale frame pointer around.
        (WebFrameLoaderClient::dispatchDidReceiveIcon): Rewrote assertion so it's not the single
        caller of the _isMainFrame method.
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Use core function instead of
        _frameLoader method.
        (WebFrameLoaderClient::createFrame): Moved code here from _addChild.

        * WebView/WebFrame.mm: Removed lots of methods. Some were moved elsewhere, others
        turned out to be unused.
        (core): Added overload for DocumentFragment.
        (kit): Ditto.
        (-[WebFrame _loadURL:referrer:intoChild:]): Get to Frame using _private->coreFrame and
        to FrameLoader with _private->coreFrame->loader().
        (-[WebFrame _attachScriptDebugger]): Ditto.
        (-[WebFrame _clearCoreFrame]): Added.
        (-[WebFrame _updateBackground]): More of the same.
        (-[WebFrame _unmarkAllBadGrammar]): Ditto.
        (-[WebFrame _unmarkAllMisspellings]): Ditto.
        (-[WebFrame _hasSelection]): Ditto.
        (-[WebFrame _atMostOneFrameHasSelection]): Ditto.
        (-[WebFrame _findFrameWithSelection]): Ditto.
        (-[WebFrame _dataSource]): Ditto.
        (-[WebFrame _addData:]): Streamlined code a bit.
        (-[WebFrame _replaceSelectionWithText:selectReplacement:smartReplace:]): Ditto.
        (-[WebFrame _receivedData:textEncodingName:]): Ditto.
        (-[WebFrame _isDescendantOfFrame:]): Ditto.
        (-[WebFrame _bodyBackgroundColor]): Ditto.
        (-[WebFrame _isFrameSet]): Ditto.
        (-[WebFrame _firstLayoutDone]): Ditto.
        (-[WebFrame _loadType]): Ditto.
        (-[WebFrame _isDisplayingStandaloneImage]): Ditto.
        (-[WebFrame name]): Ditto.
        (-[WebFrame DOMDocument]): Ditto.
        (-[WebFrame frameElement]): Ditto.
        (-[WebFrame provisionalDataSource]): Ditto.
        (-[WebFrame dataSource]): Ditto.
        (-[WebFrame loadRequest:]): Ditto.
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]): Ditto.
        (-[WebFrame loadArchive:]): Ditto.
        (-[WebFrame stopLoading]): Ditto.
        (-[WebFrame reload]): Ditto.
        (-[WebFrame findFrameNamed:]): Ditto.
        (-[WebFrame parentFrame]): Ditto.
        (-[WebFrame childFrames]): Ditto.
        (-[WebFrame windowObject]): Ditto.
        (-[WebFrame globalContext]): Ditto.

        * WebView/WebFrameInternal.h: Added overloads of core and kit.
        Removed method declarations.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation documentSource]): Moved code here from WebFrame.
        (formElementFromDOMElement): Ditto.
        (-[WebHTMLRepresentation elementWithName:inForm:]): Ditto.
        (inputElementFromDOMElement): Ditto.
        (-[WebHTMLRepresentation elementDoesAutoComplete:]): Ditto.
        (-[WebHTMLRepresentation elementIsPassword:]): Ditto.
        (-[WebHTMLRepresentation formForElement:]): Ditto.
        (-[WebHTMLRepresentation currentForm]): Ditto.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.
        (-[WebHTMLRepresentation searchForLabels:beforeElement:]): Ditto.
        (-[WebHTMLRepresentation matchLabels:againstElement:]): Ditto.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]): Moved sendScrollEvent code here from WebFrame.
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):
        Call createFragmentFromText directly instead of via WebFrame.
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        Moved layout calls here from WebFrame.
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Ditto.
        (-[WebHTMLView _updateFontPanel]): Ditto, but with fontForSelection.
        (-[WebHTMLView _canSmartCopyOrDelete]): Ditto, but with selectionGranularity.
        (-[WebHTMLView markedRange]): Moved code here from _markedTextNSRange.
        (-[WebHTMLView attributedSubstringFromRange:]): Tweaked code a bit.
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]):
        Moved code here from WebFrame.
        (-[WebHTMLView elementAtPoint:allowShadowContent:]): Ditto.
        (-[WebHTMLView markAllMatchesForText:caseSensitive:limit:]): Ditto.
        (-[WebHTMLView setMarkedTextMatchesAreHighlighted:]): Ditto.
        (-[WebHTMLView markedTextMatchesAreHighlighted]): Ditto.
        (-[WebHTMLView unmarkAllTextMatches]): Ditto.
        (-[WebHTMLView rectsForTextMatches]): Ditto.

        * WebView/WebHTMLViewInternal.h: Removed unused method declarations.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Use core function instead of
        _frameLoader method.

        * WebView/WebRenderNode.mm:
        (copyRenderNode): Moved code here from WebFrame.
        (-[WebRenderNode initWithWebFrameView:]): Ditto.

        * WebView/WebResource.mm:
        (-[WebResource _stringValue]): Moved code here from WebFrame.

        * WebView/WebView.mm:
        (-[WebView _close]): Use core function intsead of _frameLoader method.
        (-[WebView setCustomTextEncodingName:]): Ditto.
        (-[WebView setHostWindow:]): Moved code here from WebFrame.
        (aeDescFromJSValue): Moved this here from WebFrame.
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]): Moved code here from WebFrame.

2008-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=17640
          eliminate WebCoreFrameBridge

        Moved all the code from the bridge into WebFrame. This need not be the final
        home of these methods -- they can be moved closer to their callers and improved
        further -- but it eliminates the bridge without requiring a rewrite of the code.
        It's a fairly mechanical process (just adding underscores to method names really).

        There's even a chance that some of the methods are unused. Those we can remove
        after checking if that's so.

        * DOM/WebDOMOperations.mm:
        (-[DOMNode markupString]): Use WebFrame rather than bridge.
        (-[DOMDocument webFrame]): Changed to use the core and kit functions
        instead of using the bridge.
        (-[DOMDocument URLWithAttributeString:]): Use WebFrame rather than bridge.
        (-[DOMRange markupString]): Ditto.
        * DOM/WebDOMOperationsPrivate.h: Removed _bridge methods.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm: Removed unneeded import.
        * History/WebHistoryItem.mm: Ditto.

        * MigrateHeaders.make: Added DOMDocumentFragmentInternal.h.
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame renderTreeAsExternalRepresentation]): Use WebFrame rather than bridge.

        * Misc/WebElementDictionary.mm: Removed unneeded import.

        * Misc/WebKitStatistics.m:
        (+[WebKitStatistics bridgeCount]): Removed WebBridgeCount and just return 0.
        * Misc/WebKitStatisticsPrivate.h: Ditto.

        * Misc/WebNSAttributedStringExtras.mm: Removed unneeded import.
        * Misc/WebNSPasteboardExtras.mm: Ditto.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]): Use WebFrame
        rather than bridge.

        * Plugins/WebNetscapePluginEmbeddedView.mm: Removed unneeded import.
        * Plugins/WebNetscapePluginStream.mm: Ditto.

        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck _isForbiddenFileLoad]): Use WebFrame rather than
        bridge to get to the WebCore::Frame.

        * Plugins/WebPluginController.h: Declare webFrame method and remove bridge method.
        * Plugins/WebPluginController.mm:
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]): Use WebFrame
        rather than bridge.

        * WebCoreSupport/WebEditorClient.mm:
        (selectorForKeyEvent): Tweaked comment.

        * WebCoreSupport/WebFrameBridge.h: Removed.
        * WebCoreSupport/WebFrameBridge.mm: Removed.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::frameLoaderDestroyed): Removed bridge assertion.
        (WebFrameLoaderClient::detachedFromParent4): Removed bridge teardown code.
        I could remove this function entirely, but it looks like the Qt port is using it.

        * WebCoreSupport/WebViewFactory.mm: Removed unneeded import.

        * WebView/WebArchiver.mm:
        (+[WebArchiver archiveRange:]): Use WebFrame rather than bridge.
        (+[WebArchiver archiveNode:]): Ditto.
        (+[WebArchiver archiveSelectionInFrame:]): Ditto.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _replaceSelectionWithArchive:selectReplacement:]): Ditto.
        (-[WebDataSource _documentFragmentWithArchive:]): Ditto.
        (-[WebDataSource subresources]): Ditto.
        (-[WebDataSource subresourceForURL:]): Ditto.

        * WebView/WebDataSourceInternal.h: Removed _bridge method.

        * WebView/WebFrame.mm:
        (-[WebFramePrivate dealloc]): Removed code to release the bridge.
        (core): Go directly to the core frame, not via the bridge.
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]):
        Remove the code to deal with the bridge.
        (-[WebFrame _initWithWebFrameView:webView:]): Ditto. Also added code to set the
        shouldCreateRenderers flag, formerly on the bridge.
        (-[WebFrame _updateBackground]): Change to call mehods on self, not bridge.
        (aeDescFromJSValue): Moved here from bridge.
        (-[WebFrame _domain]): Ditto.
        (-[WebFrame _addData:]): Ditto.
        (-[WebFrame _stringWithDocumentTypeStringAndMarkupString:]): Ditto.
        (-[WebFrame _nodesFromList:]): Ditto.
        (-[WebFrame _markupStringFromNode:nodes:]): Ditto.
        (-[WebFrame _markupStringFromRange:nodes:]): Ditto.
        (-[WebFrame _selectedString]): Ditto.
        (-[WebFrame _stringForRange:]): Ditto.
        (-[WebFrame _forceLayoutAdjustingViewSize:]): Ditto.
        (-[WebFrame _forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]): Ditto.
        (-[WebFrame _sendScrollEvent]): Ditto.
        (-[WebFrame _drawRect:]): Ditto.
        (-[WebFrame _computePageRectsWithPrintWidthScaleFactor:printHeight:]): Ditto.
        (-[WebFrame _adjustPageHeightNew:top:bottom:limit:]): Ditto.
        (-[WebFrame _copyRenderNode:copier:]): Ditto.
        (-[WebFrame _copyRenderTree:]): Ditto.
        (inputElementFromDOMElement): Ditto.
        (formElementFromDOMElement): Ditto.
        (-[WebFrame _elementWithName:inForm:]): Ditto.
        (-[WebFrame _elementDoesAutoComplete:]): Ditto.
        (-[WebFrame _elementIsPassword:]): Ditto.
        (-[WebFrame _formForElement:]): Ditto.
        (-[WebFrame _currentForm]): Ditto.
        (-[WebFrame _controlsInForm:]): Ditto.
        (-[WebFrame _searchForLabels:beforeElement:]): Ditto.
        (-[WebFrame _matchLabels:againstElement:]): Ditto.
        (-[WebFrame _URLWithAttributeString:]): Ditto.
        (-[WebFrame _searchFor:direction:caseSensitive:wrap:startInSelection:]): Ditto.
        (-[WebFrame _markAllMatchesForText:caseSensitive:limit:]): Ditto.
        (-[WebFrame _markedTextMatchesAreHighlighted]): Ditto.
        (-[WebFrame _setMarkedTextMatchesAreHighlighted:]): Ditto.
        (-[WebFrame _unmarkAllTextMatches]): Ditto.
        (-[WebFrame _rectsForTextMatches]): Ditto.
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:]): Ditto.
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]): Ditto.
        (-[WebFrame _aeDescByEvaluatingJavaScriptFromString:]): Ditto.
        (-[WebFrame _caretRectAtNode:offset:affinity:]): Ditto.
        (-[WebFrame _firstRectForDOMRange:]): Ditto.
        (-[WebFrame _scrollDOMRangeToVisible:]): Ditto.
        (-[WebFrame _baseURL]): Ditto.
        (-[WebFrame _stringWithData:]): Ditto.
        (+[WebFrame _stringWithData:textEncodingName:]): Ditto.
        (-[WebFrame _needsLayout]): Ditto.
        (-[WebFrame _renderTreeAsExternalRepresentation]): Ditto.
        (-[WebFrame _accessibilityTree]): Ditto.
        (-[WebFrame _setBaseBackgroundColor:]): Ditto.
        (-[WebFrame _setDrawsBackground:]): Ditto.
        (-[WebFrame _rangeByAlteringCurrentSelection:SelectionController::direction:SelectionController::granularity:]):
        Ditto.
        (-[WebFrame _selectionGranularity]): Ditto.
        (-[WebFrame _convertToNSRange:]): Ditto.
        (-[WebFrame _convertToDOMRange:]): Ditto.
        (-[WebFrame _convertNSRangeToDOMRange:]): Ditto.
        (-[WebFrame _convertDOMRangeToNSRange:]): Ditto.
        (-[WebFrame _markDOMRange]): Ditto.
        (-[WebFrame _markedTextNSRange]): Ditto.
        (-[WebFrame _smartDeleteRangeForProposedRange:]): Ditto.
        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Ditto.
        (-[WebFrame _documentFragmentWithMarkupString:baseURLString:]): Ditto.
        (-[WebFrame _documentFragmentWithText:inContext:]): Ditto.
        (-[WebFrame _documentFragmentWithNodesAsParagraphs:]): Ditto.
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]): Ditto.
        (-[WebFrame _replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]): Ditto.
        (-[WebFrame _replaceSelectionWithMarkupString:baseURLString:selectReplacement:smartReplace:]): Ditto.
        (-[WebFrame _replaceSelectionWithText:selectReplacement:smartReplace:]): Ditto.
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]): Ditto.
        (-[WebFrame _visiblePositionForPoint:]): Ditto.
        (-[WebFrame _characterRangeAtPoint:]): Ditto.
        (-[WebFrame _typingStyle]): Ditto.
        (-[WebFrame _setTypingStyle:withUndoAction:]): Ditto.
        (-[WebFrame _fontForSelection:]): Ditto.
        (-[WebFrame _dragSourceMovedTo:]): Ditto.
        (-[WebFrame _dragSourceEndedAt:operation:]): Ditto.
        (-[WebFrame _getData:andResponse:forURL:]): Ditto.
        (-[WebFrame _getAllResourceDatas:andResponses:]): Ditto.
        (-[WebFrame _canProvideDocumentSource]): Ditto.
        (-[WebFrame _canSaveAsWebArchive]): Ditto.
        (-[WebFrame _receivedData:textEncodingName:]): Ditto.
        (-[WebFrame _setShouldCreateRenderers:]): Put the code from the bridge in this preexisting
        function. Couldn't just keep the bridge method because this was already here with the same name.
        (-[WebFrame _selectedNSRange]): Ditto.
        (-[WebFrame _selectNSRange:]): Ditto.
        (-[WebFrame dealloc]): Remove bridge-related code.
        (-[WebFrame finalize]): Ditto.

        * WebView/WebFrameInternal.h: Added all the method declarations from the bridge.
        Removed the bridge parameter from the init method. Removed the #if blocks that
        tried to make this header work in non-C++ ObjC files -- they were broken and unused.
        Removed the _bridge method.

        * WebView/WebFrameView.mm: Removed the _bridge method.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation setDataSource:]): Removed the code to set up the bridge
        field.
        (-[WebHTMLRepresentation receivedData:withDataSource:]): Use WebFrame instead of bridge.
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]): Ditto.
        (-[WebHTMLRepresentation canProvideDocumentSource]): Ditto.
        (-[WebHTMLRepresentation canSaveAsWebArchive]): Ditto.
        (-[WebHTMLRepresentation documentSource]): Ditto.
        (-[WebHTMLRepresentation DOMDocument]): Ditto.
        (-[WebHTMLRepresentation elementWithName:inForm:]): Ditto.
        (-[WebHTMLRepresentation elementDoesAutoComplete:]): Ditto.
        (-[WebHTMLRepresentation elementIsPassword:]): Ditto.
        (-[WebHTMLRepresentation formForElement:]): Ditto.
        (-[WebHTMLRepresentation currentForm]): Ditto.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.
        (-[WebHTMLRepresentation searchForLabels:beforeElement:]): Ditto.
        (-[WebHTMLRepresentation matchLabels:againstElement:]): Ditto.

        * WebView/WebHTMLRepresentationPrivate.h: Removed the _bridge method.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentWithPaths:]): Use WebFrame instead of bridge.
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]): Ditto.
        (-[WebHTMLView _pasteAsPlainTextWithPasteboard:]): Ditto.
        (-[WebHTMLView _updateTextSizeMultiplier]): Ditto.
        (-[WebHTMLView _frameOrBoundsChanged]): Ditto.
        (-[WebHTMLView _smartInsertForString:replacingRange:beforeString:afterString:]): Ditto.
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]): Ditto.
        (-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]): Ditto.
        (-[WebHTMLView drawSingleRect:]): Ditto.
        (-[WebHTMLView draggedImage:movedTo:]): Ditto.
        (-[WebHTMLView draggedImage:endedAt:operation:]): Ditto.
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Ditto.
        (-[WebHTMLView knowsPageRange:]): Ditto.
        (-[WebHTMLView accessibilityAttributeValue:]): Ditto.
        (-[WebHTMLView accessibilityFocusedUIElement]): Ditto.
        (-[WebHTMLView accessibilityHitTest:]): Ditto.
        (-[WebHTMLView _accessibilityParentForSubview:]): Ditto.
        (-[WebHTMLView changeDocumentBackgroundColor:]): Ditto.
        (-[WebHTMLView _changeWordCaseWithSelector:]): Ditto.
        (-[WebHTMLView _changeSpellingToWord:]): Ditto.
        (-[WebHTMLView startSpeaking:]): Ditto.
        (-[WebHTMLView _updateFontPanel]): Ditto.
        (-[WebHTMLView _canSmartCopyOrDelete]): Ditto.
        (-[WebHTMLView _layoutIfNeeded]): Ditto.
        (-[WebHTMLView characterIndexForPoint:]): Ditto.
        (-[WebHTMLView firstRectForCharacterRange:]): Ditto.
        (-[WebHTMLView selectedRange]): Ditto.
        (-[WebHTMLView markedRange]): Ditto.
        (-[WebHTMLView attributedSubstringFromRange:]): Ditto.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto.
        (-[WebHTMLView insertText:]): Ditto.
        (-[WebTextCompleteController _insertMatch:]): Ditto.
        (-[WebTextCompleteController doCompletion]): Ditto.
        (-[WebTextCompleteController endRevertingChange:moveLeft:]): Ditto.
        (-[WebHTMLView string]): Ditto.
        (-[WebHTMLView selectedString]): Ditto.
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]): Ditto.
        (-[WebHTMLView markAllMatchesForText:caseSensitive:limit:]): Ditto.
        (-[WebHTMLView setMarkedTextMatchesAreHighlighted:]): Ditto.
        (-[WebHTMLView markedTextMatchesAreHighlighted]): Ditto.
        (-[WebHTMLView unmarkAllTextMatches]): Ditto.
        (-[WebHTMLView rectsForTextMatches]): Ditto.
        * WebView/WebRenderNode.mm:
        (-[WebRenderNode initWithWebFrameView:]): Ditto.
        * WebView/WebResource.mm:
        (-[WebResource _stringValue]): Ditto.

        * WebView/WebScriptDebugDelegate.mm: Removed unneeded include.

        * WebView/WebView.mm:
        (-[WebView _dashboardRegions]): Use WebFrame instead of bridge.
        (-[WebView setProhibitsMainFrameScrolling:]): Ditto.
        (-[WebView _setInViewSourceMode:]): Ditto.
        (-[WebView _inViewSourceMode]): Ditto.
        (-[WebView _executeCoreCommandByName:value:]): Ditto.
        (-[WebView stringByEvaluatingJavaScriptFromString:]): Ditto.
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]): Ditto.
        (-[WebView scrollDOMRangeToVisible:]): Ditto.
        (-[WebView setSelectedDOMRange:affinity:]): Ditto.
        (-[WebView setEditable:]): Ditto.
        (-[WebView setTypingStyle:]): Ditto.
        (-[WebView typingStyle]): Ditto.
        (-[WebView replaceSelectionWithNode:]): Ditto.
        (-[WebView replaceSelectionWithText:]): Ditto.
        (-[WebView replaceSelectionWithMarkupString:]): Ditto.
        (-[WebView replaceSelectionWithArchive:]): Ditto.
        (-[WebView _insertNewlineInQuotedContent]): Ditto.
        (-[WebView _replaceSelectionWithNode:matchStyle:]): Ditto.

2008-03-12  David Hyatt  <hyatt@apple.com>

        Make the zoom factor a float and not a percent.

        Reviewed by antti

        * WebView/WebView.mm:
        (-[WebView _setZoomMultiplier:isTextOnly:]):

2008-03-11  David Hyatt  <hyatt@apple.com>

        This patch prepares Mac WebKit to handle two different zooming modes (full page zoom and text only zoom).
        New API is added that is parallel to the text zoom public API.  You can get/set a pageSizeMultiplier and you
        can zoom the page in, out or reset it to the standard size.

        In the implementation only one zoom factor is stored, and setting one multiplier will shift you into that mode
        and set the common zoom factor.  In other words you can't combine text zoom and page zoom.  One will always
        win.

        Reviewed by Tim H.

        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge finishInitializingWithPage:frameName:WebCore::frameView:ownerElement:]):
        * WebView/WebDocumentInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewDidMoveToSuperview]):
        * WebView/WebPDFView.h:
        * WebView/WebPDFView.mm:
        (-[WebPDFView _zoomOut:]):
        (-[WebPDFView _zoomIn:]):
        (-[WebPDFView _resetZoom:]):
        (-[WebPDFView _canZoomOut]):
        (-[WebPDFView _canZoomIn]):
        (-[WebPDFView _canResetZoom]):
        * WebView/WebView.mm:
        (-[WebViewPrivate init]):
        (-[WebView setTextSizeMultiplier:]):
        (-[WebView textSizeMultiplier]):
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        (-[WebView _zoomMultiplier:]):
        (-[WebView _realZoomMultiplier]):
        (-[WebView _realZoomMultiplierIsTextOnly]):
        (-[WebView _canZoomOut:]):
        (-[WebView _canZoomIn:]):
        (-[WebView _zoomOut:isTextOnly:]):
        (-[WebView _zoomIn:isTextOnly:]):
        (-[WebView _canResetZoom:]):
        (-[WebView _resetZoom:isTextOnly:]):
        (-[WebView canMakeTextSmaller]):
        (-[WebView makeTextSmaller:]):
        (-[WebView canMakeTextLarger]):
        (-[WebView makeTextLarger:]):
        (-[WebView canMakeTextStandardSize]):
        (-[WebView makeTextStandardSize:]):
        (-[WebView setPageSizeMultiplier:]):
        (-[WebView pageSizeMultiplier]):
        (-[WebView canZoomPageIn]):
        (-[WebView zoomPageIn:]):
        (-[WebView canZoomPageOut]):
        (-[WebView zoomPageOut:]):
        (-[WebView canResetPageZoom]):
        (-[WebView resetPageZoom:]):
        (-[WebView _searchWithSpotlightFromMenu:]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

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

        Reviewed by Darin Adler and Sam Weinig.

        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Made WKGetCGFontFromNSFont and
        WKGetNSFontATSUFontId Tiger-only.

2008-03-12  Darin Adler  <darin@apple.com>

        - fix http://bugs.webkit.org/show_bug.cgi?id=17794
          REGRESSION (r30980): 23 tests hanging on the Mac buildbot

        * WebView/WebFrame.mm:
        (-[WebFrame _initWithWebFrameView:webView:bridge:]): Added missing call to set
        up pointer from the bridge to the frame. (My next check-in removes the bridge
        entirely, but we need this until then.)

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove all bridge-related things from WebCore except the bridge itself

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _bridge]): Reimplemented to not use the bridgeForDOMDocument: method.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm: Removed unneeded include.

        * Plugins/WebPluginController.mm: Ditto.

        * WebCoreSupport/WebFrameBridge.h: Removed unneeded things, including the
        init and close methods. Added a setWebFrame: method.

        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge setWebFrame:]): Added.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::frameLoaderDestroyed): Added an assertion.
        (WebFrameLoaderClient::detachedFromParent4): Moved the call to close on the
        bridge here. Soon we will be able to remove this entirely!
        (WebFrameLoaderClient::createFrame): Rewrote this to use the method moved
        into WebFrame from the bridge.

        * WebView/WebFrame.mm:
        (-[WebFramePrivate dealloc]): Added code to release the bridge, because it's
        now owned by the frame.
        (-[WebFramePrivate finalize]): Added this missing method. We'd leak the script
        debugger under GC without this!
        (kit): Rewrote the function that maps from a WebCore::Frame to a WebFrame to
        use WebFrameLoaderClient instead of the bridge.
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Added.
        This is code that used to live in the bridge's init function.
        (+[WebFrame _createMainFrameWithPage:frameName:frameView:]): Ditto.
        (+[WebFrame WebCore::_createSubframeWithOwnerElement:frameName:frameView:]): Ditto.
        (-[WebFrame _initWithWebFrameView:webView:bridge:]): Retain the bridge, since
        the WebView is now the bridge's owner.
        (-[WebFrame _updateBackground]): Changed this one call site that was calling the
        WebCore::Frame::bridge function directly to use the kit function instead.
        (-[WebFrame dealloc]): Added code to clear the WebFrame pointer in the bridge.
        This code won't last long -- we're eliminating the bridge soon.
        (-[WebFrame finalize]): Ditto.

        * WebView/WebFrameInternal.h: Added a coreFrame backpointer and two new methods
        for creating frames.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Rewrote this to use
        the method moved into WebFrame from the bridge. Gets rid of the unpleasant idiom
        where we have to allocate a WebFrameBridge and then immediately release it.

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - remove code depending on the bridge to get from an NSView to a WebCore::Frame

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Remove incorrect call
        to setView. A couple lines later, there is a call to _install, which sets the
        view to the scroll view.

        * WebCoreSupport/WebViewFactory.mm: Removed bridgeForView method.

        * WebView/WebDynamicScrollBarsView.h: Moved most of the declarations out of
        this file, since it's used by Safari.
        * WebView/WebDynamicScrollBarsViewInternal.h: Added.
        * WebView/WebDynamicScrollBarsView.m:
        (-[WebDynamicScrollBarsView updateScrollers]): Ditto.
        (-[WebDynamicScrollBarsView setAllowsScrolling:]): Ditto.
        (-[WebDynamicScrollBarsView allowsScrolling]): Ditto.
        (-[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]): Ditto.
        (-[WebDynamicScrollBarsView setAllowsVerticalScrolling:]): Ditto.
        (-[WebDynamicScrollBarsView allowsHorizontalScrolling]): Ditto.
        (-[WebDynamicScrollBarsView allowsVerticalScrolling]): Ditto.
        (-[WebDynamicScrollBarsView horizontalScrollingMode]): Ditto.
        (-[WebDynamicScrollBarsView verticalScrollingMode]): Ditto.
        (-[WebDynamicScrollBarsView setHorizontalScrollingMode:]): Ditto.
        (-[WebDynamicScrollBarsView setHorizontalScrollingMode:andLock:]): Ditto.
        (-[WebDynamicScrollBarsView setVerticalScrollingMode:]): Ditto.
        (-[WebDynamicScrollBarsView setVerticalScrollingMode:andLock:]): Ditto.
        (-[WebDynamicScrollBarsView setScrollingMode:]): Ditto.
        (-[WebDynamicScrollBarsView setScrollingMode:andLock:]): Ditto.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _web_frame]): Added. Replaces the webCoreBridge method.

        * WebView/WebView.mm:
        (-[WebView setAlwaysShowVerticalScroller:]): Updated for changes to WebCoreFrameView.h.
        (-[WebView alwaysShowVerticalScroller]): Ditto.
        (-[WebView setAlwaysShowHorizontalScroller:]): Ditto.
        (-[WebView alwaysShowHorizontalScroller]): Ditto.

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - eliminate the remaining parts of WebCoreBridge used for calls to WebKit from WebCore

        * WebCoreSupport/WebChromeClient.h: Added new virtual functions that replace
        bridge methods.
        * WebCoreSupport/WebChromeClient.mm: Added lots of BEGIN_BLOCK_OBJC_EXCEPTIONS
        to recently-created functions.
        (WebChromeClient::firstResponder): Moved code here from the bridge.
        (WebChromeClient::makeFirstResponder): Ditto.
        (WebChromeClient::runOpenPanel): Ditto.
        (WebChromeClient::willPopUpMenu): Ditto.

        * WebCoreSupport/WebFrameBridge.h: Removed almost everything. What's left
        is related to creating the bridge and connecting it to WebCore, which will
        go next when I eliminate use of the bridge to get to/from the Frame*.
        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge close]): Moved the code to track the bridge count here
        instead of the dealloc and finalize methods.

2008-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - update code affected by Range changes

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]): Update for name changes.
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        Use Range::create.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedString]): Ditto.

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

        Reviewed by Sam.

        - eliminate keyboard UI mode method from WebCoreFrameBridge

        * WebCoreSupport/WebChromeClient.h: Added keyboardUIMode function.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::keyboardUIMode): Ditto. Calls WebView.
        * WebCoreSupport/WebFrameBridge.h: Removed unused things, including the
        fields for keyboard UI mode.
        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge dealloc]): Removed unneeded code; eliminated the fini
        method.
        (-[WebFrameBridge finalize]): Ditto.
        * WebView/WebView.mm: Moved the keyboard mode code in here.
        (-[WebView _close]): Remove observer from the distributed notification
        center as well as the normal one.
        (-[WebView _retrieveKeyboardUIModeFromPreferences:]): Added. Code moved
        here from the bridge.
        (-[WebView _keyboardUIMode]): Ditto.
        * WebView/WebViewInternal.h: Added _keyboardUIMode method.

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

        Reviewed by Sam.

        - eliminate Java applet methods from WebCoreFrameBridge

        * WebCoreSupport/WebChromeClient.mm: Removed unneeded headers and declarations.
        * WebCoreSupport/WebFrameBridge.mm: Ditto. Also removed unneeded methods, including
        the ones that load Java applets.
        * WebCoreSupport/WebFrameLoaderClient.h: Added javaApplet function.
        * WebCoreSupport/WebFrameLoaderClient.mm: Ditto.

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Darin Adler.

        Done with Lars.

        Simplified WebViewFactory's refreshPlugins method to only refresh the
        plugins and not reload the frames anymore since that's now done in a
        platform independent manner by WebCore::Page.

        Also removed the now unused pluginNameForMIMEType and
        pluginSupportsMIMEType methods.

        * WebCoreSupport/WebViewFactory.mm:
        * WebView/WebFrame.mm:
        * WebView/WebFrameInternal.h:
        * WebView/WebView.mm:

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

        Reviewed by Darin Adler.

        Fix 64-bit build with GCC 4.2.

        * DefaultDelegates/WebDefaultScriptDebugDelegate.m: Use NSUInteger in place of unsigned where required.
        * DefaultDelegates/WebDefaultUIDelegate.m: Ditto.
        * History/WebHistoryItem.mm: Ditto.
        * Misc/WebElementDictionary.mm: Ditto.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::objectContentType): Move variable declaration outside of if to avoid warning about the
        variable being unused in 64-bit.
        * WebCoreSupport/WebInspectorClient.mm: Use NSUInteger in place of unsigned where required.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Use CGFloat in place of float where required.
        (-[WebTextCompleteController numberOfRowsInTableView:]): Use NSInteger in place of int where required.

2008-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - eliminate custom highlight methods from WebCoreFrameBridge

        * WebCoreSupport/WebChromeClient.h: Added custom highlight functions.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::customHighlightRect): Moved code here from bridge.
        (WebChromeClient::paintCustomHighlight): Ditto.
        * WebCoreSupport/WebFrameBridge.mm: Removed code here.

2008-03-07  David D. Kilzer  <ddkilzer@apple.com>

        Unify concept of enabling Netscape Plug-in API (NPAPI).

        Reviewed by Darin Adler.

        * WebKit.exp: Removed unused class export for WebBaseNetscapePluginView.

        * WebKitPrefix.h: Removed WTF_USE_NPOBJECT since we now use
        ENABLE(NETSCAPE_PLUGIN_API) as defined in Platform.h.

        * Plugins/WebBaseNetscapePluginStream.h: Replaced #ifndef __LP64__ with
        #if ENABLE(NETSCAPE_PLUGIN_API).
        * Plugins/WebBaseNetscapePluginStream.mm: Ditto.
        * Plugins/WebBaseNetscapePluginView.h: Ditto.
        * Plugins/WebBaseNetscapePluginView.mm: Ditto.
        * Plugins/WebBaseNetscapePluginViewInternal.h: Ditto.
        * Plugins/WebBaseNetscapePluginViewPrivate.h: Ditto.
        * Plugins/WebBasePluginPackage.h: Ditto.
        * Plugins/WebBasePluginPackage.m: Ditto.
        (+[WebBasePluginPackage pluginWithPath:]):
        * Plugins/WebNetscapeDeprecatedFunctions.c: Ditto.
        * Plugins/WebNetscapeDeprecatedFunctions.h: Ditto.
        * Plugins/WebNetscapePluginEmbeddedView.h: Ditto.
        * Plugins/WebNetscapePluginEmbeddedView.mm: Ditto.
        * Plugins/WebNetscapePluginPackage.h: Ditto.
        * Plugins/WebNetscapePluginPackage.m: Ditto.
        * Plugins/WebNetscapePluginStream.h: Ditto.
        * Plugins/WebNetscapePluginStream.mm: Ditto.
        * Plugins/WebPluginDatabase.m: Ditto.
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]):
        * Plugins/npapi.m: Ditto.
        * WebCoreSupport/WebFrameLoaderClient.mm: Ditto.
        (WebFrameLoaderClient::objectContentType):
        (WebFrameLoaderClient::createPlugin):
        * WebView/WebHTMLView.mm: Ditto.
        (-[NSArray _web_makePluginViewsPerformSelector:withObject:]):
        * WebView/WebHTMLViewInternal.h: Ditto.

        * WebView/WebFrame.mm: Replaced #ifndef __LP64__ with
        #if ENABLE(NETSCAPE_PLUGIN_API). Moved methods below from (WebPrivate)
        category to (WebInternal) category so we don't expose the ENABLE() macro
        from the private header.
        (-[WebFrame _recursive_resumeNullEventsForAllNetscapePlugins]):
        (-[WebFrame _recursive_pauseNullEventsForAllNetscapePlugins]):
        * WebView/WebFrameInternal.h: Ditto.
        * WebView/WebFramePrivate.h: Ditto.

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

        Reviewed by Darin Adler.

        <rdar://problem/5579292> REGRESSION: (safari 2-3): "Default default" encoding for Korean
        changed from Korean (Windows, DOS) to Korean (ISO 2022-KR), which breaks some sites

        * WebView/WebPreferences.m:
        (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]): Make encoding name match
        the one used in Safari.

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

        Reviewed by Oliver Hunt.

        Fix WebKit build with GCC 4.2.

        * Plugins/WebBaseNetscapePluginView.mm: Use the correct return type in method signature.

2008-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - eliminated WebCoreFrameBridge runOpenPanel

        * WebCoreSupport/WebChromeClient.h: Added runOpenPanel.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runOpenPanel): Added.
        (-[WebOpenPanelResultListener initWithChooser:]): Added. Used to wrap the
        FileChooser so it can get a result from the UI delegate.
        (-[WebOpenPanelResultListener dealloc]): Added.
        (-[WebOpenPanelResultListener finalize]): Added.
        (-[WebOpenPanelResultListener cancel]): Added.
        (-[WebOpenPanelResultListener chooseFilename:]): Added.

2008-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix regression test failures from the visited-link change

        * History/WebHistory.mm:
        (+[WebHistory setOptionalSharedHistory:]): Call PageGroup::setShouldTrackVisitedLinks
        to turn off visited links if there is no history object. Also call
        removeAllVisitedLinks so we can start over from scratch with the new history.

2008-03-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix a regression from r30741: a crash under
          WebFrameLoaderClient::createPlugin() when showing a Mail message with
          an attachment

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):

2008-03-06  Darin Adler  <darin@apple.com>

        - fix Tiger build

        * History/WebHistory.mm: Added include of WebTypesInternal.h.

2008-03-06  Darin Adler  <darin@apple.com>

        - fix Release build

        * History/WebHistory.mm:
        (-[WebHistoryPrivate setLastVisitedTimeInterval:forItem:]): Removed underscore.
        (-[WebHistoryPrivate loadFromURL:collectDiscardedItemsInto:error:]): Added #if.
        (-[WebHistoryPrivate saveToURL:error:]): Ditto.

2008-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17526
          REGRESSION: iframes are added to Safari's History menu
          by separating the visited link machinery from global history

        * History/WebHistory.mm: Moved WebHistoryPrivate inside this file.
        (-[WebHistoryPrivate removeItemFromDateCaches:]): Removed the underscore from this
        method name, since it's on a private object.
        (-[WebHistoryPrivate removeItemForURLString:]): Added a call to the
        PageGroup::removeAllVisitedLinks function if the last URL was removed.
        (-[WebHistoryPrivate addItemToDateCaches:]): Removed the underscore from this
        method name, since it's on a private object.
        (-[WebHistoryPrivate removeAllItems]): Call PageGroup::removeAllVisitedLinks.
        (-[WebHistoryPrivate ageLimitDate]): Removed the underscore from this
        method name, since it's on a private object.
        (-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]):
        Ditto.
        (-[WebHistoryPrivate saveHistoryGuts:URL:error:]): Ditto. Also changed this
        to correctly return the error by using the newer version of writeToURL: and
        removed the FIXME about that.
        (-[WebHistoryPrivate addVisitedLinksToPageGroup:]): Added. Calls addVisitedLink
        for every link in the history.
        (-[WebHistory saveToURL:error:]): Removed the FIXME, since we do get the error now.
        (-[WebHistory addItem:]): Moved into the WebPrivate category.
        (-[WebHistory addItemForURL:]): Ditto.
        (-[WebHistory _addItemForURL:title:]): Added. Used for the normal case where we
        create an item and already know its title.
        (-[WebHistory ageLimitDate]): Moved into the WebPrivate category.
        (-[WebHistory containsItemForURLString:]): Ditto.
        (-[WebHistory removeItem:]): Ditto.
        (-[WebHistory setLastVisitedTimeInterval:forItem:]): Ditto.
        (-[WebHistory _itemForURLString:]): Ditto.
        (-[WebHistory _addVisitedLinksToPageGroup:]): Added. For use only inside WebKit.

        * History/WebHistoryInternal.h: Added.
        * History/WebHistoryItemInternal.h: Tweaked formatting and includes.
        * History/WebHistoryPrivate.h: Moved the WebHistoryPrivate class out of this header.
        Also reorganized what was left behind.

        * WebCoreSupport/WebChromeClient.h: Added populateVisitedLinks.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::populateVisitedLinks): Added a call to the new
        -[WebHistory _addVisitedLinksToPageGroup:] method.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Changed code to use the new
        -[WebHistory _addItemForURL:title:] method.

2008-03-05  Adam Roben  <aroben@apple.com>

        Rename WebCoreScriptDebuggerImp.{h,mm} to WebScriptDebugger.{h,mm}

        Reviewed by Kevin M.

        * WebView/WebFrame.mm:
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebScriptDebugger.h: Renamed from WebKit/mac/WebView/WebCoreScriptDebuggerImp.h.
        * WebView/WebScriptDebugger.mm: Renamed from WebKit/mac/WebView/WebCoreScriptDebuggerImp.mm.

2008-03-05  Adam Roben  <aroben@apple.com>

        Rename WebCoreScriptDebuggerImp to WebScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebuggerImp.h:
        * WebView/WebCoreScriptDebuggerImp.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame _attachScriptDebugger]):
        * WebView/WebFrameInternal.h:

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove WebScriptDebugger

        Uses of WebScriptDebugger have been replaced with
        WebCoreScriptDebuggerImp.

        Reviewed by Kevin M.

        * WebView/WebFrame.mm:
        (-[WebFramePrivate dealloc]): Use delete instead of release since
        WebCoreScriptDebuggerImp is a C++ class.
        (-[WebFrame _attachScriptDebugger]): Updated to use early returns and
        WebCoreScriptDebuggerImp.
        (-[WebFrame _detachScriptDebugger]): Ditto.
        * WebView/WebFrameInternal.h:
        * WebView/WebScriptDebugDelegate.mm: Removed WebScriptDebugger
        * WebView/WebScriptDebugDelegatePrivate.h: Removed.
        * WebView/WebView.mm:

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove -webFrame and -globalObject from WebScriptDebugger

        WebCoreScriptDebuggerImp is now unaware of WebScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebuggerImp.h: Removed WebScriptDebugger*
        parameter to the constructor.
        * WebView/WebCoreScriptDebuggerImp.mm:
        (toWebFrame): Added.
        (WebCoreScriptDebuggerImp::sourceParsed): Call toWebFrame.
        (WebCoreScriptDebuggerImp::callEvent): Ditto, and get the Frame's
        WindowScriptObject ourselves instead of asking WebScriptDebugger for
        it.
        (WebCoreScriptDebuggerImp::atStatement): Call toWebFrame.
        (WebCoreScriptDebuggerImp::returnEvent): Ditto.
        (WebCoreScriptDebuggerImp::exception): Ditto.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptDebugger initWithWebFrame:]): Updated for change to
        WebScriptDebuggerImp's constructor.
        * WebView/WebScriptDebugDelegatePrivate.h: Removed
        -webFrame/-globalObject.

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove -enterFrame: and -leaveFrame from WebScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebuggerImp.h: Changed to store m_topCallFrame
        in a RetainPtr, now that WebCoreScriptDebuggerImp is in charge of its
        lifetime.
        * WebView/WebCoreScriptDebuggerImp.mm:
          - Added declaration of -[WebScriptCallFrame
            _initWithGlobalObject:caller:state:].
          - Changed most uses of m_topCallFrame to m_topCallFrame.get()
        (WebCoreScriptDebuggerImp::WebCoreScriptDebuggerImp): Removed
        now-unnecessary initialization of m_topCallFrame.
        (WebCoreScriptDebuggerImp::callEvent): Replaced call to enterFrame:
        with its implementation. The one difference between this
        implementation and the old enterFrame: method is that we don't hand
        our reference to m_topCallFrame to _initWithGlobalObject: -- that
        method must now retain the passed-in WebScriptCallFrame manually.
        (WebCoreScriptDebuggerImp::atStatement):
        (WebCoreScriptDebuggerImp::returnEvent): Replaced call to leaveFrame
        with its implementation.
        (WebCoreScriptDebuggerImp::exception):
        * WebView/WebScriptDebugDelegate.mm: Removed declaration of
        -[WebScriptCallFrame _initWithGlobalObject:caller:state:].
        (-[WebScriptCallFrame _initWithGlobalObject:caller:state:]): Changed
        to retain the passed-in caller.
        * WebView/WebScriptDebugDelegatePrivate.h:
          - Removed _current ivar
          - Removed enterFrame:/leaveFrame declarations.

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove -parsedSource: from WebScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebuggerImp.mm:
        (WebCoreScriptDebuggerImp::sourceParsed): Moved code here from
        -[WebScriptDebugger parsedSource:fromURL:sourceId:startLine:errorLine:errorMessage:]
        * WebView/WebScriptDebugDelegate.mm: Removed -parsedSource:.
        * WebView/WebScriptDebugDelegatePrivate.h: Ditto.

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove -enteredFrame:, -leavingFrame:, and -exceptionRaised: from WebScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebuggerImp.mm:
        (WebCoreScriptDebuggerImp::WebCoreScriptDebuggerImp): Changed to call
        trhough to callEvent instead of duplicating its code here.
        (WebCoreScriptDebuggerImp::callEvent): Moved code from
        -[WebScriptDebugger enteredFrame:sourceId:line:] here.
        (WebCoreScriptDebuggerImp::returnEvent): Moved code from
        -[WebScriptDebugger leavingFrame:sourceId:line:] here.
        (WebCoreScriptDebuggerImp::exception): Moved code from
        -[WebScriptDebugger exceptionRaised:sourceId:line:] here.
        * WebView/WebScriptDebugDelegate.mm: Removed -enteredFrame:,
        -leavingFrame:, and -exceptionRaised:.
        * WebView/WebScriptDebugDelegatePrivate.h: Ditto.

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove -[WebScriptDebugger hitStatement:sourceId:line:]

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebuggerImp.mm:
        (WebCoreScriptDebuggerImp::atStatement): Moved code here from
        -[WebScriptDebugger hitStatement:sourceId:line:].
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptDebugger webFrame]): Added.
        * WebView/WebScriptDebugDelegatePrivate.h:

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove WebCoreScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebugger.h: Removed.
        * WebView/WebCoreScriptDebugger.mm: Removed.
        * WebView/WebCoreScriptDebuggerImp.h: Replaced WebCoreScriptDebugger
        with WebScriptDebugger.
        * WebView/WebCoreScriptDebuggerImp.mm: Ditto, and replaced [m_debugger
        delegate] with just m_debugger.
        (toNSString): Moved here from WebCoreScriptDebugger.mm.
        (toNSURL): Ditto.
        (WebCoreScriptDebuggerImp::WebCoreScriptDebuggerImp):
        (WebCoreScriptDebuggerImp::sourceParsed):
        (WebCoreScriptDebuggerImp::callEvent):
        (WebCoreScriptDebuggerImp::atStatement):
        (WebCoreScriptDebuggerImp::returnEvent):
        (WebCoreScriptDebuggerImp::exception):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptDebugger initWithWebFrame:]): _debugger now holds a
        WebCoreScriptDebuggerImp, so initialize it properly.
        * WebView/WebScriptDebugDelegatePrivate.h: Changed _debugger to hold a
        WebCoreScriptDebuggerImp.

2008-03-05  Adam Roben  <aroben@apple.com>

        Move WebCoreScriptDebuggerImp to its own source files

        Also changed WebCoreScriptDebuggerImp coding style to match our style
        guidelines.

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebugger.h: Added declaration of toNSURL
        function.
        * WebView/WebCoreScriptDebugger.mm: Removed WebCoreScriptDebuggerImp
        implementation.
        (toNSURL): Made no longer static.
        * WebView/WebCoreScriptDebuggerImp.h: Added.
        * WebView/WebCoreScriptDebuggerImp.mm: Added. Code was moved here from
        WebCoreScriptDebugger.mm and cleaned up.
        (WebCoreScriptDebuggerImp::WebCoreScriptDebuggerImp):
        (WebCoreScriptDebuggerImp::sourceParsed):
        (WebCoreScriptDebuggerImp::callEvent):
        (WebCoreScriptDebuggerImp::atStatement):
        (WebCoreScriptDebuggerImp::returnEvent):
        (WebCoreScriptDebuggerImp::exception):

2008-03-05  Adam Roben  <aroben@apple.com>

        Move -_enterFrame and -_leaveFrame from WebCoreScriptDebugger to WebScriptDebugger

        Reviewed by Kevin M.

        * WebView/WebCoreScriptDebugger.h:
          - Removed newFrameWithGlobalObject:caller:state: from
            WebScriptDebugger protocol
          - Added enterFrame: and leaveFrame: to WebScriptDebugger protocol
          - Removed _current ivar from WebCoreScriptDebugger
        * WebView/WebCoreScriptDebugger.mm:
        (WebCoreScriptDebuggerImp::callEvent): Changed to call enterFrame on
        the delegate.
        (WebCoreScriptDebuggerImp::returnEvent): Ditto for leaveFrame.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptDebugger dealloc]): Added code to release _current.
        (-[WebScriptDebugger enterFrame:]): Added. Code came from
        WebCoreScriptDebugger.
        (-[WebScriptDebugger leaveFrame]): Ditto.
        * WebView/WebScriptDebugDelegatePrivate.h: Added _current ivar.

2008-03-05  Adam Roben  <aroben@apple.com>

        Remove WebCoreScriptCallFrame

        Reviewed by Tim.

        * WebView/WebCoreScriptDebugger.h:
          - Replaced WebCoreScriptCallFrame with WebScriptCallFrame
          - Replaced -newWrapperForFrame: with
            -newFrameWithGlobalObject:caller:state:
          - Removed WebCoreScriptCallFrame interface.
        * WebView/WebCoreScriptDebugger.mm: Replaced WebCoreScriptCallFrame
        with WebScriptCallFrame.
        (-[WebCoreScriptDebugger _enterFrame:]): Changed to call
        -newFrameWithGlobalObject:caller:state.
        (-[WebCoreScriptDebugger _leaveFrame]):
        * WebView/WebScriptDebugDelegate.h: Changed WebScriptCallFrame's
        _private ivar to be of type WebScriptCallFramePrivate*.
        * WebView/WebScriptDebugDelegate.mm:
          - Replaced WebCoreScriptCallFrame with WebScriptCallFrame
          - Added WebScriptCallFramePrivate
        (-[WebScriptDebugger enteredFrame:sourceId:line:]):
        (-[WebScriptDebugger hitStatement:sourceId:line:]):
        (-[WebScriptDebugger leavingFrame:sourceId:line:]):
        (-[WebScriptDebugger exceptionRaised:sourceId:line:]):
        (-[WebScriptCallFramePrivate dealloc]): Added.
        (-[WebScriptCallFrame _initWithGlobalObject:caller:state:]): Added.
        Code came from WebCoreScriptCallFrame.
        (-[WebScriptCallFrame dealloc]): Added a call to release the _private
        ivar.
        (-[WebScriptCallFrame _convertValueToObjcValue:]): Replaced calls to
        _private with direct access of _private's ivars.
        (-[WebScriptCallFrame caller]): Ditto.
        (-[WebScriptCallFrame scopeChain]): Ditto.
        (-[WebScriptCallFrame evaluateWebScript:]): Ditto.

2008-03-05  Adam Roben  <aroben@apple.com>

        Move -_convertValueToObjcValue to WebScriptCallFrame

        Reviewed by Darin Adler.

        * WebView/WebCoreScriptDebugger.h: Removed declaration of
        -_convertValueToObjcValue.
        * WebView/WebCoreScriptDebugger.mm: Removed -_convertValueToObjcValue.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _convertValueToObjcValue:]): Added. Code came
        from -[WebCoreScriptCallFrame _convertValueToObjcValue].
        (-[WebScriptCallFrame scopeChain]): Changed to call
        -_convertValueToObjcValue on self instead of _private.
        (-[WebScriptCallFrame exception]): Ditto.
        (-[WebScriptCallFrame evaluateWebScript:]): Ditto.

2008-03-05  Adam Roben  <aroben@apple.com>

        Move -exception and -evaluateWebScript: to WebScriptCallFrame

        Reviewed by Darin Adler.

        * WebView/WebCoreScriptDebugger.h: Removed declarations of -exception
        and -evaluateWebScript:.
        * WebView/WebCoreScriptDebugger.mm: Removed -exception and
        -evaluateWebScript:.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame exception]): Added. Code came from
        -[WebCoreScriptCallFrame exception].
        (-[WebScriptCallFrame evaluateWebScript:]): Added. Code came from
        -[WebCoreScriptCallFrame evaluateWebScript:].

2008-03-05  Adam Roben  <aroben@apple.com>

        Move -scopeChain to WebScriptCallFrame

        Reviewed by Darin Adler.

        * WebView/WebCoreScriptDebugger.h:
          - Added declarations of -globalObject and -_convertValueToObjcValue:
            to WebCoreScriptCallFrame
          - Removed declaration of -scopeChain.
        * WebView/WebCoreScriptDebugger.mm: Moved -_convertValueToObjcValue
        within the main WebCoreScriptCallFrame implementation.
        (-[WebCoreScriptCallFrame globalObject]): Added.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]): Added. Code came from
        -[WebCoreScriptCallFrame scopeChain].

2008-03-05  Adam Roben  <aroben@apple.com>

        Move -functionName from WebCoreScriptCallFrame to WebScriptCallFrame

        Reviewed by Darin Adler.

        * WebView/WebCoreScriptDebugger.h:
          - Removed #else case of #ifdef __cplusplus since this file is only
            ever used by C++ Objective-C files
          - Removed 'using KJS::ExecState' statement since we prefer not to
            have using statements in header files
          - Consequently prefixed uses of ExecState with KJS::
          - Added declaration of toNSString method that takes a const
            UString&
          - Added declaration of -[WebCoreScriptCallFrame state]
          - Removed declaration of -[WebCoreScriptCallFrame functionName]
        * WebView/WebCoreScriptDebugger.mm:
        (toNSString): Made this no longer static.
        (-[WebCoreScriptCallFrame state]): Added.
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame functionName]): Added. Code came from
        -[WebCoreScriptCallFrame functionName], though I changed some nested
        ifs into early returns.

2008-03-05  Adam Roben  <aroben@apple.com>

        Move WebCoreScriptDebugger to WebKit

        Reviewed by Darin Adler.

        * WebView/WebCoreScriptDebugger.h: Renamed from WebCore/page/mac/WebCoreScriptDebugger.h.
        * WebView/WebCoreScriptDebugger.mm: Renamed from WebCore/page/mac/WebCoreScriptDebugger.mm.
        (toNSString):
        (toNSURL):
        (WebCoreScriptDebuggerImp::WebCoreScriptDebuggerImp):
        (WebCoreScriptDebuggerImp::sourceParsed):
        (WebCoreScriptDebuggerImp::callEvent):
        (WebCoreScriptDebuggerImp::atStatement):
        (WebCoreScriptDebuggerImp::returnEvent):
        (WebCoreScriptDebuggerImp::exception):
        (+[WebCoreScriptDebugger initialize]):
        (-[WebCoreScriptDebugger initWithDelegate:]):
        (-[WebCoreScriptDebugger dealloc]):
        (-[WebCoreScriptDebugger finalize]):
        (-[WebCoreScriptDebugger delegate]):
        (-[WebCoreScriptDebugger _enterFrame:]):
        (-[WebCoreScriptDebugger _leaveFrame]):
        (-[WebCoreScriptCallFrame _initWithGlobalObject:caller:state:]):
        (-[WebCoreScriptCallFrame _setWrapper:]):
        (-[WebCoreScriptCallFrame _convertValueToObjcValue:]):
        (-[WebCoreScriptCallFrame dealloc]):
        (-[WebCoreScriptCallFrame wrapper]):
        (-[WebCoreScriptCallFrame caller]):
        (-[WebCoreScriptCallFrame scopeChain]):
        (-[WebCoreScriptCallFrame functionName]):
        (-[WebCoreScriptCallFrame exception]):
        (-[WebCoreScriptCallFrame evaluateWebScript:]):
        * WebView/WebScriptDebugDelegate.mm: Updated header path.
        * WebView/WebScriptDebugDelegatePrivate.h: Ditto.

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Include file changes.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginPackage.m:

2008-03-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5720160> Browser windows "do nothing" while modal
        dialog or menu is up due to run loop modes (or while scrolling)

        Add new API that lets a WebView be scheduled with multiple runloops and modes.
        This lets loading continue when in a nested runloop or in a different mode.

        * Misc/WebKitVersionChecks.h: Add a new version define:
        WEBKIT_FIRST_VERSION_WITH_LOADING_DURING_COMMON_RUNLOOP_MODES.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Schedule in the main runloop and with
        the default runloop mode if we are linked on an earlier WebKit version, use common modes otherwise.
        (-[WebView scheduleInRunLoop:forMode:]): New API, that calls through to Page.
        (-[WebView unscheduleFromRunLoop:forMode:]): Ditto.
        * WebView/WebViewPrivate.h: Add the new pending API methods.

2008-03-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix crash that happens when trying to load a page with a Java applet.
        
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Don't release the names and values array - the kit method returns an autoreleased array.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix 200+ failing regression tests
        - fix http://bugs.webkit.org/show_bug.cgi?id=17668
          Vertical scrollbar at slashdot.org is randomly not shown

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Changed the refcounting
        code here to exactly match the way it was before it was moved from WebCore. I had
        introduced a storage leak and that was causing problems with scroll bars!

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge reapplyStyles method

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView reapplyStyles]): Moved code to reapply styles here from the bridge.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - eliminate WebCoreFrameBridge createFrameViewWithNSView

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        Moved code here from createFrameViewWithNSView.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - removed WebCoreFrameBridge scrollOverflowInDirection

        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollOverflowInDirection:granularity:]): Changed to call
        EventHandler directly instead of using the bridge.
        (-[WebFrameView scrollToBeginningOfDocument:]): Updated to use WebCore enums instead
        of the ones from the bridge.
        (-[WebFrameView scrollToEndOfDocument:]): Ditto.
        (-[WebFrameView _pageVertically:]): Ditto.
        (-[WebFrameView _pageHorizontally:]): Ditto.
        (-[WebFrameView _scrollLineVertically:]): Ditto.
        (-[WebFrameView _scrollLineHorizontally:]): Ditto.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge installInFrame: method

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Call
        -[WebFrameView _install] instead of -[WebCoreFrameBridge installInFrame:].
        * WebView/WebFrameView.mm:
        (-[WebFrameView _install]): Added. Has code from -[WebCoreFrameBridge installInFrame:].
        (-[WebFrameView _setCustomScrollViewClass:]): Used early return idiom so the entire
        method isn't nested inside an if statement. Call
        -[WebFrameView _install] instead of -[WebCoreFrameBridge installInFrame:].
        * WebView/WebFrameViewInternal.h: Added declaration of _install method so it can be
        used in WebFrameLoaderClient.mm.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge window method

        * WebCoreSupport/WebFrameBridge.mm: Removed window method.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - move code from WebFrameBridge into WebFrameLoaderClient

        * WebCoreSupport/WebFrameBridge.h: Removed unused fields, changed frame name parameters
        to use WebCore::String instead of NSString, add initSubframeWithOwnerElement declaration,
        removed viewForPluginWithFrame, viewForJavaAppletWithFrame, createChildFrameNamed,
        redirectDataToPlugin, determineObjectFromMIMEType, and windowObjectCleared methods.
        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge finishInitializingWithPage:frameName:WebCore::frameView:ownerElement:]):
        Changed to use WebCore::String.
        (-[WebFrameBridge initMainFrameWithPage:frameName:WebCore::frameView:]): Ditto.
        (-[WebFrameBridge initSubframeWithOwnerElement:frameName:WebCore::frameView:]): Ditto.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::setOriginalURLForDownload): Removed some dead code I found here
        and added a FIXME.
        (WebFrameLoaderClient::createFrame): Moved the code from WebFrameBridge here.
        (WebFrameLoaderClient::objectContentType): Ditto.
        (parameterValue): Added.  Helper function, based on code originally in WebFrameBridge.
        (pluginView): Ditto.
        (WebFrameLoaderClient::createPlugin): Moved the code from WebFrameBridge here.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove -[WebCoreFrameBridge dashboardRegionsChanged:]

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::dashboardRegionsChanged): Moved code here from the bridge.
        The WebCore side now calls this only when there's an actual change.
        * WebCoreSupport/WebFrameBridge.h: Removed lastDashboardRegions.
        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge dealloc]): Removed code to release lastDashboardRegions.
        Removed _compareDashboardRegions: and dashboardRegionsChanged: methods.

2008-03-04  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - remove WebCoreFrameBridge issuePasteComand method

        * WebCoreSupport/WebFrameBridge.mm: Removed issuePasteCommand method.
        * WebView/WebHTMLViewInternal.h: Removed declaration of paste: method.

2008-03-03  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - some "cleanup" on the path to removing WebCoreFrameBridge

        * Storage/WebDatabaseManager.mm: Tweak includes.
        * Storage/WebDatabaseTrackerClient.mm: Ditto.
        * Storage/WebSecurityOrigin.mm: Ditto.
        * Storage/WebSecurityOriginInternal.h: Ditto.

        * WebView/WebFrame.mm:
        (core): Changed to get rid of the requirement that WebKitEditableLinkBehavior exactly
        match WebCore::EditableLinkBehavior.
        * WebView/WebFrameInternal.h: Removed unused kit function.

        * WebView/WebHTMLView.mm: Moved WebHTMLViewPrivate class in here.
        * WebView/WebHTMLViewInternal.h: Moved WebHTMLVewPrivate class out of here.
        * WebView/WebHTMLViewPrivate.h: Tweaked formatting and removed some unneeded declarations.

        * WebView/WebPreferencesPrivate.h: Removed a no-longer-needed comment.

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

        Reviewed by Tim Hatcher.

        Update Xcode configuration to support building debug and release from the mysterious future.

        * Configurations/DebugRelease.xcconfig:

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

        Reviewed by Anders Carlsson.

        Replace use of WKPathFromFont with implementation in terms of public API.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Remove unused symbol.

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

        Reviewed by Oliver Hunt.

        Fix spelling of "request" in name of WKNSURLProtocolClassForRequest.

        * Misc/WebNSURLExtras.mm:
        (-[NSURL _webkit_canonicalize]):
        * WebKit.order:

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

        Reviewed by Oliver Hunt.

        Don't use WKSupportsMultipartXMixedReplace on Leopard as multipart/x-mixed-replace is always handled by NSURLRequest.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

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

        Reviewed by Oliver Hunt.

        Remove obsolete code that had been left intact to support users running WebKit with older versions of Safari.

        * Misc/WebNSViewExtras.m:  Remove _web_superviewOfClass:stoppingAtClass:.
        * Misc/WebNSWindowExtras.m:  Remove _webkit_displayThrottledWindows.
        * Misc/WebSearchableTextView.m:  Remove selectionImageForcingWhiteText:.
        * WebCoreSupport/WebImageRendererFactory.m:  Update comment to mention the last version of Safari that
        requires this class.
        * WebInspector/WebInspector.mm:  Remove sharedWebInspector and update comments to mention the last version
        of Safari that calls other obsolete methods.
        * WebView/WebDocumentPrivate.h:  Remove selectionImageForcingWhiteText:.
        * WebView/WebHTMLView.mm:  Ditto.
        * WebView/WebPDFView.mm:  Ditto.
        * WebView/WebView.mm:  Update comment to mentoin the last version of Safari that requires the obsolete method.

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

        Rubber-stamped by Eric Seidel.

        Remove unneeded includes of WebKitSystemInterface.h.

        * History/WebHistoryItem.mm:
        * Misc/WebNSViewExtras.m:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebDataSource.mm:
        * WebView/WebPDFView.mm:

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

        Reviewed by Oliver Hunt and Oliver Hunt.

        <rdar://problem/4753845> WebKit should use CGEventSourceSecondsSinceLastEventType in place of WKSecondsSinceLastInputEvent SPI.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):  Remove unused symbol.
        * WebKit.order:  Ditto.

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

        Reviewed by Dave Hyatt.

        Make use of new CGFont APIs on Leopard rather than making a WebKitSystemInterface call.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Only initialize wkGetFontMetrics on Tiger.

2008-02-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe (code) and Darin (concept)

        Much better fix for <rdar://problem/4930688> (see r19549)
        Original fix for <rdar://problem/3947312> (and 14 dupes)
        
        Let me tell you a story:
        A long time ago, in a cvs repository far, far away, loader code was almost all up in WebKit.
        WebArchive code was intertwined with that code in bizarre and complex ways.
        During the months long loader re-factoring where we pushed much loader code down into WebCore,
        many portions of the WebKit loader were thinned out until they ceased to exist.  Others remained
        with a sole purpose.

        One such section of code whose lineage traces back from WebFrameLoaderClient to WebFrameLoader
        to WebLoader was originally rooted in the method [WebLoader loadRequest:].  This method was the 
        single entry point for almost all loading (network or web archives)

        This method would check various headers and other fields on the NSURLRequest and NSURLResponse 
        to make decisions about the load.  If the cache control fields were expired or other conditions 
        in the headers were met, the load would be forced to go out to the network.

        As the loader was moved and tweaked repeatedly, most of this code was pruned or re-factored.  
        At some point, all that remained was the special cases for loading WebArchives.  
        
        Somewhere in the r16,000s, this remaining responsibility was noticed and related methods we renamed
        to be WebArchive specific, further cementing the assumed design.

        Problem is, the design was bad.  A WebArchive is meant to be a static snapshot of a WebPage at a
        specific point in time.  Referring to the request to see if the resource should be reloaded seems
        nonsensical, as does referring to the response headers to see if the resource is "expired".  In the 
        context of loading a WebArchive, available data should *always* be loaded from the WebArchive, at least
        during the initial load!

        After discovering the secret to reproducing all of these bugs is both emptying our your Foundation 
        cache and disconnecting your network, it was easy to reproduce the 16 individually reported cases 
        that were all symptoms of this bug, and easy to verify that they are fixed with this patch.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::willUseArchive): Do not call either form of "canUseArchivedResource()" that
          inspect the request or response objects - We are loading from a WebArchive, and we should never
          make the decision to go out to the network when we actually have the resource available.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):  Remove two methods that are no longer used anywhere in WebKit

2008-02-27  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam Roben.

        Bug 14348: Messing up the inspector by dragging an URL into it
        http://bugs.webkit.org/show_bug.cgi?id=14348
        <rdar://problem/5283620> and <rdar://problem/5712808>

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]): Remove duplicate preference setting.
        (-[WebInspectorWindowController webView:dragDestinationActionMaskForDraggingInfo:]):

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

        Reviewed by Adam.

        * WebView/WebArchiver.mm:
        (+[WebArchiver archiveSelectionInFrame:]): Use blankURL.
        * WebView/WebFrame.mm:
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]): Avoid the
        variable name URL to avoid clashing with the renamed KURL in the future. Also use
        blankURL.
        (-[WebFrame loadData:MIMEType:textEncodingName:baseURL:]): Ditto.
        (-[WebFrame _loadHTMLString:baseURL:unreachableURL:]): Ditto.
        (-[WebFrame loadHTMLString:baseURL:]): Ditto.
        (-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]): Ditto.

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

        Reviewed by Sam.

        - remove separate client calls for "standard" and "reload' history

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

2008-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Move basic threading support from WebCore to WTF.

        * ForwardingHeaders/wtf/Threading.h: Added.
        * ForwardingHeaders/wtf/Locker.h: Added.

2008-02-23  David Kilzer  <ddkilzer@apple.com>

        Please clarify licensing for some files
        <http://bugs.webkit.org/show_bug.cgi?id=14970>

        Reviewed by Darin Adler.

        * Plugins/WebNetscapeDeprecatedFunctions.c: Updated copyright statement
        and added Apple BSD-style license.
        * Plugins/WebNetscapeDeprecatedFunctions.h: Ditto.

2008-02-22  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben
        
        Reverted the changed from yesterday to add pasteAndMatchStyle:, as the existing
        pasteAsPlainText: has the same behavior.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        (-[WebHTMLView readSelectionFromPasteboard:]):
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView pasteAsRichText:]):
        (-[WebHTMLView paste:]):
        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2008-02-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Use BackForwardList::create instead.
        
        * History/WebBackForwardList.mm:
        (-[WebBackForwardList init]):

2008-02-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Jessica Kahn
        
        support for pasteAndMatchStyle: command (see <rdar://problem/5723952>)

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:matchStyle:]):
        added matchStyle parameter, passed along to bridge (formerly always passed NO to bridge)
        (-[WebHTMLView readSelectionFromPasteboard:]):
        pass NO for new matchStyle parameter to match old behavior
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        validate pasteAndMatchStyle the same way as pasteAsRichText
        (-[WebHTMLView pasteAndMatchStyle:]):
        just like pasteAsRichText but passes YES for matchStyle
        (-[WebHTMLView pasteAsRichText:]):
        pass NO for new matchStyle parameter to match old behavior
        (-[WebHTMLView paste:]):
        ditto
        
        * WebView/WebView.mm:
        added macro(pasteAndMatchStyle)
        
        * WebView/WebViewPrivate.h:
        added pasteAndMatchStyle: to WebViewEditingActionsPendingPublic category

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-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Move back WebKit methods that were unused in WebCore.
        
        * Misc/WebNSURLExtras.mm:
        (+[NSURL _web_URLWithData:]):
        (+[NSURL _web_URLWithData:relativeToURL:]):
        (-[NSURL _web_originalData]):
        (-[NSURL _web_originalDataAsString]):
        (-[NSURL _web_isEmpty]):
        (-[NSURL _webkit_canonicalize]):
        (-[NSURL _webkit_URLByRemovingComponent:]):
        (-[NSURL _webkit_URLByRemovingFragment]):
        (-[NSURL _webkit_URLByRemovingResourceSpecifier]):
        (-[NSURL _webkit_isFileURL]):
        (-[NSString _webkit_isFileURL]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::setTitle):
        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

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

        Reviewed by Sam.

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]): Eliminate use of
        DeprecatedString.

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

        Reviewed by Dan Bernstein.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17365
        document.createEvent("MessageEvent") throws NOT_SUPPORTED_ERR

        * MigrateHeaders.make: Migrate DOMProgressEvent.h and DOMTextPrivate.h which were
        mistakenly not migrated.

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  Adam Roben  <aroben@apple.com>

        Make WebKit's FEATURE_DEFINES match WebCore's

        Reviewed by Mark.

        * Configurations/WebKit.xcconfig:

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

        Reviewed by Eric Seidel.

        - updated for WebCore KURL changes

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem URL]): Removed getNSURL call.
        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary _absoluteImageURL]): Ditto.
        (-[WebElementDictionary _absoluteLinkURL]): Ditto.
        * Misc/WebNSAttributedStringExtras.mm:
        (fileWrapperForElement): Ditto.
        (+[NSAttributedString _web_attributedStringFromRange:]): Ditto.
        * Misc/WebNSURLExtras.mm:
        (-[NSString _webkit_stringByReplacingValidPercentEscapes]): Updated
        for function name change.
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::downloadURL): Removed getNSURL call.
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::createDragImageForLink): Ditto.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchWillPerformClientRedirect): Ditto.
        (WebFrameLoaderClient::startDownload): Ditto.
        (WebFrameLoaderClient::updateGlobalHistoryForStandardLoad): Ditto.
        (WebFrameLoaderClient::updateGlobalHistoryForReload): Ditto.
        (WebFrameLoaderClient::cancelledError): Ditto.
        (WebFrameLoaderClient::blockedError): Ditto.
        (WebFrameLoaderClient::cannotShowURLError): Ditto.
        (WebFrameLoaderClient::interruptForPolicyChangeError): Ditto.
        (WebFrameLoaderClient::cannotShowMIMETypeError): Ditto.
        (WebFrameLoaderClient::fileDoesNotExistError): Ditto.
        (WebFrameLoaderClient::willUseArchive): Ditto.
        (WebFrameLoaderClient::setTitle): Ditto.
        (WebFrameLoaderClient::actionDictionary): Ditto.
        (WebFrameLoaderClient::createFrame): Ditto.
        (WebFrameLoaderClient::objectContentType): Ditto.
        (WebFrameLoaderClient::createPlugin): Ditto.
        (WebFrameLoaderClient::createJavaAppletWidget): Ditto.
        * WebView/WebDataSource.mm:
        (-[WebDataSource _URL]): Ditto.
        (-[WebDataSource _initWithDocumentLoader:]): Ditto.
        (-[WebDataSource unreachableURL]): Ditto.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Ditto.

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

        Reviewed by Geoff.

        Update order files.

        * WebKit.order:

2008-02-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17207
        Database example doesn't work (requires not-yet-released Safari)

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota): Check Safari version, and allow 5 megabytes of storage
        if it's too old.

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

        - roll out fix for <rdar://problem/5726016> REGRESSION: Xcode News window renders
          incorrectly due to visibility fix

        Removed the Xcode-specific quirk at the request of some folks on the Xcode team.

        * Misc/WebKitVersionChecks.h: Removed the constant.

        * WebView/WebView.mm:
        (-[WebView _needsXcodeVisibilityQuirk]): Removed.
        (-[WebView _preferencesChangedNotification:]): Removed call to
        setNeedsXcodeVisibilityQuirk.

2008-02-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        * WebCoreSupport/WebFrameBridge.mm:
        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory imageTitleForFilename:size:]):
        Move implementation from WebFrameBridge to WebViewFactory.

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

        Reviewed by Mitz.

        - fix <rdar://problem/5726016> REGRESSION: Xcode News window renders
          incorrectly due to visibility fix

        Added an Xcode-specific quirk.

        * Misc/WebKitVersionChecks.h: Added a constant for the "linked on or after"
        part of the check.

        * WebView/WebView.mm:
        (-[WebView _needsXcodeVisibilityQuirk]): Added.
        (-[WebView _preferencesChangedNotification:]): Added a call to
        setNeedsXcodeVisibilityQuirk based on _needsXcodeVisibilityQuirk.

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-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 Adler.

        * 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 Adler.

        * 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 Adler.

        <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 Adler.

        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 Adler.

        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 Adler.
        
        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 Adler.

        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 Adler.

        * 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 Adler.

        * 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 Adler.

        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 Adler.

        <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 Adler.

        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 Adler.

        - <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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.

        - 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 Adler.

        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 Adler.

        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 Adler.

        * WebKit.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.
        
        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 Adler.

        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 Adler.

        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 Adler.

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