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

        Fix the Mac build.

        Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".

        As the comment in FeatureDefines.xcconfig notes, the list of feature defines
        needs to be kept in sync across the various files.  The default values also
        need to be kept in sync between these files and build-webkit.

        * Configurations/FeatureDefines.xcconfig:

2010-01-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7441982> REGRESSION (TOT): Adobe CS4: Installer alerts are displayed as
        blank windows

        * WebView/WebView.mm:
        (shouldEnableLoadDeferring): Load deferring is enabled unless the application is Adobe
        Installer.
        (-[WebView _preferencesChangedNotification:]): Call setLoadDeferringEnabled().

2010-01-28  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        Huge plain text pastes are slow
        <rdar://problem/5195056>
        https://bugs.webkit.org/show_bug.cgi?id=34237

        Mail is ignoring the fragment created from plain text or HTML that is
        passed to the delegate function, that creates a new one.
        This fix avoids creating the fragment twice.

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

2010-01-25  Anders Carlsson  <andersca@apple.com>

        Featureless build fixes.

        * Misc/WebCache.mm:
        (+[WebCache empty]):
        * WebCoreSupport/WebApplicationCache.mm:
        * WebCoreSupport/WebChromeClient.h:
        * WebView/WebDataSource.mm:
        (-[WebDataSource _transferApplicationCache:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):
        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):
        (-[WebView _close]):
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):
        (-[WebViewPrivate finalize]):

2010-01-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Simon Fraser.

        A WebGeolocationControllerClient is leaked for every WebView
        https://bugs.webkit.org/show_bug.cgi?id=34145

        * WebCoreSupport/WebGeolocationControllerClient.h:
        * WebCoreSupport/WebGeolocationControllerClient.mm:
        (WebGeolocationControllerClient::geolocationDestroyed):

2010-01-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34025
        Enable client-based Geolocation abstraction for Mac, Windows AppleWebKit targets.

        * Configurations/FeatureDefines.xcconfig:

2010-01-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele Peterson.

        [WebFrame loadRequest:] does not null check the WebCore::Frame
        <rdar://problem/7416286> and https://bugs.webkit.org/show_bug.cgi?id=34021

        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]): Null check the WebCore::Frame as it can disappear
          out of underneath a WebFrame.

2010-01-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        When scrolling by page, hold back 1/8th of the visible size instead of
        40 px.
        https://bugs.webkit.org/show_bug.cgi?id=32595

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

2010-01-20  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Implement File and Blob interfaces as defined in File API spec.
        https://bugs.webkit.org/show_bug.cgi?id=32912

        * MigrateHeaders.make:

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

        Fix erroneous page scrolls when trying to select text or use form elements
        with the Web Inspector docked.

        http://webkit.org/b/24403
        rdar://problem/6753925

        Reviewed by John Sullivan and Darin Adler.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView): The scrollRect.move() call was
        incorrectly converting the rect under the assumption that the frame view
        is the same size as the WebView. Using convertRect:fromView: instead
        is enough to fix the bug, but that code isn't needed since WebCore
        already takes care of scrolling the main frame's document view, so it
        was redundant to do it here too.

2010-01-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        Feature defines are difficult to maintain on Windows builds
        https://bugs.webkit.org/show_bug.cgi?id=33883

        * Configurations/FeatureDefines.xcconfig: Add comments about keeping feature definitions in sync.

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

        Reviewed by Simon Fraser.

        <rdar://problem/7489504> Clicking on an overflow scrollbar when the window doesn't have
        focus only focuses the window; it should start scrolling too
        https://bugs.webkit.org/show_bug.cgi?id=33906

        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initializeLookupTable]): Initialize WebElementIsInScrollBarKey.
        (-[WebElementDictionary _isInScrollBar]): Added. Returns whether the HitTestResult contains
        a scroll bar.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _isScrollBarEvent:]): Added. Returns whether the event point is in a scroll
        bar in this view.
        (-[WebHTMLView acceptsFirstMouse:]): Accept scroll bar events.
        * WebView/WebView.mm: Define WebElementIsInScrollBarKey.
        * WebView/WebViewPrivate.h: Declare WebElementIsInScrollBarKey.

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

        Redo Tiger build fix without making WebTypesInternal.h a private header

        * WebView/WebHTMLRepresentation.h: Define and use WebNSUInteger.
        * WebView/WebHTMLRepresentation.mm: Import WebTypesInternal.h.

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-19  John Sullivan  <sullivan@apple.com>

        Tiger build fix.
        
        * WebView/WebHTMLRepresentation.h:
        Added #import for WebTypesInternal.h so NSUInteger will be defined on Tiger.

2010-01-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Part of <http://webkit.org/b/28622>.
        Caught exceptions still pause the debugger.
        
        Update WebScriptDebugger::exception to have the hasHandler parameter.
        
        This just adds a new parameter, no behavior is changed.

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::exception):

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-19  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=33854
        Would like a variant of WebHTMLRepresentation's searchForLabelsBeforeElement that returns 
        more info about where the result was found

        Reviewed by Darin Adler

        * WebView/WebHTMLRepresentation.h:
        Declare -searchForLabels:beforeElement:resultDistance:resultIsInCellAbove.
        
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation searchForLabels:beforeElement:]):
        Now calls through to searchForLabels:beforeElement:resultDistance:resultIsInCellAbove.
        (-[WebHTMLRepresentation searchForLabels:beforeElement:resultDistance:resultIsInCellAbove:]):
        New method, calls through to WebCore.

2010-01-19  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add an API to obtain the WebScriptWorld for a given JSGlobalContextRef.

        * WebView/WebScriptWorld.h:
        * WebView/WebScriptWorld.mm:
        (+[WebScriptWorld scriptWorldForGlobalContext:]):

2010-01-19  Steve Block  <steveblock@google.com>

        Unreviewed build fix.

        Fixes Snow Leopard build due to http://trac.webkit.org/changeset/53464

        * Plugins/Hosted/WebHostedNetscapePluginView.mm: Modified. Import <WebCore/Bridge.h>

2010-01-19  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Renames WebCore/bridge/runtime.[cpp|h] to WebCore/bridge/Bridge.[cpp|h]
        https://bugs.webkit.org/show_bug.cgi?id=33801

        * Plugins/Hosted/ProxyInstance.h:

2010-01-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Script attributes are copied and pasted, making cross-domain attacks possible (30019)
        <rdar://problem/6008809>
        https://bugs.webkit.org/show_bug.cgi?id=30019

        * WebView/WebFrame.mm:
        (-[WebFrame _documentFragmentWithMarkupString:baseURLString:]): Modified the call to createMarkupString.

2010-01-18  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Sam Weinig.

        Add missing export for Geolocation.

        * WebKit.exp:

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

        Add +[WebView _setDomainRelaxationForbidden:forURLScheme:]

        WebKit/mac part of fixing <http://webkit.org/b/33806>
        <rdar://problem/7552837> Would like API to disallow setting of
        document.domain for pages with certain URL schemes

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (+[WebView _setDomainRelaxationForbidden:forURLScheme:]):
        * WebView/WebViewPrivate.h:
        Added. Calls through to SecurityOrigin.

2010-01-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Cache JS string values made from DOM strings (Dromaeo speedup)
        https://bugs.webkit.org/show_bug.cgi?id=33768
        <rdar://problem/7353576>
        
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::stringValue): Explicitly make a String, since char*
        is now ambiguous.

2010-01-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7532544>
        
        Expose new method on WebKitSystemInterface, WKGetUserToBaseCTM(), which will
        be used for a shadow drawing fix.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

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-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7512726> Flash full-screen does not work correctly with Flash 10.1 beta

        Explicitly track when the plug-in shows and hides a full-screen window to determine
        whether a plug-in is currently full-screen, rather than relying on menu bar visibility.
        This ensures that we activate the plug-in host process and client application as
        appropriate when the plug-in enters or exits full-screen.

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::isFullScreenWindowShowing):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::setMenuBarVisible):
        (WebKit::NetscapePluginHostProxy::didEnterFullScreen):
        (WebKit::NetscapePluginHostProxy::didExitFullScreen):
        (WebKit::NetscapePluginHostProxy::setFullScreenWindowIsShowing):
        (WKPCSetMenuBarVisible):
        (WKPCSetFullScreenWindowIsShowing):
        * Plugins/Hosted/WebKitPluginClient.defs:

2010-01-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=33455
        Allows plugins to participate in accelerated compositing

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]): If accelerated compositing is
        available, don't use a layer-backed NSView for plugins. Instead, tickle the
        accelerated compositing code via setNeedsStyleRecalc(SyntheticStyleChange),
        which will parent the plugin's layer in the accelerated compositing layer
        tree.

2010-01-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        ScriptController::isEnabled needs to be renamed
        https://bugs.webkit.org/show_bug.cgi?id=32063

        Rename ScriptController::isEnabled to
        ScriptController::canExecuteScripts.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):

2010-01-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Added ENABLE_XHTMLMP flag. Disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2010-01-07  Alexey Proskuryakov  <ap@apple.com>

        More build fix.

        * WebKitPrefix.h: Define JS_EXPORTCLASS here, as well (as empty).

2010-01-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r48075): Clicking and dragging in a widget's text field doesn't create a selection; drags widget instead ( Translation, Weather, Ski Report )
        https://bugs.webkit.org/show_bug.cgi?id=33348
        <rdar://problem/7310616>
        
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): We only want to
        handle file: URLs for the user stylesheet now, so special-case the
        DashboardClient's funky user stylesheet URL by mapping it to the
        equivalent file URL.

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=33331   
        (WebHostedNetscapePluginView should pass acceleratedCompositingEnabled bool to NetscapePluginHostManager when instantiating plug-ins)
        
        * Plugins/Hosted/NetscapePluginHostManager.h: Modify method signature for instantiatePlugin to include acceleratedCompositingEnabled bool.
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]): Pass accelerated compositing status to NetscapePluginHostManage

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

        Reviewed by Simon Fraser.

        Third step of:
        <rdar://problem/6398111> Integrate hardware layers with out-of-process plug-ins layer hosting mechanism

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:value:]): Add case for WKNVSupportsCompositingCoreAnimationPluginsBool.

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

        Reviewed by Simon Fraser.

        Second step of:
        <rdar://problem/6398111> Integrate hardware layers with out-of-process plug-ins layer hosting mechanism

        * Plugins/Hosted/WebHostedNetscapePluginView.h: Expose the CALayer of the plugin by adding -pluginLayer method.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginLayer]): Added.
        * Plugins/WebNetscapePluginView.h: Expose the CALayer of the plugin by adding -pluginLayer method.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView pluginLayer]): Added.

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

        Reviewed by Eric Carlson.

        First step toward:
        <rdar://problem/6398111> Integrate hardware layers with out-of-process plug-ins layer hosting mechanism
        
        Small refactoring moving the PluginWidget class from WebKit to WebCore.

        * WebCoreSupport/WebFrameLoaderClient.mm: Use the WebCore version of PluginWidget.

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

        Reviewed by Mark Rowe.

        Re-enable plug-in halting on Mac after r51953

        * WebCoreSupport/WebPluginHalterClient.mm:
        (WebPluginHalterClient::enabled): Test for the correct selector.

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

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * Info.plist:

2009-12-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Alexey Proskuryakov.

        plugins/get-url-with-iframe-target.html fails on SnowLeopard (64-bit)
        https://bugs.webkit.org/show_bug.cgi?id=32982
        
        This test has been failing on SnowLeopard since it was landed.
        
        The problem is that we never delivered the notification for
        NPN_GetURLNotify, in the frame-targeting case, for out-of-process
        plugins on Mac.
        
        I implemented support for this based on how in-process Mac plugins
        do it.

        * Plugins/Hosted/HostedNetscapePluginStream.h:
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::reasonForError):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::create):
        (WebKit::NetscapePluginInstanceProxy::PluginRequest::PluginRequest):
        (WebKit::NetscapePluginInstanceProxy::destroy):
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        (WebKit::NetscapePluginInstanceProxy::webFrameDidFinishLoadWithReason):
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebHostedNetscapePluginView webFrame:didFinishLoadWithError:]):

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

        Reviewed by Mark Rowe.

        Turn off datagrid by default, at least for all platforms Apple ships.
        The datagrid implementation isn't ready for general web use yet.

        * Configurations/FeatureDefines.xcconfig: Turn off datagrid by default.

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

        Reviewed by Sam Weinig.

        Don't allocate a WebGeolocationControllerClient unless that compile-time setting is enabled.

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

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

        Reviewed by Dan Bernstein.

        Add Mac WebKit side of the client based geolocation provider.

        * Misc/WebKitErrors.m:
        (registerErrors): Add Geolocation errors.
        * Misc/WebKitErrorsPrivate.h:
        * WebCoreSupport/WebGeolocationControllerClient.h: Added.
        (WebGeolocationControllerClient::webView):
        * WebCoreSupport/WebGeolocationControllerClient.mm: Added.
        (WebGeolocationControllerClient::WebGeolocationControllerClient):
        (WebGeolocationControllerClient::startUpdating):
        (WebGeolocationControllerClient::stopUpdating):
        (WebGeolocationControllerClient::lastPosition):
        Add implementation of the WebGeolocationControllerClient.

        * WebView/WebGeolocationPosition.h: Added.
        * WebView/WebGeolocationPosition.mm: Added.
        (-[WebGeolocationPositionInternal initWithCoreGeolocationPosition:]):
        (core):
        (-[WebGeolocationPosition initWithTimestamp:latitude:longitude:accuracy:]):
        * WebView/WebGeolocationPositionInternal.h: Added.
        Add an Objective-C wrapper for GeolocationPosition.
 
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]): Set the GeolocationControllerClient.
        (-[WebView _setGeolocationProvider:]): Set the GeolocationProvider
        (-[WebView _geolocationProvider]): Return the GeolocationProvider.
        (-[WebView _geolocationDidChangePosition:]): Notify WebCore that the position changed.
        (-[WebView _geolocationDidFailWithError:]): Notify WebCore that an error occured.
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

2009-12-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(52325) Chromium build broken due to link failure
        https://bugs.webkit.org/show_bug.cgi?id=32753

        * WebCoreSupport/WebSystemInterface.m:
         - Chromium Mac builds use this file, but do not
           enable Pre-compiled Header (PCH) files so that
           Chromium build bots can take advantage of the faster
           distcc 3.  Eventually all mac builds will likely use
           distcc, but for now we'll add Platform.h here and document
           its usage so it's not removed by accident.

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

        Reviewed by Anders Carlsson.

        Fix preference key name.

        * WebView/WebPreferenceKeysPrivate.h:

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

        Reviewed by Sam Weinig.

        Pass preference to plug-in host.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

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

        Reviewed by Sam Weinig.

        Add WKPCRunSyncOpenPanel implementation.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCRunSyncOpenPanel):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

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

        Reviewed by Sam Weinig.

        Add a useProxiedOpenPanel WebPreference and tunnel it through to the plug-in host.

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences usesProxiedOpenPanel]):
        (-[WebPreferences setUsesProxiedOpenPanel:]):
        * WebView/WebPreferencesPrivate.h:

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

        Reviewed by Anders Carlsson.

        Update WebKitSystemInterface for <rdar://problem/7237059>.        

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2009-12-18  Adam Roben  <aroben@apple.com>

        Add #includes needed after WebCore clean-up

        Rubber-stamped by Anders Carlsson.

        Fixes <http://webkit.org/b/32718>.

        * WebView/WebFrame.mm:
        * WebView/WebFrameView.mm:
        * WebView/WebView.mm:

2009-12-17  Adam Roben  <aroben@apple.com>

        Mac build fix

        * WebView/WebVideoFullscreenController.mm: Added now-needed #import.

2009-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=32499
        Add client based Geolocation provider

        Add first cut of a client based Geolocation provider. This is guarded by
        ENABLE(CLIENT_BASED_GEOLOCATION) and is off by default for now. This adds a
        GeolocationControllerClient interface that no-one currently implements,
        but will in a subsequent patch.

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

2009-12-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Mac build fix. Unreviewed.

        Re-adds code that was mistakenly removed from my last patch.

        * WebCoreSupport/WebPluginHalterClient.mm:
        Add necessary #import.

        * WebView/WebDelegateImplementationCaching.h:
        Declare a new overload of CallUIDelegateReturningBoolean.

        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegateReturningBoolean):
        Add a new overload with different arguments.
        (CallUIDelegateReturningBoolean):
        Ditto.

2009-12-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Pass more information about a plug-in to the PluginHalterDelegate

        Reviewed by Adam Roben.

        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::isWindowed):
        Return false - the Mac doesn't really have windowed plug-ins.
        (WebHaltablePlugin::pluginName):
        Return the name from the plug-in package.

        * WebCoreSupport/WebPluginHalterClient.h:
        Update for new parameters.

        * WebCoreSupport/WebPluginHalterClient.mm:
        (WebPluginHalterClient::shouldHaltPlugin):
        Ditto; pass them when making the delegate call.

        * WebView/WebUIDelegatePrivate.h:
        Update for new parameters.

2009-12-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7295070> WebKit video fullscreen keeps playing after closing the window
        
        Fix a leak of the QTMovieView when exiting fullscreen video, and remove the
        old workaround.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]): Set the movie view as the contentView directly.
        (-[WebVideoFullscreenController setMediaElement:WebCore::]): Cast the contentView to a movie view.
        (-[WebVideoFullscreenController windowDidExitFullscreen]): Remove the old workaround.

2009-12-08  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by David Levin.

        Revert and reopen "Add asserts to RefCounted to make sure ref/deref happens on the right thread."
        It may have caused massive increase of reported leaks on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * ForwardingHeaders/wtf/ThreadVerifier.h: Removed.

2009-12-08  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Add asserts to RefCounted to make sure ref/deref happens on the right thread.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * ForwardingHeaders/wtf/ThreadVerifier.h: Added.

2009-12-07  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by Darin Adler.

        Remove ENABLE_SHARED_SCRIPT flags
        https://bugs.webkit.org/show_bug.cgi?id=32245
        This patch was obtained by "git revert" command and then un-reverting of ChangeLog files.

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Darin Adler.

        <rdar://problem/7450481> One compositing test keeps DRT in "compositing mode", breaks repaint tests

        The counter that WebView used to keep track of the number of enclosed WebHTMLViews using
        accelerated compositing was hard to manage, and maintained incorrectly in a number of cases.
        This caused one compositing test make DumpRenderTree think that all subsequent tests
        were compositing too.
        
        Replace this counter with notifications, which are only fired if a client (DRT) requests them. The
        notification informs the client that a WebHTMLView entered compositing mode (or an already-
        compositing WebHTML was added); it does not say when a view becomes uncomposited, or all
        compositing subviews were removed, since this is tricky to get right.
        
        Change -[WebView _isUsingAcceleratedCompositing] to manually walk the frames, and
        return YES if any document view is composited.

        * WebKit.exp:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView close]):
        (-[WebHTMLView viewDidMoveToSuperview]):
        (-[WebHTMLView attachRootLayer:]):
        (-[WebHTMLView detachRootLayer]):
        * WebView/WebView.mm:
        (+[WebView automaticallyNotifiesObserversForKey:]):
        (-[WebView _postsAcceleratedCompositingNotifications]):
        (-[WebView _setPostsAcceleratedCompositingNotifications:]):
        (-[WebView _isUsingAcceleratedCompositing]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32184
        Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.
        Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.

        * WebView/WebView.mm:
        (aeDescFromJSValue):

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Holger Hans Peter Freyther.

        Turn on (SVG) Filters support, by default.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * Configurations/FeatureDefines.xcconfig: Enable FILTERS build flag.

2009-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7214236> and http://webkit.org/b/32052 - Implement HTML5 state object history API

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebFrameLoadDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):

2009-12-03  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Simplify the settings support in inspector controller.

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

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):

2009-12-03  Ben Murdoch  <benm@google.com>

        Reviewed by Brady Eidson.

        [Android] notifyHistoryItemChanged() should pass a pointer to the HistoryItem that changed.
        https://bugs.webkit.org/show_bug.cgi?id=31915

        * History/WebHistoryItem.mm:
        (WKNotifyHistoryItemChanged): Update WKNotifyHistoryItemChanged() to add the new HistoryItem parameter added in the WebCore portion of this patch.
        * History/WebHistoryItemInternal.h: ditto.

2009-12-03  Ben Murdoch  <benm@google.com>

        Reviewed by Brady Eidson.

        [Android] The FrameLoaderClient is unaware of BackForwardList changes.
        https://bugs.webkit.org/show_bug.cgi?id=31914

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidAddBackForwardItem): Add an empty implementation. Method added to FrameLoaderClient by Android (see bug).
        (WebFrameLoaderClient::dispatchDidRemoveBackForwardItem): ditto.
        (WebFrameLoaderClient::dispatchDidChangeBackForwardIndex): ditto.

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

        Reviewed by Mark Rowe.

        Fix a mistake in the previous change

        * WebView/WebView.mm:
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:]):
        Make sure to include the image types’ view and representation classes
        even when plug-ins are not allowed.

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

        Reviewed by Anders Carlsson.

        Fixed <rdar://problem/7254127> WebKit can load plug-ins even when
        plug-ins are disabled

        Ensure that the shared WebPluginDatabase is not instantiated if no
        WebViews are used that have plug-ins enabled.

        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        Call -[WebView _canShowMIMEType:] on the WebView instead of calling the
        class method.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canShowMIMEType): Ditto.
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Call
        -[WebFrameView _viewClassForMIMEType:] on the WebView instead of calling
        the class method.
        (WebFrameLoaderClient::objectContentType): Ditto.

        * WebView/WebDataSource.mm:
        (+[WebDataSource _representationClassForMIMEType:allowingPlugins:]):
        Added the allowPlugins parameter, which is passed through to
        +[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:].
        (-[WebDataSource _makeRepresentation]): Pass an allowPlugins value
        based on the WebView’s preferences.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _makeDocumentViewForDataSource:]): Call
        -[WebFrameView _viewClassForMIMEType:] instead of calling the class
        method.
        (+[WebFrameView _viewClassForMIMEType:allowingPlugins:]): Added the
        allowPlugins parameter, which is passed through to
        +[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:].
        (-[WebFrameView _viewClassForMIMEType:]): Added. Passes an allowPlugins
        value based on the WebView’s preferences.

        * WebView/WebFrameViewInternal.h:
        * WebView/WebView.mm:
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:]):
        Added the allowPlugins parameter. If false, skip the instantiation of
        the shared WebPluginDatabase.
        (-[WebView _viewClass:andRepresentationClass:forMIMEType:]): Pass an
        allowPlugins value based on the WebView’s preferences.
        (+[WebView _canShowMIMEType:allowingPlugins:]): Passes allowPlugins to
        +_viewClass:andRepresentationClass:forMIMEType:allowingPlugins:.
        (+[WebView canShowMIMEType:]): Changed to pass YES to
        +_canShowMIMEType:allowingPlugins:.
        (-[WebView _canShowMIMEType:]): Added. Passes an allowPlugins value
        based on the WebView’s preferences.
        (-[WebView _pluginForMIMEType:]): Return nil if plug-ins are disabled.
        (-[WebView _pluginForExtension:]): Ditto.
        (-[WebView _isMIMETypeRegisteredAsPlugin:]): Return NO if plug-ins are
        disabled.
        * WebView/WebViewInternal.h:

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.

2009-11-13  Timothy Hatcher  <timothy@apple.com>

        Migrate DOMHTMLInputElementPrivate.h as a private header.

        Reviewed by Darin Adler.

        * MigrateHeaders.make:

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Simon Fraser.

        Add SVG animation test framework with 'snapshot' functionality
        https://bugs.webkit.org/show_bug.cgi?id=31897

        Add API used by the new 'sampleSVGAnimationForElementAtTime' DRT method,
        forwarding the call to SVGDocumentExtensions, if SVG is enabled.

        Implemented just like the existing pauseAnimation* methods for CSS animations.

        * WebView/WebFrame.mm:
        (-[WebFrame _pauseSVGAnimation:onSMILNode:atTime:]):
        * WebView/WebFramePrivate.h:

2009-12-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Simplify [WebView userAgentForURL:].  No need to call into helper function.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::userAgent):
        * WebView/WebView.mm:
        (-[WebView userAgentForURL:]):
        * WebView/WebViewInternal.h:

2009-11-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 31859 - Make world selection for JSC IsolatedWorlds automagical.

        WebCore presently has to explicitly specify the world before entering into JSC,
        which is a little fragile (particularly since property access via a
        getter/setter might invoke execution). Instead derive the current world from
        the lexical global object.

        Since WebCore no longer needs to explicitly specify the world on entry to JSC DebuggerCallFrame::evaluate can be called directly.

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

2009-11-24  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Eric Seidel.

        Add ENABLE_SHARED_SCRIPT feature define and flag for build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=31444

        * Configurations/FeatureDefines.xcconfig:

2009-11-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=31844
        SocketStreamHandleCFNet should support CONNECT proxy credentials

        * WebCoreSupport/WebSystemInterface.m: (InitWebCoreSystemInterface): Add WKSI methods.

2009-11-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        DocumentMarkers need to be educated about transforms
        https://bugs.webkit.org/show_bug.cgi?id=31751
        
        Find highlight is incorrect with transforms
        <rdar://problem/6358394>
        
        Allow callers to specify that Frame::selectionTextRects() takes transforms into account
        when computing the set of rects that encompass a selection. For transformed elemenets, the
        selection rect will be the bounding box of the selected content.
        
        Fix DocumentMarkers to cache rects in absolute coordinates, rather than painting coordinates.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView selectionTextRects]):
        Pass RespectTransforms to get a list of rects with transforms taken into account.

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

        Reviewed by Adam Roben.
        
        <rdar://problem/7401503>
        
        Added a workaround for plug-ins not drawing immediately.
        
        * Plugins/WebBaseNetscapePluginView.mm: Added new constant.
        (-[WebBaseNetscapePluginView _clearSubstituteImage]): Added.
        (-[WebBaseNetscapePluginView resumeFromHalt]): Call above new method.

2009-11-20  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Make sure to export WebSerializedJSValue.

        * WebKit.exp:

2009-11-20  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt and Jon Honeycutt.

        Add support for WebSerializedJSValue to WebKit.  This object wraps the SerializedScriptValue functionality in WebCore
        and exposes the ability to do JS value serialization/deserialization to WebKit clients.

        * WebView/WebSerializedJSValue.h: Added.
        * WebView/WebSerializedJSValue.mm: Added.
        (-[WebSerializedJSValue initWithValue:context:]):
        (-[WebSerializedJSValue deserialize:]):
        (-[WebSerializedJSValue dealloc]):

2009-11-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: add support for 'math' role
        https://bugs.webkit.org/show_bug.cgi?id=31706

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

2009-11-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7035231>
        Support closed caption in <video> element

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):
            Add QTMovieHasClosedCaptions and QTMovieSetShowClosedCaptions.

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory localizedMediaControlElementString:]):
        (-[WebViewFactory localizedMediaControlElementHelpText:]):
            Add accessibility help strings for media controller closed caption button.

2009-11-18  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=27959>.
        Support for validationMessage attribute, as per HTML5 specs.

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory validationMessageValueMissingText]):
        (-[WebViewFactory validationMessageTypeMismatchText]):
        (-[WebViewFactory validationMessagePatternMismatchText]):
        (-[WebViewFactory validationMessageTooLongText]):
        (-[WebViewFactory validationMessageRangeUnderflowText]):
        (-[WebViewFactory validationMessageRangeOverflowText]):
        (-[WebViewFactory validationMessageStepMismatchText]):

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

        Reviewed by Anders Carlsson.

        Make the Mac Geolocation API async.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requestGeolocationPermissionForFrame):
        (-[WebGeolocationPolicyListener initWithGeolocation:]):
        (-[WebGeolocationPolicyListener allow]):
        (-[WebGeolocationPolicyListener deny]):
        Add WebGeolocationPolicyListener implementation of the new WebGeolocationPolicyListener
        protocol and use if to implement requestGeolocationPermissionForFrame using the new async
        API.
        
        * WebCoreSupport/WebGeolocation.mm: Removed.
        * WebCoreSupport/WebGeolocationInternal.h: Removed.
        * WebCoreSupport/WebGeolocationMock.mm: Remove bogus include.
        * WebCoreSupport/WebGeolocationPrivate.h: Removed.
        * WebView/WebUIDelegatePrivate.h: Remove requestGeolocationPermission and add
        WebGeolocationPolicyListener protocol and decidePolicyForGeolocationRequestFromOrigin delegate
        method.

2009-11-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Add Preferences for WebKitShowDebugBorders and WebKitShowRepaintCounter
        https://bugs.webkit.org/show_bug.cgi?id=31601

        These are used to debug accelerated compositing layers

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences showDebugBorders]):
        (-[WebPreferences setShowDebugBorders:]):
        (-[WebPreferences showRepaintCounter]):
        (-[WebPreferences setShowRepaintCounter:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2009-11-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make DRT show web inspector for tests in inspector/ folder.
        - Updated DRT to show/close inspector for all tests under /inspector
        - Introduced LayoutTestController::setTimelineProfilingEnabled and
          WebInspector::setTimelineProfilingEnabled beside setJavaScriptProfilingEnabled
        - Removed reload on each inspector test
        - Renamed fast/inspector to fast/inspector-support in order not to trigger
        inspector for those.
        - Reimplemented timeline tests in order to get rid of reload there.
        - Moved tests that don't require harness into the fast group.

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

        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector isTimelineProfilingEnabled]):
        (-[WebInspector setTimelineProfilingEnabled:]):

2009-11-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Need to implement ARIA role="directory"
        https://bugs.webkit.org/show_bug.cgi?id=31516

        Fix a spelling error in the comment of a localized (accessibility) string.

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

2009-11-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7287487> 
        Do not use QuickTime version to detect media controller theme

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

2009-11-13  Adam Roben  <aroben@apple.com>

        Tell the WebFrameLoadDelegate when window objects in isolated worlds
        are cleared

        Fixes <http://webkit.org/b/31124>.

        Reviewed by Dave Hyatt.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        Replaced windowObjectCleared with this function. If the delegate
        implements it, call
        -webView:didClearWindowObjectForFrame:inScriptWorld:. Otherwise, if
        the passed-in world is the mainThreadNormalWorld(), call
        -webView:didClearWindowObject:forFrame:.

        * WebView/WebDelegateImplementationCaching.h: Added a new entry in the
        frame load delegate implementation cache for the new delegate method.

        * WebView/WebFrameLoadDelegatePrivate.h:
        * WebView/WebScriptWorld.mm:
        (allWorlds): Added. Returns a HashMap of all the WebScriptWorlds in
        existence.
        (-[WebScriptWorld initWithWorld:]): Add ourselves to allWorlds().
        (-[WebScriptWorld dealloc]): Remove ourselves from allWorlds().
        (+[WebScriptWorld findOrCreateWorld:]): Returns the existing
        WebScriptWorld for this DOMWrapperWorld, or a new one if one doesn't
        already exist.

        * WebView/WebScriptWorldInternal.h: Declared +findOrCreateWorld:.

        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]): Cache the
        implementation of the new frame load delegate method.

2009-11-13  Adam Roben  <aroben@apple.com>

        Finish replacing worldIDs with world objects

        The only remaining use of worldIDs was in a method only used by DRT
        for the isolated worlds tests.

        Fixes <http://webkit.org/b/31414> Replace worldIDs with world objects

        Reviewed by Mark Rowe.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebFramePrivate.h:
        Renamed from
        _stringByEvaluatingJavaScriptInIsolatedWorld:WithGobalObject:FromString:.
        Now takes a WebScriptWorld instead of a worldID, so we don't need to
        maintain a map of worldID -> world anymore.

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

        Reviewed by Adele Peterson.

        When exiting full-screen video, rather than resetting the system UI
        mode, restore it to what it was when full-screen mode was entered.

        * WebView/WebVideoFullscreenController.h: Cleaned up style, removed
        unnecessary imports, and added _savedUIMode and _savedUIOptions ivars.
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController delegate]): Cleaned up style.
        (-[WebVideoFullscreenController setDelegate:]): Ditto.
        (-[WebVideoFullscreenController windowDidExitFullscreen]): Restore the
        system UI mode.
        (-[WebVideoFullscreenController windowDidEnterFullscreen]): Save the
        system UI mode.
        * WebView/WebView.mm: Added now-necessary import.

2009-11-12  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        externalRepresentation should take Frame as the argument
        https://bugs.webkit.org/show_bug.cgi?id=31393

        No new tests as this is just a refactoring.

        * Misc/WebCoreStatistics.mm:
        (-[WebFrame renderTreeAsExternalRepresentation]):

2009-11-12  Adam Roben  <aroben@apple.com>

        Replace worldIDs with world objects

        WebScriptWorld is the new object that represents a world.  The only
        place worldID is still used is in -[WebFrame
        _stringByEvaluatingJavaScriptInIsolatedWorld:WithGlobalObject:FromString:],
        but that will change soon.

        Part of <http://webkit.org/b/31414> Implement new SPI for dealing with
        user scripts/stylesheets and isolated worlds

        Reviewed by Sam Weinig.

        * WebKit.exp: Export WebScriptWorld.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptInIsolatedWorld:WithGlobalObject:FromString:]):
        Moved the bizarre world caching/creation logic that DRT depends on
        here from the findWorld function in ScriptController.cpp. Updated to
        use ScriptController::executeScriptInWorld instead of
        ScriptController::executeScriptInIsolatedWorld.
        (-[WebFrame _contextForWorld:]): Renamed from contextForWorldID:. Now
        takes a WebScriptWorld.

        * WebView/WebFramePrivate.h: Replaced contextForWorldID: with
        _contextForWorld:.

        * WebView/WebScriptWorld.h: Added.
        * WebView/WebScriptWorld.mm: Added.
        (-[WebScriptWorld initWithWorld:]): Store the passed-in world in our
        _private member.
        (-[WebScriptWorld init]): Create a new DOMWrapperWorld and pass it to
        -initWithWorld:.
        (-[WebScriptWorld dealloc]): Release _private.
        (+[WebScriptWorld standardWorld]): Returns a shared instance that
        represents WebCore's mainThreadNormalWorld().
        (+[WebScriptWorld world]): Returns a new instance.
        (core): Returns the DOMWrapperWorld for this WebScriptWorld.

        * WebView/WebScriptWorldInternal.h: Added.

        * WebView/WebView.mm:
        (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:]):
        (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:]):
        (+[WebView _removeUserScriptFromGroup:world:url:]):
        (+[WebView _removeUserStyleSheetFromGroup:world:url:]):
        (+[WebView _removeUserScriptsFromGroup:world:]):
        (+[WebView _removeUserStyleSheetsFromGroup:world:]):
        * WebView/WebViewPrivate.h:
        Changed these functions to take a WebScriptWorld instead of a worldID.

2009-11-12  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        ARIA: add alert type roles
        https://bugs.webkit.org/show_bug.cgi?id=31392

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

2009-11-10  Daniel Bates  <dbates@webkit.org>

        Reviewed by Oliver Hunt.

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

        Removed method draggedImage:movedTo:

        * WebView/WebFrame.mm:
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:

2009-11-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Small WebKit part of:
        Fix for <rdar://problem/7059710> 
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=31196 Implement -webkit-
        color-correction for CSS colors

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:]): setFillColor now 
        requires callers to pass a ColorSpace.

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

        Reviewed by Eric Carlson and Darin Adler.

        WebKit part of making full-screen video pause during scrubbing.

        * WebView/WebVideoFullscreenHUDWindowController.h: Added _isScrubbing
        ivar.
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController dealloc]): Assert that
        _isScrubbing is NO.
        (-[WebVideoFullscreenHUDWindowController endScrubbing]): Call
        HTMLMediaElement::endScrubbing().
        (-[WebVideoFullscreenHUDWindowController timelinePositionChanged:]):
        If scrubbing has just begun, call HTMLMediaElement::beginScrubbing()
        and schedule -endScrubbing to be called when mouse tracking ends.

2009-11-09  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dan Bernstein.

        Track "can have scrollbar" state within FrameView independently of the
        individual scrollbar states in ScrollView.

        rdar://problem/7215132, https://bugs.webkit.org/show_bug.cgi?id=29167
        REGRESSION (r48064): mint.com loses scrollbars after coming out of
        edit mode.

        rdar://problem/7314421, https://bugs.webkit.org/show_bug.cgi?id=30517
        REGRESSION (r48064): Extra scroll bars in GarageBand Lesson Store.

        Test: fast/overflow/scrollbar-restored.html

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

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

        Reviewed by Eric Carlson.

        Made the full-screen video HUD appear when playback stops, such as when
        the end of the video is reached.

        * WebView/WebVideoFullscreenHUDWindowController.h: Cleaned up.
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController scheduleTimeUpdate]): Updated
        for the renaming of -updateRate to -updatePlayButton.
        (-[WebVideoFullscreenHUDWindowController updatePlayButton]): Renamed
        -updateRate to this.
        (-[WebVideoFullscreenHUDWindowController updateRate]): This method now
        responds to changes to the playback rate by updating the play button
        and showing or hiding the HUD as necessary.
        (-[WebVideoFullscreenHUDWindowController togglePlaying:]): Now only
        toggles playing. UI updates are driven by -updateRate being called.
        (-[WebVideoFullscreenHUDWindowController playing]): Cleaned up.

2009-11-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by John Sullivan and Mark Rowe.

        <rdar://problem/7356733> Voiceover does not read correct media controller time values

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

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

        Reviewed by Anders Carlsson.

        Made the remaining time display show negative zero at the end of the
        video.

        Made other cleanup.

        * WebView/WebVideoFullscreenHUDWindowController.h: Reverted the types of
        _timeline and _volumeSlider to the more generic NSControl.
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController scheduleTimeUpdate]): Cleaned
        up style.
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]): Added an
        assertion that the cast to NSButton * is legal. Removed casts.
        (-[WebVideoFullscreenHUDWindowController updateTime]): Use
        -setValue:forKey: instead of an NSSlider method.
        (timeToString): Changed to support only non-negative values and
        simplified.
        (-[WebVideoFullscreenHUDWindowController remainingTimeText]): Always
        prepend a “-” to the time.

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

        Reviewed by John Sullivan.

        WebKit part of making the appearance of the full-screen video HUD match
        QuickTime Player X’s HUD.

        * WebView/WebVideoFullscreenHUDWindowController.h: Removed unnecessary
        #import statements, cleaned up style, and changed _timeline,
        _volumeSlider and _playButton to have more specific types.
        * WebView/WebVideoFullscreenHUDWindowController.mm: Updated #import
        statements.
        (webkit_CGFloor): Added this helper function.
        (-[WebVideoFullscreenHUDWindowController init]): Cleaned up style.
        (createTimeTextField): Changed to use the bold system font.
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]): Changed the
        subviews’ metrics and the text fields’ text alignment.
        (-[WebVideoFullscreenHUDWindowController updateTime]): Avoid conversion
        from double to float.
        (stringToTimeTextAttributed): Removed this useless function that
        returned an NSAttributedString masquerading as an NSString.
        (-[WebVideoFullscreenHUDWindowController remainingTimeText]): Removed
        call to stringToTimeTextAttributed().
        (-[WebVideoFullscreenHUDWindowController elapsedTimeText]): Ditto.

2009-11-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Support ARIA "tab" roles
        https://bugs.webkit.org/show_bug.cgi?id=30842

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

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

        Reviewed by Mark Rowe.

        Made the space bar toggle playing state in full-screen video when
        modifier keys are down. Made it do so without highlighting the
        Play/Pause button.

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController keyDown:]):

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

        Reviewed by Mark Rowe.

        Made the full-screen video HUD respond to the up and down arrow keys by
        increasing and decreasing the volume by 1/10 of the range or, when
        combined with the Option key, all the way up or down.

        Made the volume buttons in the full-screen video HUD match the behavior
        of their equivalents in the QuickTime Player HUD by turning the volume
        all the way up or down.

        Made the volume slider update immediately when the keyboard or volume
        buttons are used to change the volume, rather than at the nearest 1/4
        second interval.

        Made the elapsed and remaining time displays update immediately when the
        play head is dragged across the timeline, rather than at 1/4 second
        intervals.

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController keyDown:]): Handle the up and
        down arrow keys.
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]): Changed the
        actions of the volume up and volume down buttons.
        (-[WebVideoFullscreenHUDWindowController setCurrentTime:]): Call
        -updateTime.
        (-[WebVideoFullscreenHUDWindowController setVolumeToZero:]): Added this
        action for the volume down button.
        (-[WebVideoFullscreenHUDWindowController setVolumeToMaximum:]): Added
        this action for the volume up button.
        (-[WebVideoFullscreenHUDWindowController decrementVolume]): No longer
        and action method.
        (-[WebVideoFullscreenHUDWindowController incrementVolume]): Ditto.
        (-[WebVideoFullscreenHUDWindowController setVolume:]): Call
        -updateVolume.

2009-10-30  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        Notify the chrome when the focused node has changed.
        https://bugs.webkit.org/show_bug.cgi?id=30832

        Added stub implementation for new ChromeClient function.

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

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        No new tests (no functional change).

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Oliver Hunt.

        Validate the stopSpeaking: selector so that is not always enabled when a WebView is first responder.

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

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=30932
        <rdar://problem/7350269>
        
        REGRESSION: Crash when turning on Private Browsing on site with flash.
        
        Null check setValue.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView privateBrowsingModeDidChange]):

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

        Reviewed by Kevin Decker.

        Refactor some duplicate plug-in clean up code into shared functions.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController stopOnePlugin:]): New, stop a plug-in.
        (-[WebPluginController destroyOnePlugin:]): New, destroy plug-in.
        (-[WebPluginController stopAllPlugins]): Call stopOnePlugin.
        (-[WebPluginController destroyPlugin:]): Call stopOnePlugin and destroyOnePlugin.
        (-[WebPluginController destroyAllPlugins]): Call destroyOnePlugin.

2009-10-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7303145> 
        Can't exit full screen mode or restart movie after pressing command -R.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController _requestExit]): 
            New, call media element's exitFullscreen method.
        (-[WebVideoFullscreenController requestExitFullscreenWithAnimation:]): 
            Call mediaElement->exitFullscreen() after a delay as it turns around and calls
            WebVideoFullscreenController:exitFullscreen.

        * WebView/WebVideoFullscreenHUDWindowController.h:
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindow resignFirstResponder]):
            New, don't give up responder status.
        (-[WebVideoFullscreenHUDWindow performKeyEquivalent:]):
            New, block all command key events.
        (-[WebVideoFullscreenHUDWindowController exitFullscreen:]):
            Remember when we are in the process of exiting fullscreen, don't allow recursion.

        * WebView/WebView.mm:
        (-[WebView _exitFullscreen]):
            Early return if fullscreen controller is nil.

        * WebView/WebWindowAnimation.h: 
            Correct comment about _window retain status.
        * WebView/WebWindowAnimation.m:
        (-[WebWindowScaleAnimation dealloc]):
            Don't release _window, we never reatained it.

2009-10-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get counter values with layoutTestContoller
        https://bugs.webkit.org/show_bug.cgi?id=30555

        Add counterValueForElement in WebFrame to call WebCore::counterValueForElement.

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame counterValueForElement:]):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for refactoring in the date code.

        * WebView/WebView.mm:
        (aeDescFromJSValue): Since we just want a number of milliseconds, do that
        instead of something more complicated.

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

        Reviewed by Anders Carlsson.

        Move some WebView event handling code into its own file, WebViewEventHandling.mm

        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView _selectedOrMainFrame]):
        * WebView/WebViewEventHandling.mm: Added.
        (-[WebView _closingEventHandling]):
        (-[WebView _setMouseDownEvent:]):
        (-[WebView mouseDown:]):
        (-[WebView mouseUp:]):
        (+[WebView _updateMouseoverWithEvent:]):
        (-[WebView _updateMouseoverWithFakeEvent]):
        (_updateMouseoverWithEvent:fakeEvent::if):
        (-[WebView _stopAutoscrollTimer]):
        (-[WebView _setToolTip:]):
        * WebView/WebViewInternal.h:

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

        Reviewed by Sam Weinig.

        <rdar://problem/6988966> Hardware layers do not show up in page snapshots

        * WebView/WebHTMLViewPrivate.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _compositingLayersHostingView]):
        Add a private method that returns the NSView used to host compositing layers.
        
2009-10-23  Mark Rowe  <mrowe@apple.com>

        Fix engineering builds in the mysterious future.

        * Configurations/DebugRelease.xcconfig:

2009-10-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30729
        Provide private API to request the global context for a specific world.
        Used to initialize parameters on the global object.

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

2009-10-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7322847>
        Pressing space bar key in full screen mode should pause movie but doesn't

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController keyDown:]):  New, toggle playback on space key.
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]): Play button action is now called togglePlaying.
        (-[WebVideoFullscreenHUDWindowController togglePlaying:]): Rename from playingChanged.

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).
        Build fix following bug #30696.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (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-10-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30696
        Update to incorporate support for IsolatedWorlds in JSC bindings.

        * WebView/WebFrame.mm:
        (-[WebFrame _attachScriptDebugger]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame globalContext]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

2009-10-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein & Simon Fraser.

        <rdar://problem/7297717>
        https://bugs.webkit.org/show_bug.cgi?id=30323
        Play/pause button in full-screen video controller does not reflect current state

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setMediaElement:WebCore::]): Register for QTMovieRateDidChangeNotification
        (-[WebVideoFullscreenController rateChanged:]): Call HUD controller when rate changes.

        * WebView/WebVideoFullscreenHUDWindowController.h:
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController scheduleTimeUpdate]): Call updateRate so play button
        reflects playback state.
        (-[WebVideoFullscreenHUDWindowController updateRate]): New, set play button state according to
        movie state.
        (-[WebVideoFullscreenHUDWindowController playingChanged:]): Only call [self playing] once.

2009-10-21  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Dan Bernstein.

        * WebView/WebDynamicScrollBarsView.h:
        Corrected a couple of long-obsolete comments regarding Safari's use of this class.

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

        Rubber-stamped by Mark Rowe.

        <rdar://problem/7319749> REGRESSION(r49806): Contextual Menu items missing
        https://bugs.webkit.org/show_bug.cgi?id=30568

        Revert accidental change from r49806.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Removed WebSocket runtime settings.
        https://bugs.webkit.org/show_bug.cgi?id=29896

        WebSocket runtime configuration is supported by chromium/v8 only.

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

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Update call to loadFrameRequest to match new parameters.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Update call to loadFrameRequest.

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

        Documentation fix for -[NSObject(WebResourceLoadDelegate) webView:resource:willSendRequest:redirectResponse:fromDataSource:]

        Reviewed by Dan Bernstein.

        * WebView/WebResourceLoadDelegate.h: Prepended "webView:" to the
        @method declaration of
        -webView:resource:willSendRequest:redirectResponse:fromDataSource:
        which was absent before r3953 and was missed during the great
        documentation clean up of r4269.

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

        Fix build.

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

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

        Reviewed by Anders Carlsson.

        Split assertions of conjunctions into separate statements or remove
        redundant assertions.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::deadNameNotificationCallback):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebHostedNetscapePluginView _webPluginContainerCancelCheckIfAllowedToLoadRequest:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView halt]):
        (-[WebBaseNetscapePluginView resumeFromHalt]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebNetscapePluginView _webPluginContainerCancelCheckIfAllowedToLoadRequest:]):
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::checkGrammarOfString):
        (WebEditorClient::checkTextOfParagraph):
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _reflectSelection]):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/7309062> Crashes in WebCore::DocumentLoader::isStopping below WebKit::NetscapePluginInstanceProxy::loadRequest.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadRequest): Null-check the DocumentLoader before deferencing it.

2009-10-16  Kevin Decker  <kdecker@apple.com>

        Reviewed by Jon Honeycutt.

        <rdar://problem/7304575>
        
        * Plugins/WebBaseNetscapePluginView.h: Added new boolean ivar and -hasBeenHalted instance method.
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView halt]):Update _hasBeenHalted.
        (-[WebBaseNetscapePluginView hasBeenHalted]): Added.
        * WebView/WebView.mm:
        (+[WebView _hasPluginForNodeBeenHalted:]): Checks to see if a plug-in node's been halted.
        * WebView/WebViewPrivate.h: Added -_hasPluginForNodeBeenHalted method.

2009-10-16  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlson.

        Small code cleanup
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::halt): Just call -[WebBaseNetscapePluginView halt].
        (WebHaltablePlugin::restart): Just call -[WebBaseNetscapePluginView resumeFromHalt]
        (-[WebBaseNetscapePluginView halt]): 
        (-[WebBaseNetscapePluginView resumeFromHalt]):
        * WebView/WebView.mm:
        (_pluginViewForNode): Added a check if a render is a widget. This prevents a later assertion.

2009-10-16  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlson.

        Last part of:
        <rdar://problem/7273354>

        * WebView/WebView.mm: 
        (_pluginViewForNode): Added with code extracted from _isNodeHaltedPlugin
        (+[WebView _isNodeHaltedPlugin:]): Made this a class method.
        (+[WebView _restartHaltedPluginForNode:]): Added. Restarts a plug-in
        * WebView/WebViewPrivate.h: Added +_restartHaltedPluginForNode to header.

2009-10-16  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders.

        <rdar://problem/7273354> 

        * Plugins/WebBaseNetscapePluginView.h: Added _isHalted ivar and three new methods: -halt, -resumeFromHalt, and -isHalted
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::halt): Call -halt instead of -stop.  
        (WebHaltablePlugin::restart):Call -resumeFromHalt instead of -start. 
        (-[WebBaseNetscapePluginView halt]): Added. Stop the plug-in, update _isHalted.
        (-[WebBaseNetscapePluginView resumeFromHalt]): Added. Start the plug-in, update _isHalted.
        (-[WebBaseNetscapePluginView isHalted]): Added.
        * WebView/WebView.mm:
        (-[WebView _isNodeHaltedPlugin:]): Added. Queries a DOMNode to determine if it's a halted plug-in.
        * WebView/WebViewPrivate.h: Added _isNodeHaltedPlugin.

2009-10-15  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7306052> Fullscreen max/min volume buttons non-functional

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]): Set volume buttons target and action.
        (-[WebVideoFullscreenHUDWindowController decrementVolume:]): New, decrement the volume by 10%.
        (-[WebVideoFullscreenHUDWindowController incrementVolume:]): New, increment the volume by 10%.

2009-10-15  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7295738> No way to mute/unmute a movie in full screen video mode

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setVolume:]): Unmute movie before changing volume.

2009-10-14  Kevin Decker  <kdecker@apple.com>

        Unbreak the world.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::restart):

2009-10-14  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson and Jon Honeycutt

        <rdar://problem/7304295> snapshots of halted plug-ins are missing
        
        * Plugins/WebBaseNetscapePluginView.mm: Move bodies of WebHaltablePlugin virtual functions from WebHaltablePlugin class definition.
        (WebHaltablePlugin::halt): Provide a substitute image to the RenderWidget for the plug-in view.
        (WebHaltablePlugin::restart): Clear the substitute image.

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Change the order of arguments on some methods.  Split removal for user stylesheets and script into
        separate functions based off the type of object being removed.

        * WebView/WebView.mm:
        (+[WebView _addUserScriptToGroup:worldID:source:url:whitelist:blacklist:injectionTime:]):
        (+[WebView _addUserStyleSheetToGroup:worldID:source:url:whitelist:blacklist:]):
        (+[WebView _removeUserScriptFromGroup:worldID:url:]):
        (+[WebView _removeUserStyleSheetFromGroup:worldID:url:]):
        (+[WebView _removeUserScriptsFromGroup:worldID:]):
        (+[WebView _removeUserStyleSheetsFromGroup:worldID:]):
        * WebView/WebViewPrivate.h:

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

        Reviewed by Sam Weinig.

        <rdar://problem/6660507> Add "privacy mode" to Netscape Plug-in API

        Listen for WebPreferences notifications and update the _isPrivateBrowsingEnabled ivar 
        when the value changes. Also call -[WebBaseNetscapePluginView privateBrowsingModeDidChange] when the
        value changes. In process this just calls NPP_SetValue, and OOP it sends a MIG message to the plug-in host.
        
        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::privateBrowsingModeDidChange):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        (-[WebHostedNetscapePluginView privateBrowsingModeDidChange]):
        * Plugins/Hosted/WebKitPluginHost.defs:
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView privateBrowsingModeDidChange]):
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]):
        (-[WebBaseNetscapePluginView preferencesHaveChanged:]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView privateBrowsingModeDidChange]):
        (-[WebNetscapePluginView getVariable:value:]):

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

        Reviewed by Darin Adler.

        Video keeps playing after going fullscreen, then closing window
        https://bugs.webkit.org/show_bug.cgi?id=30164
        
        Clear the QTMovie on the QTMovieView when coming out of fullscreen,
        to fix issue where the underlying movie keeps playing.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidExitFullscreen]):

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-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor HistoryController out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30246

        Update API call.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::restoreViewState):
        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):

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

        Reviewed by Brady Eidson.

        <rdar://problem/7290671> Crash after navigating away from a page with subframe containing plug-in

        At the time that -stop is called on a WebBaseNetscapePluginView that is contained within a subframe
        the WebFrame's data source has been zeroed out.  This was causing -[WebBaseNetscapePluginView webFrame]
        to return nil during -stop, preventing the plug-in view from unregistering itself from the PluginHalter.
        We fix this by having -webFrame retrieve the frame directly rather than retrieving it from the data source.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView dataSource]): Get the data source from the WebFrame.
        (-[WebBaseNetscapePluginView webFrame]): Get the Frame directly from the element's document rather
        than taking a windy route through the WebDataSource.

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

        Reviewed by Dan Bernstein.

        Add SPI to specifically enable visited link tracking.

        * History/WebHistory.mm:
        (+[WebHistory _setVisitedLinkTrackingEnabled:]):
        * History/WebHistoryPrivate.h:

2009-10-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the WebKitPluginHalterEnabledPreferenceKey in favor of checking
        for the existence of a PluginHalterDelegate.

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebPluginHalterClient.h:
        Add declaration for new function.

        * WebCoreSupport/WebPluginHalterClient.mm:
        (WebPluginHalterClient::enabled):
        Check whether the UIDelegate responds to shouldHaltPlugin.

        * WebView/WebPreferenceKeysPrivate.h:
        Remove the "enabled" preference key.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        Remove the initialization of the pref.

        * WebView/WebPreferencesPrivate.h:
        Remove the getter/setter for this pref.

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
        Remove propagation of the pref. 

2009-10-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move executeScript from FrameLoader to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=30200

        Update API call.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

2009-10-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        Ask the History Delegate to populate the visited links hash.
        <rdar://problem/7285293> and https://webkit.org/b/29904

        * History/WebHistory.mm:
        (+[WebHistory _removeAllVisitedLinks]):
        * History/WebHistoryPrivate.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::populateVisitedLinks):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        (CallHistoryDelegate):
        * WebView/WebHistoryDelegate.h:
        * WebView/WebView.mm:
        (-[WebView _cacheHistoryDelegateImplementations]):
        (-[WebView addVisitedLinks:]):
        * WebView/WebViewPrivate.h:

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

        Reviewed by Sam Weinig.

        Remove the shouldLoadMediaElementURL implementation.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebPolicyDelegatePrivate.h:

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

        Re-land 49269-49271 since reverting them did not fix the tests.

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

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

        Revert 49269-49271 to see if it fixes test failures on SnowLeopard that do not
        reproduce locally.

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

2009-10-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor PolicyChecker out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30155

        Move the policy callback to the policy object.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebFrameLoaderClient::receivedPolicyDecison):

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

        Reviewed by Darin Adler.

        Send title changes to the global history delegate.
        <rdar://problem/7285293> and https://webkit.org/b/29904

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::setTitle):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebHistoryDelegate.h:
        * WebView/WebView.mm:
        (-[WebView _cacheHistoryDelegateImplementations]):

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

        Reviewed by John Sullivan.

        Make the setMetadataURL function foolproof by having it remove user info
        https://bugs.webkit.org/show_bug.cgi?id=30178
        rdar://problem/6544670

        * Misc/WebNSFileManagerExtras.m:
        (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]):
        Call _web_URLByRemovingUserInfo on the passed in URL string after converting
        it to a URL, and then convert it back to a string.

        * Misc/WebNSURLExtras.h: Added _web_URLByRemovingUserInfo.
        * Misc/WebNSURLExtras.mm: Removed unused WebKitURLComponents struct.
        (-[NSURL _web_URLByTruncatingOneCharacterBeforeComponent:]): Renamed to be
        clearer on what this does.
        (-[NSURL _webkit_URLByRemovingFragment]): Changed to call new name.
        (-[NSURL _webkit_URLByRemovingResourceSpecifier]): Ditto.
        (-[NSURL _web_URLByRemovingComponentAndSubsequentCharacter:]): Added.
        (-[NSURL _web_URLByRemovingUserInfo]): Added.

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

        Make Dan Bernstein happy.

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

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

        Reviewed by Dan Bernstein.

        Avoid Obj-C message dispatch when possible by storing accessed objects
        in local variables.

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

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

        Reviewed by Dan Bernstein.

        Animation stalls for a few seconds partway through
        https://bugs.webkit.org/show_bug.cgi?id=30182
        
        Make sure that we only call -disableScreenUpdatesUntilFlush when a window
        update is actually going to happen, otherwise screen updates are disabled
        for too long.

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

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: default to an attached inspector window on Windows (as on Mac).

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

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

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

        Reviewed by Eric Seidel.

        Move FrameLoader::canLoad to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30111

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck _isForbiddenFileLoad]):
        * WebView/WebFrame.mm:
        (-[WebFrame _allowsFollowingLink:]):

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

        Reviewed by Eric Seidel.

        Move setLocalLoadPolicy and friends to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30110

        Call the new API.

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

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

        Reviewed by Mark Rowe.

        accessibility/media-element.html crashes (and has incorrect result)
        https://bugs.webkit.org/show_bug.cgi?id=30108

        Fix up the accessibilty label for the newly added fullscreen button,
        and update the test result accordingly.

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory localizedMediaControlElementString:]):
        Handle "ControlsPanel" which is just an empty container, to avoid
        asserting in debug builds.

2009-10-06  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30107
        
        Fixes an issue where the Mac build does return the correct drop effect
        with respect to the HTML 5 specification when effectAllowed == "none".
        
        Currently, when effectAllowed == "none" and dropEffect == "copy" or 
        dropEffect == "move" the resulting drop effect is "copy" and "move",
        respectively. However, the HTML 5 specification states that regardless
        of the specified dropEffect, when effectAllowed == "none" the resulting
        drop effect should be "none".

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

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: close inspector client view on
        InspectorController::close API call.

        In order to run batch web inspector layout tests (and not affect 
        subsequent tests) we should close inspector client's view upon
        InspectorController::close API call.

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

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::createPage):

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

        Rubber-stamped by Mark Rowe.

        Moved a WebPluginHalterClient out of the WebCore namesapce.

        * WebCoreSupport/WebPluginHalterClient.h:

2009-10-05  Kevin Decker  <kdecker@apple.com>

        Reviewed by Dan Bernstein.

        Added new PluginHalter client, delegate and few more WebPreferences keys.

        * WebView/WebPreferenceKeysPrivate.h: Added two new keys.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize newly added key.
        (-[WebPreferences pluginAllowedRunTime]): Added.
        (-[WebPreferences setPluginAllowedRunTime:]): Added.
        * WebView/WebPreferencesPrivate.h: Added above two methods.
        * WebView/WebUIDelegatePrivate.h: Added shouldHaltPlugin delegate.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        Setup a new WebPluginHalterClient.
        (-[WebView _preferencesChangedNotification:]): Update WebCore settings accordingly.
        * WebCoreSupport/WebPluginHalterClient.h: Added.
        * WebCoreSupport/WebPluginHalterClient.mm: Added.
        (WebPluginHalterClient::WebPluginHalterClient):
        (WebPluginHalterClient::shouldHaltPlugin): Added, invoke the delegate.

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

        More build fixes for Tiger.

        * WebView/WebVideoFullscreenController.mm:

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

        More build fixes for Tiger.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenWindow animationDidEnd:]):
        * WebView/WebWindowAnimation.m:

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

        More build fixes for Tiger.

        * WebView/WebVideoFullscreenController.mm:
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindow initWithContentRect:styleMask:backing:defer:]):
        (-[WebVideoFullscreenHUDWindowController scheduleTimeUpdate]):
        (-[WebVideoFullscreenHUDWindowController fadeWindowIn]):
        (-[WebVideoFullscreenHUDWindowController fadeWindowOut]):
        (-[WebVideoFullscreenHUDWindowController closeWindow]):

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

        Build fixes for Tiger.

        * WebView/WebVideoFullscreenHUDWindowController.h:
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindow initWithContentRect:styleMask:backing:defer:]):
        (-[WebVideoFullscreenHUDWindowController dealloc]):
        (-[WebVideoFullscreenHUDWindowController closeWindow]):
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):

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

        Build fix. If you call Node::hasTagName(), you also have to include Element.h.

        * WebCoreSupport/WebChromeClient.mm:

2009-10-05  Pierre d'Herbemont  <pdherbemont@webkit.org>

        Reviewed by Simon Fraser
        
        Support fullscreen in MediaPlayer (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=26742

        Add a fullscreen button to the <video> controller if the media engine,
        and the theme have support for fullscreen, and can show appropriate controls.
        Clicking the button calls through the ChromeClient to the WebVideoFullscreenController
        in WebKit to do a nice animation to fullscreen, with a custom controller.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullscreenForNode):
        (WebChromeClient::enterFullscreenForNode):
        (WebChromeClient::exitFullscreenForNode):
        New methods to ask whether fullscreen is possible for a given node, and
        notifications on enterying and exiting fullscreen.
        
        * WebView/WebVideoFullscreenController.h: Added.
        * WebView/WebVideoFullscreenController.mm: Added.
        WebVideoFullscreenController is responsible for creating the fullscreen window,
        and coordinating the various animations when going fullscreen.

        * WebView/WebVideoFullscreenHUDWindowController.h: Added.
        * WebView/WebVideoFullscreenHUDWindowController.mm: Added.
        This class manages the heads-up display (HUD) control bar.

        * WebView/WebView.mm:
        (-[WebView _close]):
        Make sure we come out of fullscreen if the WebView is torn down (e.g. if
        you close a background window).

        (-[WebView _enterFullscreenForNode:WebCore::]):
        Make a WebVideoFullscreenController and tell is to start to go fullscreen.
        
        (-[WebView _exitFullscreen]):
        Tell the WebVideoFullscreenController to come out of fullscreen, and clean up.
        
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):
        (-[WebViewPrivate finalize]):
        * WebView/WebViewInternal.h:
        Keep a pointer to the WebVideoFullscreenController.
        
        * WebView/WebWindowAnimation.h: Added.
        * WebView/WebWindowAnimation.m: Added.
        (WebWindowAnimationDurationFromDuration):
        (scaledRect):
        (squaredDistance):
        Handle the animations used during the transitition to fullscreen.

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-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-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7273363> Plug-ins should use PluginHalter
        
        * Plugins/WebBaseNetscapePluginView.h: Add WebHaltablePlugin forward declare and _haltable ivar.
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::WebHaltablePlugin): Added.
        (WebHaltablePlugin::halt): New method that stops a plug-in.
        (WebHaltablePlugin::restart): New method that starts a plug-in.
        (WebHaltablePlugin::node): Added. Provides the DOMNode corresponding to the plug-in in WebBaseNetscapePluginView.
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        Initialize new _haltable ivar.
        (-[WebBaseNetscapePluginView start]): Call the page's didStartPlugin() upon starting a plug-in.
        (-[WebBaseNetscapePluginView stop]): Call the page's didStopPlugin() upon stopping a plug-in.

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

        Reviewed by Timothy Hatcher.

        Web Inspector: add testing harness for Web Inspector.

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

        * WebInspector/WebInspector.mm:
        (-[WebInspector evaluateInFrontend:callId:script:]):
        * WebInspector/WebInspectorPrivate.h: Added.

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

        Reviewed by Cameron Zwarich.

        * WebView/WebPreferenceKeysPrivate.h: Added new key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Leave plug-in halting disabled by default.
        (-[WebPreferences pluginHalterEnabled]): Added.
        (-[WebPreferences setPluginHalterEnabled:]): Ditto.
        * WebView/WebPreferencesPrivate.h: Added above new methods. 

2009-10-02  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add support for blacklist patterns to user stylesheets and scripts in addition to whitelist patterns.

        * WebView/WebView.mm:
        (toStringVector):
        (+[WebView _addUserScriptToGroup:source:url:worldID:whitelist:blacklist:injectionTime:]):
        (+[WebView _addUserStyleSheetToGroup:source:url:worldID:whitelist:blacklist:]):
        * WebView/WebViewPrivate.h:

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

        Fix the Tiger build.  Don't unconditionally enable 3D canvas as it is not supported on Tiger.

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Oliver Hunt.

        Turn on ENABLE_3D_CANVAS in TOT
        https://bugs.webkit.org/show_bug.cgi?id=29906

        * Configurations/FeatureDefines.xcconfig:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences webGLEnabled]):
        (-[WebPreferences setWebGLEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

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-09-30  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add the ability to remove user stylesheets and scripts by URL.

        * WebView/WebView.mm:
        (+[WebView _removeUserContentFromGroup:url:worldID:]):
        * WebView/WebViewPrivate.h:

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

        Rubberstamped by Dan Bernstein.

        Fix license and some sorting in new files.

        * WebView/WebHistoryDelegate.h:
        * WebView/WebNavigationData.h:
        * WebView/WebNavigationData.mm:

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

        Reviewed by John Sullivan.

        WebKit Mac API should provide a delegate interface for global history.
        <rdar://problem/7042773> and https://webkit.org/b/29904

        * WebView/WebHistoryDelegate.h: Added. New interface for WebKit clients to implement to manage 
          their own global history store.

        Object to store all of the bits of data relevant to a page visit:
        * WebView/WebNavigationData.h: Added.
        * WebView/WebNavigationData.mm: Added.
        (-[WebNavigationDataPrivate dealloc]):
        (-[WebNavigationData initWithURLString:title:originalRequest:response:hasSubstituteData:clientRedirectSource:]):
        (-[WebNavigationData url]):
        (-[WebNavigationData title]):
        (-[WebNavigationData originalRequest]):
        (-[WebNavigationData response]):
        (-[WebNavigationData hasSubstituteData]):
        (-[WebNavigationData clientRedirectSource]):
        (-[WebNavigationData dealloc]):

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): If the delegate exists, don't use the built-in WebHistory.
          If the implementation for this method exists, call it.
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks): Ditto

        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        (WebViewGetHistoryDelegateImplementations):
        (CallHistoryDelegate):

        * WebView/WebView.mm:
        (-[WebView _cacheHistoryDelegateImplementations]):
        (-[WebView setHistoryDelegate:]):
        (-[WebView historyDelegate]):
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

2009-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add support for run-time flag for 3D canvas
        https://bugs.webkit.org/show_bug.cgi?id=29826

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Enable experimental
        WebGL flag when 3D_CANVAS is enabled in the build.

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add experimentalWebSocketsEnabled in WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=28941

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

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

        Reviewed by Anders Carlsson.

        <rdar://problem/7240911> REGRESSION (r48586): Crash occurs when loading
        a PDF

        CGPDFObjectRef is not a CFTypeRef, and cannot be retained or released.
        Its lifetime is managed by its container. Just use a Vector to store
        CGPDFObjectRefs, relying on the CGPDFDocument to keep them alive.

        * WebView/WebPDFDocumentExtras.mm:
        (appendValuesInPDFNameSubtreeToVector):
        (getAllValuesInPDFNameTree):
        (web_PDFDocumentAllScripts):

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Alice Liu.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        Pass 0 for new Page constructor argument.

2009-09-14  John Gregg  <johnnyg@google.com>

        Reviewed by Eric Seidel.

        isEnabled switch for notifications (experimental) in Page Settings
        https://bugs.webkit.org/show_bug.cgi?id=28930

        Adds support for the experimentalNotificationsEnabled flag in Settings
        through WebPreferencesPrivate.

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

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Updated for a WebCore rename.

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

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-09-23  David Kilzer  <ddkilzer@apple.com>

        Move definition of USE(PLUGIN_HOST_PROCESS) from WebKitPrefix.h to Platform.h

        Reviewed by Mark Rowe.

        * WebKitPrefix.h: Removed definition of
        WTF_USE_PLUGIN_HOST_PROCESS.

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-09-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7240911> REGRESSION (r48586): Crash occurs when loading
        a PDF

        * WebView/WebPDFDocumentExtras.mm:
        (addWebPDFDocumentExtras): Made methodList static, because
        class_addMethods() doesn't copy it.

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

        Attempt to fix the Tiger build

        * WebView/WebPDFDocumentExtras.mm:
        (addWebPDFDocumentExtras):

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

        Attempt to fix the Tiger build

        * WebView/WebPDFDocumentExtras.mm:
        (web_PDFDocumentAllScripts):
        (addWebPDFDocumentExtras):

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

        Attempt to fix the Tiger build

        * WebView/WebPDFDocumentExtras.mm:
        * WebView/WebPDFRepresentation.mm:

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

        Attempt to fix the Leopard and Tiger builds

        * WebView/WebPDFDocumentExtras.mm:

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

        Reviewed by Anders Carlsson.

        <rdar://problem/4137135> iFrame with PDF not being handled correctly on
        usps.com
        https://bugs.webkit.org/show_bug.cgi?id=4151

        * WebView/WebJSPDFDoc.h: Added.
        * WebView/WebJSPDFDoc.mm: Added.
        (jsPDFDocInitialize): Retains the WebDataSource.
        (jsPDFDocFinalize): Releases the WebDataSource.
        (jsPDFDocPrint): Call the WebUIDelegate method -webView:printFrameView:
        with the PDF document's view.
        (makeJSPDFDoc): Makes and returns a JavaScript Doc instance that wraps
        the WebDataSource.
        * WebView/WebPDFDocumentExtras.h: Added.
        * WebView/WebPDFDocumentExtras.mm: Added.
        (appendValuesInPDFNameSubtreeToArray): Traverses a subtree of a PDF name
        tree and adds all values in the subtree to an array.
        (allValuesInPDFNameTree): Returns an array with all of the values in a
        PDF name tree.
        (web_PDFDocumentAllScripts): This is the implementation of -[PDFDocument
        _web_allScripts]. It gets all values in the document-level "JavaScript"
        name tree, which are action dictionaries, and returns an array of the
        actions' scripts.
        (addWebPDFDocumentExtras): Adds the -_web_allScripts method to
        PDFDocument.
        * WebView/WebPDFRepresentation.h:
        * WebView/WebPDFRepresentation.m: Removed.
        * WebView/WebPDFRepresentation.mm: Copied from WebKit/mac/WebView/WebPDFRepresentation.m.
        (+[WebPDFRepresentation initialize]): Added. Calls
        addWebPDFDocumentExtras().
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]): Get the
        scripts from the PDF document, create a JavaScript Doc object for the
        document, and a JavaScript execution context, then execute every script
        in the context, with the Doc object as "this".

2009-09-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Compositing layers are incorrectly positioned after scrolling with position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=29262
        
        When scrolling a page with compositing layers inside a position:fixed element,
        we need to update the compositing layer positions when the scroll position changes.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):
        Call the new FrameView::scrollPositionChanged() method rather than sending the
        scroll event directly.

2009-09-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make PlatformWindow return something else than PlatformWidget
        https://bugs.webkit.org/show_bug.cgi?id=29085

        Reflect the rename of platformWindow and it's return type.

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

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-09-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Work around a bug in AppKit on Leopard which causes compositing layers to jitter, and
        become misplaced when the WebHTMLView is resized or scrolled sometimes.
        <rdar://problem/7071636>
        
        The previous fix didn't fix the case where the layers jiggle when resizing the docked
        inspector when the view size is over 2048px tall, on Leopard.

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

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

        Reviewed by Oliver Hunt.

        Work around a bug in AppKit on Leopard which causes compositing layers to jitter, and
        become misplaced when the WebHTMLView is resized or scrolled sometimes.
        <rdar://problem/7071636>
        
        We call an internal AppKit method to make sure the layer geometry is updated correctly.

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

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

        Reviewed by Dan Bernstein.

        Fixed position elements flash when CSS transforms are applied on page > 2048px tall
        https://bugs.webkit.org/show_bug.cgi?id=27272
        
        Update the previous workaround for misplaced compositing layers, which used a 4096px
        threshold, to 2048px since that's the GPU max texture size on some older hardware.

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

2009-09-15  Alex Milowski  <alex@milowski.com>

        Reviewed by Tor Arne Vestbø.

        Added the ENABLE_MATHML to the feaure defines

        * Configurations/FeatureDefines.xcconfig:

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-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):

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-09-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        Fix <rdar://problem/7145242> Crashes inside WTF::HashTable below NetscapePluginInstanceProxy::disconnectStream

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::cancelLoad): Canceling the load can result in calling through to disconnectStream.
        If the plug-in instance holds the last reference to the plug-in stream this will result in the stream being deallocated.
        This leads to HostedNetscapePluginStream::cancelLoad's call to disconnectStream being passed a deallocated stream object.
        Since the stream was already disconnected by the call to cancel there's no need to call disconnectStream a second time.

2009-09-11  Eric Seidel  <eric@webkit.org>

        No review, rolling out r48229.
        http://trac.webkit.org/changeset/48229

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

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

        Rubber-stamped by Sam Weinig.

        Update JavaScriptCore and WebKit's FeatureDefines.xcconfig so that they are in sync with WebCore as they need to be.

        * Configurations/FeatureDefines.xcconfig:

2009-09-09  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Initialize DataTransfer's effectAllowed and dropEffect properties correctly
        according to HTML5 spec (sec. 7.9.2-7.9.3).
        https://bugs.webkit.org/show_bug.cgi?id=26700

        * WebView/WebFrame.mm:
        (-[WebFrame _dragSourceMovedTo:]):
            Pass current drag operation (if known) to EventHandler::dragSourceMovedTo().

2009-09-09  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection.  This is similar
        to user script injection but allows for user stylesheets to be added.  The stylesheets are applied immediately
        to all Frames in the PageGroup.

        Added userscripts/simple-stylesheet.html test case.

        * WebView/WebView.mm:
        (+[WebView _addUserStyleSheetToGroup:source:url:worldID:patterns:]):
        * WebView/WebViewPrivate.h:

2009-09-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds a mock Geolocation service. This will be used to provide predictable behavior of the
        Geolocation API for use in LayoutTests. Later changes will integrate the the mock
        Geolocation service with DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=28264

        * WebCoreSupport/WebGeolocationMockPrivate.h: Added.
        * WebCoreSupport/WebGeolocationMock.mm: Added.
        (+[WebGeolocationMock setError:code:]): Added. Used by DumpRender tree to configure the mock Geolocation service.
        (+[WebGeolocationMock setPosition:latitude:longitude:accuracy:]): Added. Used by DumpRender tree to configure the mock Geolocation service.
        * WebKit.exp: Modified. Exports WebGeolocationMock.

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

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default.
        https://bugs.webkit.org/show_bug.cgi?id=28959

        * Configurations/FeatureDefines.xcconfig:

2009-09-06  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Drop <definition-src> support
        https://bugs.webkit.org/show_bug.cgi?id=28991

        * MigrateHeaders.make: Remove reference to ObjC definition-src
        binding class.

2009-09-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

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

        Account for scrollbar state changes that occur during layout.

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

        Perform a layout prior to checking whether the scrollbar modes are
        off, on, or automatic.  The modes may change during layout.

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

        Eliminate duplicated (and incorrect) scrollbar mode tracking between
        FrameView and ScrollView.

2009-09-03  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28890, make simple user script injection work.
        
        This patch adds new API for adding and removing user scripts from page groups.  User scripts
        are bundled together in isolated worlds (you can have multiple scripts together in the same
        world).

        Added userscripts/ directory for holding new tests (along with a simple test of script injection).

        * WebView/WebView.mm:
        (+[WebView _addUserScriptToGroup:source:url:worldID:patterns:injectionTime:]):
        (+[WebView _removeUserContentFromGroup:worldID:]):
        (+[WebView _removeAllUserContentFromGroup:]):
        * WebView/WebViewPrivate.h:

2009-09-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Plumb mixed content notifications to WebFrameLoadDelegatePrivate.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebFrameLoadDelegatePrivate.h: Added.

2009-09-03  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.

        Change notImplemented() to a FIXME.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):

2009-09-03  Adam Barth  <abarth@webkit.org>

        Reviewed by eric@webkit.org.

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

        Plumb mixed content notifications to WebFrameLoadDelegatePrivate.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebFrameLoadDelegatePrivate.h: Added.

2009-09-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Stub implementations of mixed content methods of FrameLoaderClient. 

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):

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

        Reviewed by Darin Adler.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _topHTMLView]): Rework the ASSERT in this method to reflect the
          reality of calling this method for pages currently in the PageCache.

2009-08-31  Dimitri Glazkov  <dglazkov@chromium.org>

    Reverting http://trac.webkit.org/changeset/47904, because it caused
    layout test failure.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28852
        Rename KURL single argument constructor to avoid confusion

        * WebView/WebScriptDebugger.mm: (toNSURL): Adapt to the change.

2009-08-31  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

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

        Perform a layout prior to checking whether the scrollbar modes are
        off, on, or automatic.  The modes may change during layout.

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

2009-08-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by John Sullivan.

        update-webkit-localizable-strings script can no longer complete
        https://bugs.webkit.org/show_bug.cgi?id=28792

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

2009-08-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Add empty implementation for new ChromeClient method.

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

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <video> and <audio> controller should be accessible
        https://bugs.webkit.org/show_bug.cgi?id=28081

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory localizedMediaControlElementString:]):
        (-[WebViewFactory localizedMediaControlElementHelpText:]):
        (-[WebViewFactory localizedMediaTimeDescription:]):
            New.

2009-08-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by NOBODY (build fix)

        Turn off ENABLE_3D_CANVAS in the xconfig files.

        * Configurations/FeatureDefines.xcconfig:

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

        Revert 47684.  We're going to do this later once clients have had a
        chance to opt into the setting they like.

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

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

        Reviewed by Eric Seidel.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

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

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-08-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Enable various "grouping" ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=28486

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

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-08-19  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=24853: Provide a way for WebKit clients to
        specify a more granular policy for cross-origin XHR access.

        * WebView/WebView.mm: Add SPI to manipulate origin access whitelists.
        (+[WebView _whiteListAccessFromOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]): Ditto.
        (+[WebView _resetOriginAccessWhiteLists]): Ditto.
        * WebView/WebViewPrivate.h: Ditto.

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

        Reviewed by Adele Peterson.

        Mac specific part of
        
        <rdar://problem/7135588> HTMLMediaElement should ask WebPolicyLoadDelegate before loading resource

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Implement shouldLoadMediaElementURL by asking the policy delegate.
        
        * WebView/WebPolicyDelegatePrivate.h:
        Add new delegate method, remove some unused cruft.

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads.
        https://bugs.webkit.org/show_bug.cgi?id=28292

        * WebKit.exp:
        Exported WebWorkersPrivate so DumpRenderTree can access it.
        * Workers/WebWorkersPrivate.h: Added.
        * Workers/WebWorkersPrivate.mm: Added.
        (+[WebWorkersPrivate workerThreadCount]):
        Added WebWorkersPrivate::workerThreadCount() API for DumpRenderTree.

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

        Reviewed by Sam Weinig.

        Use a HashMap instead of a list of if statements for the command
        name exception map.

        * WebView/WebHTMLView.mm:
        (createSelectorExceptionMap): Added.
        (commandNameForSelector): Use createSelectorExceptionMap.

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

        <http://webkit.org/b/28366> WebHTMLViewInternal.h: add @class CALayer declaration

        Reviewed by Simon Fraser.

        Without WebKitPrefix.h, the missing @class CALayer declaration
        causes a compile-time error.

        * WebView/WebHTMLViewInternal.h: Added @class CALayer
        declaration with USE(ACCELERATED_COMPOSITING).

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

        <http://webkit.org/b/28355> Replace MAX()/MIN() macros with type-safe std::max()/min() templates

        Reviewed by Dan Bernstein.

        * Plugins/WebBaseNetscapePluginStream.mm: Added using std::min
        statement.
        (WebNetscapePluginStream::deliverData): Changed MIN() to min().
        Changed C-style cast to a static_cast.
        * Plugins/WebNetscapePluginView.mm: Added using std::min
        statement.
        (-[WebNetscapePluginView _postURL:target:len:buf:file:notifyData:sendNotification:allowHeaders:]):
        Changed MIN() to min().  Changed C-style cast to a static_cast.
        * WebView/WebHTMLView.mm: Added using std::max statement.
        (-[WebHTMLView _dragImageForURL:withLabel:]): Changed MAX() to
        max().
        (-[WebHTMLView _scaleFactorForPrintOperation:]): Ditto.
        * WebView/WebTextCompletionController.mm: Added using std::max
        and using std::min statements.
        (-[WebTextCompletionController _placePopupWindow:]): Changed
        type of maxWidth variable from float to CGFloat to prevent a
        type mismatch on x86_64.  Changed MAX() to max() and MIN() to
        min().  Added static_cast for a constant value since CGFloat is
        defined as a float on i386 and as a double on x86_64.

2009-08-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Sam Weinig.

        Added ENABLE_EVENTSOURCE flag.
        https://bugs.webkit.org/show_bug.cgi?id=14997

        * Configurations/FeatureDefines.xcconfig:

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

        Build fix.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):  Add the necessary .get() calls.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/7091546> - Assertion failure in plugins/return-error-from-new-stream-doesnt-invoke-destroy-stream.html 
        on 64-bit SnowLeopard

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::cancelLoad): Since this might be called while the FrameLoader is switching DocumentLoaders
          during the brief moment where there is no activeDocumentLoader(), accept and handle a validly null DocumentLoader.

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

        Reviewed by Brady Eidson.

        Fix leaks of NSNumber and NSMutableArray objects seen during layout tests.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate): Don't leak an NSMutableArray that we allocate.

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-08-13  Darin Adler  <darin@apple.com>

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Updated includes.
        * WebView/WebScriptDebugger.mm: Ditto.

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

        Reviewed by Kevin Decker.

        <rdar://problem/6017913> Replace use of HISearchWindowShow in -[WebView _searchWithSpotlightFromMenu].

        * WebView/WebView.mm:
        (-[WebView _searchWithSpotlightFromMenu:]): Use -[NSWorkspace showSearchResultsForQueryString:] post-Leopard.

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

        Reviewed by Eric Seidel.

        Add delegate methods about focus and blur and state change
        https://bugs.webkit.org/show_bug.cgi?id=27153
        
        Have ObjC delegate methods match C++ method names in the ChromeClient.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::formDidFocus):
        (WebChromeClient::formDidBlur):
        * WebView/WebUIDelegatePrivate.h:

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Desktop Notifications API
        https://bugs.webkit.org/show_bug.cgi?id=25643

        Adds ENABLE_NOTIFICATION flag.

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Sam Weinig.

        Remove dead declarations.
        
        * WebView/WebViewInternal.h:

2009-08-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Adam Roben.

        Originally implemented by Glenn Wilson <gwilson@chromium.org>.

        Added new methods for overriding default WebPreference values
        and for resetting preferences to their defaults.
        See https://bugs.webkit.org/show_bug.cgi?id=20534

        * WebView/WebPreferences.mm:
        (-[WebPreferences _setPreferenceForTestWithValue:withKey:]): added.
        * WebView/WebPreferencesPrivate.h: same.

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

        Reviewed by George Staikos.

        [WML] Deck access control is completly broken
        https://bugs.webkit.org/show_bug.cgi?id=27721

        Synchronize WebFrameLoadType with FrameLoadType enum. Append 'WebFrameLoadTypeBackWMLDeckNotAccessible'.

        * WebView/WebFramePrivate.h:

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

        Fix the build on 10.6.

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

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

        Fix a stylistic nit related to the location of the *, which, for some
        ridiculous reason, WebKit style dictates to be different between Objective-C and C++.
        
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):

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

        Reviewed by Dan Bernstein.

        Work around an issue on Leopard where composited layers are misplaced and squished when the page
        gets over 4096px tall.
        https://bugs.webkit.org/show_bug.cgi?id=27272
        <rdar://problem/7067892> [Leopard] Composisted layers are misplaced and squished on on long pages
        <rdar://problem/7068252> [Leopard] When switching to a tab with HW layers, they fade in

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        Call -_updateLayerHostingViewPosition after scrolling.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):
        Call -_updateLayerHostingViewPosition after the view changes size.

        (-[WebHTMLView attachRootLayer:]):
        Turn off default animations, to avoid animations of sublayer transform, and fading-in
        when tab switching.
        
        * WebView/WebHTMLViewInternal.h:
        (-[WebHTMLView _updateLayerHostingViewPosition]):
        New method that constrains the height of the layer-hosting view to a max height
        of 4096px, and compensates for the height restriction by placing the layer-hosting
        view at the top of the visible part of the WebHTMLView, and adjusting the position
        of the hosted layers via sublayer transform.

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

        Fix Tiger build.
        
        * WebView/WebRenderNode.mm:
        (-[WebRenderNode _initWithCoreFrame:]):

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

        Reviewed by Timothy Hatcher and Sam Weinig.

        Change WebRenderNode to take a WebFrame instead of a WebFrameView.
        
        * WebView/WebRenderNode.h:
        * WebView/WebRenderNode.mm:
        (-[WebRenderNode _initWithName:position:rect:coreFrame:children:]):
        (copyRenderNode):
        (-[WebRenderNode _initWithCoreFrame:]):
        (-[WebRenderNode initWithWebFrame:]):

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

        Reviewed by Darin Adler and Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::hasHTMLView):
        Always return true when we're in viewless mode.

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

        Remove WebGraphicsExtras.h include.
        
        * Plugins/WebNetscapePluginView.mm:

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

        Reviewed by Sam Weinig.

        Remove WebGraphicsExtras, it is no longer used.

        * Misc/WebGraphicsExtras.c: Removed.
        * Misc/WebGraphicsExtras.h: Removed.

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

        Reviewed by David Hyatt.

        Added ENABLE_3D_CANVAS flag to build, default to off

        * Configurations/FeatureDefines.xcconfig:

2009-08-04  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

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

        Mods to keep up with ApplicationCacheHost refactoring.

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

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

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        * Misc/WebNSAttributedStringExtras.mm:
        (fileWrapperForElement):
        * Misc/WebNSPasteboardExtras.mm:
        (imageFromElement):
        (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        (-[WebFrame _accessibilityTree]):
        * WebView/WebRenderNode.mm:
        (copyRenderNode):
        Use checked casts.

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-07-30  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

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

        Mods to keep up with ApplicationCacheHost refactoring.

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

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

        <http://webkit.org/b/27788> Don't export WebPluginController.h as a private header

        Reviewed by Mark Rowe.

        * Plugins/WebPluginController.h: Changed #import of
        WebPluginContainerCheck.h to use a framework-style include in
        case other platforms wish to export WebPluginController.h as a
        private header.

2009-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        Added foundation work to allow a testing infrastructure for the Web
        Inspector.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::inspectorWindowObjectCleared): Send the delegate
        callback.
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):
        * WebView/WebViewPrivate.h: The delegate SPI.

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

        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-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):
        (+[WebCoreStatistics memoryStatistics]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::wantsAllStreams):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebNetscapePluginView setWindowIfNecessary]):
        (-[WebNetscapePluginView createPluginScriptableObject]):
        (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebNetscapePluginView loadPluginRequest:]):
        (-[WebNetscapePluginView _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 scopeChain]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

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

        Reviewed by Mark Rowe.

        REGRESSION (r46298): Exception after clicking on Bookmarks button in the Bookmarks Bar
        https://bugs.webkit.org/show_bug.cgi?id=27667

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Moved the code to set the
        title here. This is late enough that both the view and representation exist.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _makeRepresentation]): Removed the code to set the title from here.
        It's a bit too early.

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        Adds the WebApplicationCache class that is
        used by the DumpRenderTree test application to
        configure the Application Cache maximum size.

        * WebCoreSupport/WebApplicationCache.h: Added.
        * WebCoreSupport/WebApplicationCache.mm: Added.
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::reachedMaxAppCacheSize):
        Adds empty implementation of the reachedMaxAppCacheSize callback.
        * WebKit.exp:

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

        * WebView/WebDataSource.mm:
        (-[WebDataSource _makeRepresentation]): Landed a comment I forgot last time.

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

        Reviewed by Brady Eidson.

        URL appears in back/forward button menu instead of title for items with custom representation
        https://bugs.webkit.org/show_bug.cgi?id=27586
        rdar://problem/5060337

        The problem is that DocumentLoader expects to store a title, but for custom representations
        it is never passed to the document loader.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _makeRepresentation]): Added a call to DocumentLoader::setTitle.
        Works as long as the title does not change during the document's lifetime, which
        is good enough for the simple cases in Safari.

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

        Reviewed by Dan Bernstein.

        REGRESSION (r39185): Safari adds ".jpeg" extension to images that already have ".JPG" extension
        https://bugs.webkit.org/show_bug.cgi?id=27472

        * WebView/WebHTMLView.mm:
        (matchesExtensionOrEquivalent): Changed category method into a C function.
        Made it require the leading dot when checking for the extension and do it
        in a non-case-sensitive way.
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Changed to call
        the function.

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        * Configurations/FeatureDefines.xcconfig: Added flag ENABLE_RUBY.

2009-07-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://problem/5712795> Win: Cannot change the height of the docked Web Inspector (14272)
        https://bugs.webkit.org/show_bug.cgi?id=14272
        
        Removed size calculation code from [WebInspectorWindowController setInitialAttachedHeight] into
        InspectorController.cpp to make it cross platform, and use InspectorController to store the 
        user's preferred size for an attached window, instead of NSUserDefaults.

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

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add ENABLE_WEB_SOCKETS

        * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Darin Adler.

        Fix tooltip does not get its directionality from its element's directionality.
        https://bugs.webkit.org/show_bug.cgi?id=24187

        Per mitz's suggestion in comment #6, while getting the plain-text 
        title, we also get the directionality of the title. How to handle 
        the directionality is up to clients. Clients could ignore it, 
        or use attribute or unicode control characters to display the title
        as what they want.

        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary _spellingToolTip]): Change spellingToolTip caller due to signature change.
        (-[WebElementDictionary _title]): Change title caller due to signature change.
        * WebCoreSupport/WebChromeClient.h: Add directionality as 2nd parameter to setToolTip().
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setToolTip): Add directionality as 2nd parameter to setToopTip() (without handling it yet).

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

        Reviewed by Sam Weinig.

        Renamed parseURL to deprecatedParseURL.

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument URLWithAttributeString:]): Renamed.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Renamed.

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27304
        WebKit should provide usage and eligibility information about the page cache.

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics numberCachedPages]):
        (+[WebCoreStatistics numberCachedFrames]):
        (+[WebCoreStatistics numberAutoreleasedPages]):
        * WebKit.exp:

        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]): Returns a dictionary with all the data about
          why the frame is not cacheable. If the frame *is* cacheable, the dictionary is
          empty.
        * WebView/WebFramePrivate.h:

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

        Reviewed by Dan Bernstein, Adam Roben.

        "Unrecognized selector" console log when the Safari 4 Welcome page navigates to Top Sites.
        <rdar://problem/6994893

        attachRootGraphicsLayer() should not assume that the frameView's documentView
        is a WebHTMLView.
        
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachRootGraphicsLayer):

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-13  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser.

        Correct these delegate methods' declarations by adding parameter names.

        * WebView/WebUIDelegatePrivate.h:

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

        Reviewed by David Levin.

        Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
        https://bugs.webkit.org/show_bug.cgi?id=26932

        Added ENABLE(SHARED_WORKERS) flag (disabled by default).

        * Configurations/FeatureDefines.xcconfig:

2009-07-12  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Refactor ConsoleMessage to add MessageType attribute.
        https://bugs.webkit.org/show_bug.cgi?id=20625

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

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

        Enable support for accelerated compositing and 3d transforms on Leopard.
        <https://bugs.webkit.org/show_bug.cgi?id=20166>
        <rdar://problem/6120614>

        Reviewed by Oliver Hunt.

        * Configurations/FeatureDefines.xcconfig:

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

        Bug 27007: Build fixes when ICONDATABASE is disabled

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

        Reviewed by Sam Weinig.

        * Misc/WebIconDatabase.mm:
        (defaultClient): Return 0 if ICONDATABASE is disabled.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveIcon): Commented out
        the body of the method if ICONDATABASE is disabled.
        (WebFrameLoaderClient::registerForIconNotification): Ditto.
        * WebCoreSupport/WebIconDatabaseClient.mm: Added #if
        ENABLE(ICONDATABASE)/#endif guard to source.
        * WebView/WebView.mm:
        (-[WebView setFrameLoadDelegate:]): Wrapped code that starts the
        icon database machinery in #if ENABLE(ICONDATABASE)/#endif.
        (-[WebView _registerForIconNotification:]): Wrapped method in
        #if ENABLE(ICONDATABASE)/#endif guard.
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]): Ditto.
        * WebView/WebViewInternal.h: Wrapped methods in #if
        ENABLE(ICONDATABASE)/#endif guard.
        (-[WebView _registerForIconNotification:]):
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):

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-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig with the power of Grayskull.

        Enable XSSAuditor by default.

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

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

        Reviewed by Antti Koivisto.

        Add delegate methods about focus and blur and state change
        https://bugs.webkit.org/show_bug.cgi?id=27153

        Call the appropriate private delegate methods from the ChromeClient.
        
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::formStateDidChange):
        (WebChromeClient::formDidFocus):
        (WebChromeClient::formDidBlur):
        * WebView/WebUIDelegatePrivate.h:

2009-07-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=27141
        
        Updated WebInspectorClient to use Web Inspector Preferences to remember whether or not it should be 
        docked or a free window instead of NSUserDefaults it used to have.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]):
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):

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